Windows獲取其他程序中Edit控制元件的內容
最近做的MFC專案中,有個獲取其他程序中Edit控制元件內容的需求,本來以為是個很簡單的問題,但是來來回回折騰了不少時間,發博記錄一下。
剛開始拿到這個問題,很自然的就想到GetDlgItemText():
UINT GetDlgItemText( HWND hDlg, // handle to dialog box int nIDDlgItem, // control identifier LPTSTR lpString, // pointer to buffer for text int nMaxCount // maximum size of string );The GetDlgItemText function retrieves the title or text associated with a control in a dialog box.
看API的描述和要實現的需求一樣,自然就用起來了,可發現不管怎樣這個API始終呼叫失敗,獲取不到內容。一直以為是程式碼哪裡出問題了,除錯好久。後來Google之後在CSDN論壇上找到個老帖,得知這個API只有在Windows 2K之前的系統才能跨程序使用,無奈放棄。
於是查了下,還有一個GetWindowText()
int GetWindowText( HWNDhWnd, // handle to window or control LPTSTR lpString, // text buffer int nMaxCount // maximum number of characters to copy );The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText
cannot retrieve the text of a control in another application.
描述裡面很清楚寫著不能對其他程式使用,又一次失敗。
PS:吐槽一下,為什麼GetDlgItemText()裡面不寫這句話,浪費俺的時間。╮(╯▽╰)╭
解決方法:使用SendMessage()向程序發WM_GETTEXT訊息獲取。
SendMessage(handle,message,Wparam,lparam);
Handle為視窗控制代碼,
message為訊息型別,
wparam和lparam為訊息引數;
WM_GETTEXT
An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.
其實使用這個訊息等於用Getwin