![]() |
![]() |
IlyaT 28.06.2004 - 11:22 | Пытаюсь захватывать экран из сервиса. Стандартно через GetDC (0), сервису разрешаю взаимодействие с рабочим столом. И это даже работает. Пока один пользователь. Стоит зайти под другим - ничего не захватывается. Что делать? |
IlyaT 1 - 01.07.2004 - 06:16 | up |
Delphist 2 - 01.07.2004 - 14:16 |
Если это NT, то там нужна хитрая возня с аккаунтами. Глянь MSDN на предмет Window Station |
IlyaT 3 - 02.07.2004 - 17:29 |
Спасибо, буду смотреть. И попутно еще один вопрос: а можно захватить не рабочий стол, а console-output? |
IlyaT 4 - 05.07.2004 - 11:58 |
Читал MSDN. Много думал. Осознал, что интерактивный сервис подключается к нулевой оконной станции (Window Station) так же как и первый пользователь залогинившийся в систему. Поэтому сервису и удается захватить десктоп одного пользователя. Но мне все равно совсем непонятно, как определить какая станция сейчас активна и переподключить к ней свой сервис. |
Delphist 5 - 05.07.2004 - 17:45 |
Что значит "активна"? ИМХО, это как вопрос про "какое из окон программы является главным" (ответ: главного окна нет, они все равноправные). Опять-таки ИМХО, нужно что-то типа: hNewSta := OpenWindowStation('Winsta0', True, STANDARD_RIGHTS_REQUIRED); if hNewSta <> 0 then begin hOldSta := GetProcessWindowStation; if SetProcessWindowStation(hNewSta) then begin hd := OpenDesktop('Default', 0, True, STANDARD_RIGHTS_REQUIRED); if hd <> 0 then begin EnumDesktopWindows(hd, @EnumDesktopWindowsProc, 0); if FirstWin <> 0 then begin ... |