通过服务调用Win32 API

时间:2009-10-03 06:33:30

标签: c# winapi

我开发了一个程序,通过标准的sendmassage api调用来关闭监视器:

    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服务中。我怎样才能让它发挥作用?

此致 基督教

2 个答案:

答案 0 :(得分:1)

使用HWND_BROADCAST / -1是错误的我甚至不知道从哪里开始,请参阅this blog post了解详情

如果由于某种原因无法创建窗口,您可以尝试直接PInvoke DefWindowProc函数

您是否确定可以通过服务执行此操作?您可能必须调用CreateProcessAsUser并启动帮助应用程序

答案 1 :(得分:0)

您可以使用GetDesktopWindow方法并将消息发送到该窗口。或者您可以使用FindWindow和FindWindowEx方法获取当前活动窗口并在那里发送消息。或者,您可以在服务中添加对System.Windows.Forms的引用,并实例化Form对象并使用该句柄发送消息。