0

特定のホットキーが押されたときにアクティブ ウィンドウを取得しようとしていますが、私のプログラムは、現在画面に表示されているもの (Firefox、Chrome など) ではなく、アプリケーションのメイン フォームを常にアクティブ ウィンドウとして返します。ホットキーを押すと、フォームが何らかの形でアクティブと見なされ、それがフォアグラウンド ウィンドウとして返されているのではないかと思います。

これは、現在アクティブなウィンドウを取得するために使用しているものです

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

public IntPtr getCurrentlyActiveWindow()
{
    //Debugging
    const int nChars = 256;
    IntPtr handle = IntPtr.Zero;
    StringBuilder Buff = new StringBuilder(nChars);
    handle = GetForegroundWindow();
    GetWindowText(handle, Buff, nChars);
    MessageBox.Show(Buff.ToString());

    return GetForegroundWindow();
}

実際のアクティブウィンドウを取得するために何ができるかについてのアイデアはありますか?

4

1 に答える 1

0

現在アクティブなウィンドウを取得する前に、誤ってフォームにフォーカスを与えていました。これが私が最終的に得たものです

//Listen for the hotkey
protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    if (m.Msg == WM_HOTKEY)
    {
        Keys vk = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
        int fsModifiers = ((int)m.LParam & 0xFFFF);

        //Perform action when hotkey is pressed
        if (vk == userHotkey)
        {
            minimizeWindow();
        }
    }
}

//Minimize the currently active window
private void minimizeWindow()
{
    //Get a pointer to the currently active window
    IntPtr hWnd = getCurrentlyActiveWindow();
    if (!hWnd.Equals(IntPtr.Zero))
    {
        //Minimize the window
        ShowWindowAsync(hWnd, SW_SHOWMINIMIZED);
    }
}

//Get the currently active window
private IntPtr getCurrentlyActiveWindow()
{
    this.Visible = false;
    return GetForegroundWindow();
}
于 2013-09-05T14:07:11.673 に答える