2011-06-22 76 views
7

我正在试图制作一个应用程序,它可以提供地震下拉式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); 
} 

回答

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

SETFOCUS()如果您切换到不同的应用程序犯规抓住重点和调用命令(我有showapp()方法设置为在代字号上触发。)如果你不改变隐藏和显示它停留在控制台上的焦点,即使隐藏。 – Michael

-1

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

只是一个想法。

3

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

的WINAPI方法不正确地为我工作,但这确实:

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

我本来只是最顶层设置为true但是我遇到了在窗体后面显示对话框的问题。看起来,将TopMost设置为true会将表单拉到前面并将其保存在那里。将其设置为false不会将其推回,但可以让其他表单显示在前面。我仍然有焦点问题,所以我结束了以下准备:

form.Activate();