Вызов Win32 API через сервис - PullRequest
0 голосов
/ 03 октября 2009

Я разработал программу, которая отключает монитор с помощью стандартного вызова API sendmassage:

    public int WM_SYSCOMMAND = 0x0112;
    public int SC_MONITORPOWER = 0xF170;
    const int HWND_BROADCAST  = 0xFFFF;
    SendMessage(-1, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

У меня вопрос: я не хочу, чтобы это была форма Windows, а вместо этого служба Windows ... Sendmessage отсутствует в службе Windows. Как мне заставить его работать?

С уважением, Christian

Ответы [ 2 ]

1 голос
/ 03 октября 2009

Использование HWND_BROADCAST / -1 настолько неправильно, я даже не знаю, с чего начать, см. этот пост для деталей

Если по какой-либо причине вы не можете создать окно, вы можете попробовать PInvoke вызвать функцию DefWindowProc напрямую

Вы даже уверены, что это возможно сделать из службы? Возможно, вам придется вызвать CreateProcessAsUser и запустить вспомогательное приложение

0 голосов
/ 03 октября 2009

Вы можете использовать метод GetDesktopWindow и отправить сообщение в это окно. Или вы можете использовать методы FindWindow и FindWindowEx, чтобы получить текущее активное окно и отправить туда сообщение. Или вы можете добавить ссылку на System.Windows.Forms в вашем сервисе и создать экземпляр объекта Form и использовать этот дескриптор для отправки сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...