设置活动窗口

时间:2011-06-22 03:09:56

标签: c# winapi

我正在尝试创建一个提供地震样式下拉式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);
}

4 个答案:

答案 0 :(得分:3)

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

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

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

我最初只是将TopMost设置为true,但是我遇到了显示在表单后面的对话框的问题。看起来将TopMost设置为true会将表单拉到前面并将其保留在那里。将其设置为false并不会将其推回但允许其他表单显示在前面。我仍然有焦点问题,所以我最终得到了以下内容:

form.Activate();

答案 1 :(得分:1)

试试这个(适合我):

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);
}

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

你有没有理由不能实现自己的控制台窗口?我的意思是一个简单的表单,文本框设置为正确的样式。您可能比尝试使用'cmd'过程更能控制它的工作方式。

只是一个想法。