如何在啓動Process.Start之後更改窗口標題?如何在啓動Process.Start之後更改窗口標題?
Dim myProc as Process
myProc = myProc.Start("NotePad.exe")
不幸的是myProc.MainWindowTitle = "Fancy Notepad"
不工作,因爲這是隻讀的。那麼怎麼做呢?
如何在啓動Process.Start之後更改窗口標題?如何在啓動Process.Start之後更改窗口標題?
Dim myProc as Process
myProc = myProc.Start("NotePad.exe")
不幸的是myProc.MainWindowTitle = "Fancy Notepad"
不工作,因爲這是隻讀的。那麼怎麼做呢?
您不能使用Process.MainWindowTitle
更改窗口標題,因爲屬性爲只讀。
爲了改變窗口標題,您將首先需要獲得一個句柄目標窗口,然後指導操作系統,改變與相關的窗口的標題處理使用Win32 API函數SetWindowsText
這樣
<DllImport("user32.dll")> _
Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal windowName As String) As Boolean
End Function
一旦你定義了你上面的功能可以繼續使用下面的代碼來處理窗口標題:
Dim process As New Process()
process.StartInfo.FileName = "notepad.exe"
process.Start()
Thread.Sleep(100)
SetWindowText(process.MainWindowHandle, "Fancy Notepad")
您需要更改之前等待很短的幾毫秒窗口標題,否則窗口標題不會改變。
你需要使用的Win32 API調用SetWindowText()
的VB.Net進口:
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean
End Function
用例:
myProc.Start("notepad.exe")
'Note #1
SetWindowText(myProc.MainWindowHandle, "h4x3d title")
#1:你需要允許在嘗試設置窗口文本之前啓動進程的時間。如果您在創建窗口之前設置了文本,它將不會顯示任何內容。最簡單的方法是將睡眠時間調整爲任意時間(例如1秒)。更好的方法是主動檢測窗口的創建時間,但這超出了這個問題的範圍。
'Process.Start(Byval fileName as String)'是一個共享成員...沒有任何狀態將與'myProc'關聯,這意味着'Process.MainWindowHandle'將會爲null,從而導致運行時異常。代碼不會編譯(刪除分號:-p)。 –
C#的習慣習慣,不好意思:( – nathanchere
你的代碼還是錯的... –
你還需要添加:Imports System.Runtime .InteropServices –
這是如何在C#中完成的 – IEnumerable