2009-09-28 119 views
0

我在Windows應用程序中完成了全局鼠標事件。當我點擊我的鼠標的中心按鈕時,我想製作一個特定的表格最頂層...如何使windows窗體在c#中完成的Windows應用程序前來?

有一些應用程序在全屏模式下運行,所以我需要這樣做,爲了使我的表單對用戶可見,因爲這是查看它的唯一方法。由於Alt + Tab被禁用。這是一個Kiosk應用程序。

我嘗試使用Topmost = true的特定形式和 我試着使用下面的代碼...但沒有用。我沒有得到我的表格。

[DllImport("User32.dll")] 
    public static extern Int32 SetForegroundWindow(int hWnd);  

    [DllImport("user32.dll")] 
    public static extern int FindWindow(string lpClassName, string lpWindowName);       

    private void BringToFront(string className,string CaptionName) 
    { 
     SetForegroundWindow(FindWindow(className,CaptionName)); 
    } 

必須觸發此窗體帶來前端的全局熱鍵正在完美工作。

如何讓我的表單前來?謝謝。

回答

2

得到窗口的句柄,併爲此

SetWindowPos(HWND,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);

+0

@Andrew Keith,我試過了,但還是沒有成果。 – Anuya 2009-09-28 06:20:48

3

不關我事,但是你有沒有試過搞亂:

this.BringToFront(); 

this.Activate(); 
+0

這對我的作品。 – 2014-03-20 18:24:44

0

要設置的全屏窗體的最頂層爲false,然後繼續。

0

您可能無法正確調用BringToFront方法。對於FindWindow API函數,lpClassName將是您的應用程序的名稱(例如「MyApplication.exe」),而lpWindowName是指特定窗體的標題欄中的標題(例如「Form1」)。通常使用FindWindow通過其中一個或另一個,例如:

FindWindow("MyApplication.exe", null); 
// or 
FindWindow(null, "Form1"); 

我不確定當你通過這兩者時會發生什麼。

您可能還需要做一些簡單的事情來實現這一點,比如調用特定窗體的Activate()方法。

+0

我試過上面的,但是沒有工作... – Anuya 2009-09-28 03:47:47

+0

我想你應該發佈一些額外的代碼。我不確定您在做什麼,完全處於信息亭模式。在Windows中顯示錶單並改變它們在z-stack中的位置是非常簡單和基本的,但是你可能會做些奇怪的事情。 – MusiGenesis 2009-09-28 03:58:00

+0

@MusiGenesis,我不能在這裏發佈我的整個代碼,因爲有很多。 是的,這對我來說也很奇怪......在全屏模式下,我的系統上還會運行另一個應用程序。當用戶點擊鼠標中心按鈕時,我需要一種方式向用戶顯示我的表單。 我通過添加「HI」消息框來測試我的鼠標中心按鈕爲全局事件。它的工作完美。 唯一的是,我需要現在顯示我的表單。 注::我的代碼顯示錶單不是在相同的形式,它是在不同的地方。這是否會造成任何問題? – Anuya 2009-09-28 04:14:45

4

我解決它,這樣做:

this.TopMost = true; 
this.TopMost = false; 
+0

這對我有用。 – 2014-03-20 18:25:29

+0

這對我有用,但我必須先做「this.BringToFront()」第一個 – 2015-10-09 13:10:03

相關問題