2011-08-06 89 views
1

嗨我有一個新的問題要求所有的程序員解決。有沒有辦法我可以按下按鈕或有一個定時器,將觸發一個事件,這將使我的應用程序從一個應用程序切換到另一個?例如讓我說我想創建一個應用程序,當我按下按鈕時,它將從當前應用程序切換到另一個運行如記事本或遊戲或其他應用程序的應用程序。有沒有辦法在C#中從一個應用切換到另一個?

如果有一種方法可以打開一個特定的應用程序的名字,這將是偉大的,謝謝。

PS:我已經知道如何對一個計時器進行編碼,所以如果你不想要的話,你不必發佈一個計時器。

回答

3

使用兩個WinAPI的功能FindWindowSetFocus,你可以達到你想要的目標:

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

[DllImport("user32.dll")] 
static extern IntPtr SetFocus(IntPtr hWnd); 

例如,要設置一個記事本窗口標題爲「」到前臺,您可以使用以下代碼:

SetFocus(FindWindow("Notepad", "Untitled - Notepad")); 

如果您不知道表單的名稱,那麼您可以使用其他WinAPI函數枚舉窗口。


或者,你可以,如果你引用它使用來自Microsoft.VisualBasic.dllInteraction.AppActivate()方法,在命名空間Microsoft.VisualBasic找到。

只是簡單的電話Interaction.AppActivate("window title")Interaction.AppActivate(iPID)

該方法的相應文檔可以找到here

+0

我認爲有一個更簡單的方法來做這個看海報的問題,我嘗試過,但我似乎無法得到它的權利,雖然這是它的鏈接。 http://www.devmaster.net/forums/archive/index.php/t-4800.html – mendez

+0

謝謝@門德斯。我更新了我的答案以顯示「Interaction.AppActivate()'方法的用法。 – foxy

+0

很高興我能幫忙,但是因爲我仍然是一個小菜鳥,所以我不確定如何實施這個工作,你能告訴我一個更詳細的例子嗎?只是一個簡單的按鈕點擊它將會感謝。 – mendez

0

您可以使用Pinvoke調用SetFocus函數,該函數採用WindowHandle並將鍵盤焦點設置爲該屏幕。

http://msdn.microsoft.com/en-us/library/ms646312(v=vs.85).aspx

http://www.pinvoke.net關於如何使用的PInvoke更多的信息。

http://support.microsoft.com/kb/147659:一篇好文章,如果你不確定窗口標題是什麼(如果你這樣做,那麼你可以得到所有的窗口句柄,然後使用GetWindowName()來獲取窗口名稱,並檢查是否是一個你想,GetWindowName也需要一個窗口句柄)

相關問題