我們先看一下 GetWindowText 原型 (下面加過註解)
int WINAPI GetWindowText(
__in HWND hWnd, // 視窗 handle
__out LPTSTR lpString, // 存字串的變數
__in int nMaxCount // 這個字串最多可以存幾個字
);
這裡有二個地方要注意,在 msdn 上看到參數有 __out 的地方,代表它是把結果存在那個變數裡面。也就是說,我在調用 GetWindowText 時要給它一個變數,執行完後,它會把結果存在該變數裡面。
第二個要注意的是,HWND hwnd 是要指定內容後才可以給它的東西,在這裡我們可以先調用 autoit 裡面的 WinGetHandle ,這樣就可以讓它成為輸入的東西。
假設我們要取得的視窗名稱是 "未命名 - 記事本" (所以請先用 cmd.exe 輸入 notepad.exe),整理後便可以這麼寫
$hwnd = WinGetHandle("未命名 - 記事本")
$result = DllCall("user32.dll", "int", "GetWindowText", "hwnd", $hwnd, "str", "", "int", 32768)
那我們要怎麼從知道這視窗的標題文字?
嗯,別忘了 $result 的功用 - $result[0] 代表的就是傳回結果,這裡傳回值指的是那個視窗文字的長度;$result[1] 是 hwnd,那是一個 16 進制的整數; $result[2] 就是我們要的 - 那個視窗的文字內容。可以再輸出下面指令便可知
msgbox(0, "", $result[0]) ; 返回字元數量
msgbox(0, "", $result[2]) ; 在 param 2 的返回文字
假設我們要找的 window 標題是 "未命名 - 記事本" (所以請先在 cmd.exe 輸入 notepad.exe),一般在 C 語言調用的時候,通常第二個參數不會給它值。所以 autoit 要調用的話我們可以很快寫出來
$Result = DllCall ("user32.dll", "FindWindow", "hwnd", "str", "未命名 - 記事本", "str", "")
$hwnd = WinGetHandle("未命名 - 記事本")
$result = DllCall("user32.dll", "int", "GetWindowText", "hwnd", $hwnd, "str", "", "int", 32768)
msgbox(0, "", $result[0]) ; 返回字元數量
msgbox(0, "", $result[2]) ; 在 param 2 的返回文字
留言列表