2011-04-30 176 views
0

我使用Visual Basic 2008隱藏/顯示程序窗口

,比如我有運行notepad.exe,我可以隱藏記事本窗口,然後,如果我需要它再次顯示它?

謝謝。

+0

這比您想象的要困難得多。如果你是一個開始學習VB.NET的程序員,那麼這是你需要做的最後一件事。它要求您從Windows API調用函數,使用P/Invoke從託管代碼中調用非託管代碼。這是可能的,但我不一定會推薦它。你想解決什麼問題?爲什麼你的應用程序需要控制其他應用程序(如記事本)?程序應該獨立於其他程序運行。如果您需要編輯文本,請使用工具箱中的「TextBox」控件;它幾乎與記事本一樣 – 2011-04-30 11:43:45

回答

5
  • 致電​​通過"notepad"
  • 然後從返回的過程中讀取MainWindowHandle
  • P/Invoke ShowWindow()傳遞SW_HIDESW_SHOW隱藏/顯示窗口。

P/Invoke signature是:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Boolean 
End Function 

ShowWindow()主題列出的數值爲SW_*標誌。


感謝@Alex K代表建議作爲註釋使用ShowWindowAsync()而非ShowWindow()

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function ShowWindowAsync(ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Boolean 
End Function 

從文檔:

該函數將顯示窗口 事件到 給定窗口的消息隊列。應用程序可以使用此函數來避免在等待 不響應的應用程序完成 處理顯示窗口事件時變爲 不響應。

+2

更好使用'ShowWindowAsync'作爲它針對差異線程擁有的窗口,並且如果目標掛起/不響應,則不會阻塞。 (相同的原型) – 2011-04-30 12:46:53

+0

@亞歷克斯謝謝,更新 – 2011-04-30 12:52:30

+0

謝謝,讓它的工作我改變nCmdShow類型爲整數,它工作良好,但..它隱藏窗口,但後來我無法顯示它,SW_SHOW值是5和我試過ShowWindowAsync(hwnd,5),什麼也沒有發生......什麼是錯的? – John 2011-04-30 15:19:26