需要向这个窗口里面的编辑框中输送文本,并模拟点击上面的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);单步调试的时候发现这两种方法都能正确获得主窗口句柄,但不能获得编辑框的句柄。请问问题出在哪里?如果获得了编辑框的句柄,又怎样输入字符?

解决方案 »

  1.   

    HWND hwnd=::FindWindow(_T("TMainForm.UnicodeClass"),NULL);
    HWND edit=::FindWindowEx(hwnd,NULL,_T("TSQLEditor"),NULL);
    事情其实是这样的……
      

  2.   

    点击和输入字符都可以用
    SendMessage来实现
    WM_CHAR
    WM_KEYDOWN
    WM_SETTEXT
    之类的都行,个人感觉SetWindowText会快些,其实原理都一样
      

  3.   

    不好意思,这是后来换成NULL的。原来的代码FindWindowEx第一个参数是hwnd。不过两个都不行。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);
      

  4.   

    唉,又贴错了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,NULL,_T("QueryArea"));
      

  5.   

    贴错了三次,看来要休息一下了
    纠正: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);
      

  6.   

    这个对话框结构真复杂啊。现在能正确获取这个编辑框的句柄了
    HWND h12=::FindWindowEx(h11,NULL,_T("TSQLEditor"),NULL);
    ::SetWindowText(h12,_T("test"));SetWindowText无效,不知道是不是因为这个编辑框不是标准控件?
    那该怎样设置文字呢?最好能是字符串形式的。
      

  7.   

    用DWORD GetLastError(VOID);看看错误, 另外, 看看msdn, 有同一进程不同进程之分.
      

  8.   

    用DWORD GetLastError(VOID);看看错误, 另外, 看看msdn, 有同一进程不同进程之分.
      

  9.   

    ::SendMessage(h12,WM_KEYDOWN,   VK_RETURN,   0L);这样只能发送一个回车键,能否发送字符串?
      

  10.   

    ::SendMessage()
    WM_SETTEXT
    试试这个消息写入控件的值.
      

  11.   


    char *p = ( char * )new char[13];
    strcpy( p, "tmd,还不行?!" );
    ::SendMessage( h12, WM_SETTEXT, 0, ( LPARAM )p );
      

  12.   

    WM_SETTEXT、WM_IME_SETCONTEXT都不行
    发送单一字符是可以的。
    我现在用的是剪切板粘贴进去。不过有个问题,就是内容都是追加的,之前内容不能清空,该如何解决?
      

  13.   

    全部搞定了。这个窗口接受Ctrl+Enter,Ctrl+A以及Ctrl+V,利用复制粘贴可以完成任务。