C# 在c中启动固定在任务栏上的应用程序时,如何获取窗口句柄?

C# 在c中启动固定在任务栏上的应用程序时,如何获取窗口句柄?,c#,window-handles,C#,Window Handles,我正在创建一个应用程序,使用以下代码通过程序关闭计算机显示: private const int WM_SYSCOMMAND = 0x0112; private const int SC_MONITORPOWER = 0xF170; [DllImport("user32.dll")] private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam); public void turnOf

我正在创建一个应用程序,使用以下代码通过程序关闭计算机显示:

private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MONITORPOWER = 0xF170;

[DllImport("user32.dll")]
    private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);

public void turnOffMonitor(int Handle)
    {
        SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
    }
为了得到窗口句柄,我使用以下代码

[DllImport("user32.dll")]
    private static extern IntPtr GetForegroundWindow();

public static int getCurrentWindowHandle()
    {
        IntPtr hWnd = GetForegroundWindow();
        int handle = hWnd.ToInt32();
        return handle;
    }
注意:我正在创建的这个应用程序没有UI

在VisualStudio2008 professional中调试时,每件事情都可以正常工作。 但是,当我将exe固定到任务栏并单击它时,返回的窗口句柄是0。因此显示器无法关闭。现在,当从任务栏启动应用程序时,我应该如何获得窗口句柄

示例主程序如下所示:

static class Program
{
    private static const int WM_SYSCOMMAND = 0x0112;
private  static const int SC_MONITORPOWER = 0xF170;

[DllImport("user32.dll")]
    private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);

[DllImport("user32.dll")]
    private static extern IntPtr GetForegroundWindow();

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        IntPtr hWnd = GetForegroundWindow();
        int handle = hWnd.ToInt32()
        SendMessage(handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);            
    }

尝试将消息发送到IntPtrHWND_广播,而不是不存在的UI窗口。顺便说一下,广播是int-HWND_-BROADCAST=0xFFFF;谢谢你,我试过了。它的工作:-它帮助了我很多。很高兴听到它为你工作。