2011-06-22 75 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();