如何将文字信息,模拟人工输入到指定窗口?
具体是,有一个application!,有一个信息录入窗口,然后有一个“保存”键,我想用另外一个程序application2,实现从另外一个数据库提取文字信息,输入到application1的那个信息录入窗口。 
application1可以最小化窗口,并非一直是当前窗口,请问怎么实现。

解决方案 »

  1.   

    使用FindWindow取得信息录入窗口的句柄, 然后向此窗口发送
    WM_SETTEXT消息此方案可以分为两步:
    (1) 获取信息录入编辑框的窗口句柄
    (2) 根据句柄设置输入内容对于(2), 其示例如下
    // 假设已经获得窗口句柄为hDst
    var
      s: String;
    begin
      s := 'Demo';
      SendMessage(hDst, WM_SETTEXT, 0, Integer(@S[1]));
    end;
    此种方法对于编辑框、能够输入的ComboBox有效对于(1),需要根据分析你的application1
    分析的你应用程序的窗口结构可以使用Spy++, (Microsoft Visual Studio附带此工具)
    其有一个Find Window功能,将那个功能中的图标拖到你的窗口上,就可以显示窗口的详细信息
    然后可以根据窗口的树形结构分析窗口之间的关系
    关系清楚了,使用FindWindow, FindWindowEx, GetNextWindow这三个API就可以解决你的问题,
    HWND FindWindow(    // 查找某一窗口
        LPCTSTR lpClassName,
        LPCTSTR lpWindowName
    );
    HWND FindWindowEx(   // 查找某一窗口的子窗口   
        HWND hwndParent,
        HWND hwndChildAfter,
        LPCTSTR lpszClass,
        LPCTSTR lpszWindow
    );
    HWND GetNextWindow(  // 获取窗口的上一个或下一个窗口   
        HWND hWnd,
        UINT wCmd
    );