【问题标题】:Set active window设置活动窗口
【发布时间】:2014-02-28 16:41:10
【问题描述】:

我正在尝试制作一个提供地震风格下拉 HUD 控制台的应用程序。我可以让它显示和隐藏窗口,但我不知道如何在显示后将其设置为活动窗口。我使用 Win API 调用来显示和隐藏窗口。我试过 SetForegroundWindow(IntPtr hWnd) 和 SetFocus(IntPtr hWnd) 无济于事。有人有想法么?

http://pastebin.com/DgtJJGiv

public void ShowApp()
{
    IntPtr h = FindWindow(null, "C:\\Windows\\system32\\cmd.exe");
    ShowWindow(h, SW_SHOW);
    //EnableWindow(h, true);
    isHidden = false;
        // set focus to console window

    SetForegroundWindow(h);
    System.Diagnostics.Debug.WriteLine(h);
}

【问题讨论】:

    标签: c# winapi


    【解决方案1】:

    我在这里找到了答案: How to show form in front in C#

    winAPI 方法对我来说无法正常工作,但确实如此:

    form.TopMost = true;
    form.TopMost = false;
    

    我最初只是将 TopMost 设置为 true,但在表单后面显示对话框时遇到了问题。似乎将 TopMost 设置为 true 会将表单拉到前面并将其固定在那里。将其设置为 false 不会将其推回,但确实允许其他表单显示在前面。我仍然无法集中注意力,所以我最终选择了以下方法:

    form.Activate();
    

    【讨论】:

      【解决方案2】:

      您可以使用SetActiveWindow winAPI 方法。希望这会有所帮助...

      【讨论】:

        【解决方案3】:

        试试这个(对我有用):

        public static void ShowApp()
        {
            IntPtr h = FindWindow(null, "C:\\Windows\\system32\\cmd.exe");
            ShowWindow(h, ShowWindowCommands.Show);
            SetForegroundWindow(h);
            SetFocus(h);
            System.Diagnostics.Debug.WriteLine(h);
        }
        

        【讨论】:

        • Setfocus() 如果您切换到不同的应用程序并调用命令,则不会抓住焦点(我将 showapp() 方法设置为在波浪号上触发。)如果您不在隐藏和之间更改焦点显示它会保留在控制台上,即使在隐藏时也是如此。
        【解决方案4】:

        你有什么理由不能实现你自己的控制台窗口吗?我的意思是一个简单的表单,其文本框设置为正确的样式。与尝试使用“cmd”进程相比,您可能对它的工作方式有更多的控制权。

        只是一个想法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多