2013-07-25 65 views

回答

2

您不能使用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") 

您需要更改之前等待很短的幾毫秒窗口標題,否則窗口標題不會改變。

+0

你還需要添加:Imports System.Runtime .InteropServices –

+0

這是如何在C#中完成的 – IEnumerable

1

你需要使用的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秒)。更好的方法是主動檢測窗口的創建時間,但這超出了這個問題的範圍。

+1

'Process.Start(Byval fileName as String)'是一個共享成員...沒有任何狀態將與'myProc'關聯,這意味着'Process.MainWindowHandle'將會爲null,從而導致運行時異常。代碼不會編譯(刪除分號:-p)。 –

+1

C#的習慣習慣,不好意思:( – nathanchere

+0

你的代碼還是錯的... –