Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > SendInput и keybd_event на уровне 'Local System'


Автор: Ak47black 29.12.2007, 17:26
Здравствуйте.
Столкнулся с проблемой.
Использоваю keybd_event для эмуляции клавиш.
Если сделать сервис (который работает под 'Local System'), то когда юзер залоген, то все работает. А когда он делает LogOff то появляется диалог выбора юзера и вот тут почемуто эта функция и еше некоторые неработают.
Пробовал сделать с SendInput, но тоже самое.
В Delphi поставил INTERACTIVE  у класса TService.
Я как понял тут чтото с Desktopами связанно (OpenWindowStation/SetProcessWindowStation/OpenDesktop/SetThreadDesktop).
Но немогу понять как ими правильно воспользоваться в этой ситуации.
Ктонибудь чтонибудь может подсказать?   smile 

Автор: bems 29.12.2007, 18:43
попробуй OpenInputDesktop а потом SetThreadDesktop

Автор: Ak47black 29.12.2007, 20:31
Попробовал вот так
Код

      hdeskCurrent:= OpenInputDesktop(0, false, GENERIC_ALL);
      SetThreadDesktop(hdeskCurrent);

Но тоже самое после этого.
Читал я статьи M$ 'Interactive Services'[/URL] и попробовал сделать вот такой код 
Код

    hwinstaCurrent:= GetProcessWindowStation;
    if(hwinstaCurrent = 0) then
    begin
      Exit;
    end;
    BackSize:= 0;
    if GetUserObjectInformation(hwinstaCurrent, UOI_FLAGS, @WindowStationInfo, SizeOf(TUserObjectFlags), BackSize) = False then
    begin
      Exit;
    end;
    if WindowStationInfo.dwFlags = WSF_VISIBLE then MessageBox(0, 'INTERACTIVE', 'Message', MB_OK or MB_SERVICE_NOTIFICATION) else MessageBox(0, 'Not INTERACTIVE', 'Message', MB_OK or MB_SERVICE_NOTIFICATION);

Получил INTERACTIVE :( 
Прям даже незнаю куда смотреть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)