servicio windows interactivo con el escritorio
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?