需要向这个窗口里面的编辑框中输送文本,并模拟点击上面的execute按钮。用Spy++获得主窗口类名为TMainForm.UnicodeClass,编辑框窗口标题是QueryArea,类名是TSQLEditor。HWND hwnd=::FindWindow(_T("TMainForm.UnicodeClass"),NULL);
HWND edit=::FindWindowEx(NULL,NULL,NULL,_T("QueryArea"));
HWND hwnd=::FindWindow(_T("TMainForm.UnicodeClass"),NULL);
HWND edit=::FindWindowEx(NULL,NULL,_T("TSQLEditor"),NULL);单步调试的时候发现这两种方法都能正确获得主窗口句柄,但不能获得编辑框的句柄。请问问题出在哪里?如果获得了编辑框的句柄,又怎样输入字符?
HWND edit=::FindWindowEx(NULL,NULL,NULL,_T("QueryArea"));
HWND hwnd=::FindWindow(_T("TMainForm.UnicodeClass"),NULL);
HWND edit=::FindWindowEx(NULL,NULL,_T("TSQLEditor"),NULL);单步调试的时候发现这两种方法都能正确获得主窗口句柄,但不能获得编辑框的句柄。请问问题出在哪里?如果获得了编辑框的句柄,又怎样输入字符?
HWND edit=::FindWindowEx(hwnd,NULL,_T("TSQLEditor"),NULL);
事情其实是这样的……
SendMessage来实现
WM_CHAR
WM_KEYDOWN
WM_SETTEXT
之类的都行,个人感觉SetWindowText会快些,其实原理都一样
HWND edit=::FindWindowEx(NULL,NULL,NULL,_T("QueryArea"));
HWND hwnd=::FindWindow(_T("TMainForm.UnicodeClass"),NULL);
HWND edit=::FindWindowEx(NULL,NULL,_T("TSQLEditor"),NULL);
HWND hwnd=::FindWindow(_T("TMainForm.UnicodeClass"),NULL); HWND edit=::FindWindowEx(NULL,NULL,NULL,_T("QueryArea"));
纠正:HWND hwnd=::FindWindow(_T("TMainForm.UnicodeClass"),NULL);
HWND edit=::FindWindowEx(hwnd,NULL,NULL,_T("QueryArea"));
HWND hwnd=::FindWindow(_T("TMainForm.UnicodeClass"),NULL);
HWND edit=::FindWindowEx(hwnd,NULL,_T("TSQLEditor"),NULL);
HWND h12=::FindWindowEx(h11,NULL,_T("TSQLEditor"),NULL);
::SetWindowText(h12,_T("test"));SetWindowText无效,不知道是不是因为这个编辑框不是标准控件?
那该怎样设置文字呢?最好能是字符串形式的。
WM_SETTEXT
试试这个消息写入控件的值.
char *p = ( char * )new char[13];
strcpy( p, "tmd,还不行?!" );
::SendMessage( h12, WM_SETTEXT, 0, ( LPARAM )p );
发送单一字符是可以的。
我现在用的是剪切板粘贴进去。不过有个问题,就是内容都是追加的,之前内容不能清空,该如何解决?