设置活动窗口

8
我正在尝试制作一个类似地震样式的下拉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个回答

4
我在这里找到了答案: 如何在C#中将窗体显示在前面 winAPI的方法对我来说无法正常工作,但是以下方法可以:
form.TopMost = true;
form.TopMost = false;

我最初只将TopMost设置为true,但是我遇到了对话框在窗体后面显示的问题。似乎将TopMost设置为true会将窗体拉到前面并保持在那里。将其设置为false不会将其推回,但允许其他窗体显示在前面。我仍然遇到了焦点问题,所以最终采用了以下方法:

form.Activate();

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

Setfocus()如果你切换到另一个应用程序并调用命令,则无法抓取焦点(我将showapp()方法设置为在波浪符上触发)。 如果在隐藏和显示之间不更改焦点,则它仍停留在控制台上,即使被隐藏。 - Michael

1

-1

你有没有考虑自己实现控制台窗口的原因?我的意思是创建一个简单的表单,将文本框设置为正确的样式。这样做可能比尝试使用“cmd”进程更容易控制它的工作方式。

只是一个想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接