Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-01-2006
derteo derteo is offline
Registrado
 
Registrado: ene 2005
Posts: 5
Poder: 0
derteo Va por buen camino
servicio windows que interaccione con el escritorio con usuario logueado

Estoy desarrollando un servicio de windows con Delphi. El servicio se debe iniciar con una cuenta de usuario(no con una cuenta local)y debe poder interactuar con el escritorio de la máquina en la que se está ejecutando.
Lo que hago es cambiar la estación y el escritorio del servicio por la estación winSta0 y el escritorio Default. De esta manera consigo visualizar las ventanas del proceso word que lanzo, estas ventanas se visualizan incorrectamente, seguramente no se refrescan.
A continuación os pongo el código en delphi q utilizo.
GetDesktopwindow();
hwinstaSave := GetProcessWindowStation();
dwThreadId := GetCurrentThreadId();
hdeskSave := GetThreadDesktop(dwThreadId);
station := 'WinSta0';
desktop := 'Default';

StationWideCharPtr := Addr(station[1]);
DeskWideCharPtr := Addr(desktop[1]);

hwinstaUser := OpenWindowStationW(StationWideCharPtr,
false,MAXIMUM_ALLOWED);

SetProcessWindowStation(hwinstaUser);

hdeskUser := OpenDesktopW(DeskWideCharPtr, 0, false, MAXIMUM_ALLOWED);
SetThreadDesktop(hdeskUser);

HERE I DO THE WORD PROCESS

SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hwinstaSave);
CloseDesktop(hdeskUser);
CloseWindowStation(hwinstaUser);
Alguna idea?
Responder Con Cita
  #2  
Antiguo 11-01-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
No entiendo cuál es el problema.... ¿Quieres que el servicio no precisamente se tenga que crear con el usuario local?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 11-01-2006
derteo derteo is offline
Registrado
 
Registrado: ene 2005
Posts: 5
Poder: 0
derteo Va por buen camino
Uno de los requisitos del servicio es que debe funcionar con una cuenta de usuario, no con la cuenta local. Si funciona con la cuenta local, marcando el chekbox de interacción con el escritorio, la interacción se haría correctamente.

El servicio debe crear un proceso Word, aqui surge el problema(no se visualizan correctamente las ventanas de word). Con el código que puse en el mensaje anterior consigo que se visualicen las ventanas pero lo hacen de una forma incorrecta.

He comprobado que si :
- se creo manualmente un proceso word
- ejecuto el servicio

entonces las ventanas de word usadas por el servicio se muestran correctamente.

La única diferencia que detecté entre las ventanas abiertas usando el servicio y las que abro manualmante es la siguiente:
- las clases de las ventanas word son diferentes o eso creo. Las ventanas que se crean manualmente, lo hacen con la clase OpusApp

OpusApp = Es el nombre de la class Windows de todos los MS-Word
http://www.lawebdelprogramador.com/n...n8=0&n9=0&n0=0


En cambio las ventanas que crea el servicio son GHost. Qué indicará GHOSt?



Estoy usando delphi 7 y word 2003.
Responder Con Cita
  #4  
Antiguo 11-01-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Ahora si...
¿Probaste jugar con el parámetro dwDesiredAccess de OpenDesktop?.. Lo estas pasando en 0, y aparentemente no tendrías acceso a crear ventanas (el proceso local no los creados).
¿Cómo creas el proceso de Word?.. no lo crearás como inherited?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 11-01-2006
derteo derteo is offline
Registrado
 
Registrado: ene 2005
Posts: 5
Poder: 0
derteo Va por buen camino
EL proceso word lo creé de dos formas, obteniendo el mismo reusltado:
1.
word := TWordApplication.Create(self);
word.AutoConnect := False; //más adelante realizo la conexion
word.AutoQuit := False; //al final salimos con la instruccion QUIT
word.ConnectKind := ckRunningOrNew;
word.Connect;
word.WindowState := wdWindowStateNormal;
word.Visible := true;
....
....

2.
try
try
G_objWord := GetActiveOleObject('Word.Application');
except
on e:exception do begin
Log_GrabarLog('WARNING: No existe un proceso Word abierto :' + e.Message);
G_objWord := CreateOleObject('Word.Application');
Log_GrabarLog('INFO: Se ha creado un proceso Word');
end;
end;
//lo muestra
G_objWord.Visible := True;
//lo minimiza.
G_objWord.WindowState := 2;


comprobé los permisos con opendesktop y sigue igual.

Seguiré probando.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dudas con HDESK bustio Varios 14 22-10-2005 06:35:03
Capturar pantalla desde un servicio del windows walrus API de Windows 4 17-08-2005 17:59:14
Cambiar iconos del escritorio de Windows tiel API de Windows 8 03-07-2005 21:10:56
Carga de servicio en logueo de usuario marceloalegre Varios 4 16-05-2005 16:02:56
Microsoft Taglines SnaKe Humor 0 03-06-2003 15:42:27


La franja horaria es GMT +2. Ahora son las 01:10:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi