derteo
11-01-2006, 08:44:08
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?
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?