我想用一个定时器做到对另一个程序的Edit控件中指定文字的检测,如“程序错误”四个字,请问应该怎样实现?补充,那个程序启动的时候默认界面并没有那个Edit控件,需要点击Tab控件切换到另一个Tab才有。求大侠解答。

解决方案 »

  1.   

    打开 spy++, 看下那个控件 是什么时候创建出来的, 并查看它的窗口名称或者类名,而后在你的程序中通过它们来获取窗口句柄,然后你SendMessage给它,消息可能使用WM_CHAR, 好久没搞过界面的东西, 不知道对不对, 你自己再查下
      

  2.   


    先发送点tab的消息然后枚举窗口,得到目标窗口,然后getstring,在枚举完一次窗口之后,就不用枚举了,这个窗口的生命周期是那个软件的生命周期
      

  3.   

    给你完整的代码
    /*******************************************************************
     文件名        :WinMain.cpp
     创建者        :hankcs
     创建时间      :2010-6-26 18:45:49
     功能描述      :获取其他程序中的文本Demo,打开记事本输入随便
                     几个字符来测试本程序
                     
     ******************************************************************/
    #include <windows.h>
    #include <stdio.h>BOOL CALLBACK EnumChildWindowsProc(HWND hwndChild, LPARAM lParam) // 枚举子窗体的函数
    {
    CHAR szClassName[MAX_PATH];
    ::GetClassNameA(hwndChild, szClassName, sizeof(szClassName)/sizeof(CHAR));
    if(stricmp(szClassName, "Edit") == 0)
    {
    ::SendMessage(hwndChild, WM_GETTEXT, (WPARAM)sizeof(szClassName)/sizeof(CHAR), (LPARAM)szClassName);
    MessageBox(NULL, szClassName, "Debug", MB_OK);

    return (true);
    }BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) 
    {
    char wtitle[512];
    GetWindowText(hwnd, wtitle, sizeof(wtitle));
    if (strstr(wtitle , "记事本"))       //窗口标题含有特定字符
    {
    EnumChildWindows(hwnd, EnumChildWindowsProc, NULL);
    }
    return (true);
    }///////////////////////////WinMain//////////////////////////////////
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    EnumWindows(EnumWindowsProc, 0);
    return 0;
    }
    ///////////////////////////End Sub//////////////////////////////////