![]() |
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? |
No entiendo cuál es el problema.... ¿Quieres que el servicio no precisamente se tenga que crear con el usuario local?
|
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. |
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? |
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. |
| La franja horaria es GMT +2. Ahora son las 22:58:37. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi