Lisp

Programmer

博客园 首页 新随笔 联系 订阅 管理

GetWindowText() does not work uniformly, particularly if you are not in the same process as the target. But SendMessage does always work. But even if you know the target, send what to it? My answer is that it depends.

My Test:
(1) window class name: Internet Explorer Server
// the following two messages send the whole text into clipboard
 SendMessage(handle, WM_COMMAND, 0x0001001F, 0x00000000);
 SendMessage(handle, WM_COMMAND, 0x0001000F, 0x00000000);

(2) window class name: Edit (such as notepad)
// I have not keep it minimal
SendMessage(hwnd, 0x0118, 0x0000FFFF, 0xBF8D263B); 
SendMessage(hwnd, 0x0118, 0x0000FFFF, 0xBF8D263B);
SendMessage(hwnd, WM_KEYDOWN, 0x00000011, 0x001D0001);
SendMessage(hwnd, 0x0118, 0x0000FFFF, 0xBF8D263B);
SendMessage(hwnd, WM_KEYDOWN, 0x00000041, 0x001E0001);
//SendMessage(hwnd, EM_GETSEL, 0x0007FC68, 0x0007FC6C);
 
 SendMessage(hwnd, WM_GETTEXTLENGTH, 0x00000000, 0x00000000);
 SendMessage(hwnd, EM_CANUNDO, 0x00000000, 0x00000000);
 SendMessage(hwnd, WM_GETTEXTLENGTH, 0x00000000, 0x00000000);
 SendMessage(hwnd, EM_SETSEL, 0x00000000, 0x000000DD);
 SendMessage(hwnd, EM_SCROLLCARET, 0x00000000, 0x00000000);
 SendMessage(hwnd, WM_KEYUP, 0x00000011, 0xC01D0001);
 SendMessage(hwnd, WM_KEYUP, 0x00000041, 0xC01E0001);
 SendMessage(hwnd, 0x0118, 0x0000FFFF, 0xBF8D263B);
 SendMessage(hwnd, WM_KEYDOWN, 0x00000011, 0x001D0001);
 SendMessage(hwnd, 0x0118, 0x0000FFFF, 0xBF8D263B);
 SendMessage(hwnd, WM_KEYDOWN, 0x00000043, 0x002E0001);
 //SendMessage(hwnd, EM_GETSEL, 0x0007FC68, 0x0007FC6C);
 
 SendMessage(hwnd, WM_GETTEXTLENGTH, 0x00000000, 0x00000000);
 SendMessage(hwnd, EM_CANUNDO, 0x00000000, 0x00000000);
 //SendMessage(hwnd, EM_GETSEL, 0x0007FA10, 0x0007FA14);

 SendMessage(hwnd, WM_COPY, 0x00000000, 0x00000000);
 SendMessage(hwnd, WM_DESTROYCLIPBOARD, 0x00000000, 0x00000000);
 SendMessage(hwnd, WM_KEYUP, 0x00000011, 0xC01D0001);
 SendMessage(hwnd, WM_KEYUP, 0x00000043, 0xC02E0001);
 SendMessage(hwnd, 0x0118, 0x0000FFFF, 0xBF8D263B);

Additional Note: You must send it to the control for which you want its text, and top-level window most likely is not what you want! And you may found the following three functions useful: FindWindow(), FindWindowEx(), GetWindow().

 

posted on 2006-06-19 13:14  fei  阅读(504)  评论(0编辑  收藏  举报