有一LabVIEW的程序,
现在需要写一软件来按时间顺序控制其中的某个按钮(快捷键为Ctrl+R).可以用下面的语句来找到该软件的窗口,并设为焦点窗口(当前窗口)HWND  sWnd1=::FindWindow(NULL,"C:\\PP\\1.seproj - LabVIEW SignalExpress");
//HWND  sWnd1=::FindWindow(NULL,"无标题 - ttt");
if(sWnd1==NULL)
{
AfxMessageBox("没有找到窗体PXI_1"); 
}
else
{
//::SetActiveWindow(sWnd1);
::SetForegroundWindow(sWnd1); //------------OK
::ShowWindow(sWnd1,SW_RESTORE); //------------OK 设为焦点
}
但是后面无论是用SendMessage还是PutMessage等Windows消息均不能成功
但是对Windows程序是有作用的.想直接用键盘驱动级的模拟来完成这个任务.
就象一些大型的游戏一样.消息级的模拟是不行的可是不清楚这个键盘驱动级的中断模拟应该如何写?
求教大家!!分数不多了,可以后追加!

解决方案 »

  1.   

    http://hi.baidu.com/chenfalei/blog/item/725c9a230237f640ac34de1e.html这个也许对你有用。
      

  2.   

    1.
    //CtrlBtn.dll 该DLL导出了一个函数CtrlBtn,其它应用程序通过调用这个函数就能实现对其它应用程序的Button进行点击。//CtrlBtn.cpp
    #pragma data_seg (".shared")
    HWND g_hWnd = 0; //要读取的编辑框控件句柄
    HHOOK g_hHook = 0; //HOOK句柄
    UINT WM_HOOKSPY = 0; //自定义消息,通知远程进程读取编辑框控件的内容
    #pragma data_seg ()使用共享节时要添加如下的链接选项:
    #pragma comment(linker,"/SECTION:.shared,RWS") __declspec(dllexport) int CtrlBtn(HWND hWnd)

    g_hWnd = hWnd;
    //给目标进程安装一个窗口过程钩子
    g_hHook = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HookProc,
    hDll, GetWindowThreadProcessId(hWnd,NULL) );
    if( g_hHook==NULL ) 
    {
        return 0;
    }
    //注册一个消息,用于通知远程进程操作按钮
    if (WM_HOOKSPY == 0)
    WM_HOOKSPY = RegisterWindowMessage( "WM_HOOKSPY_RK" );

    // 向远程进程发送读取消息,触发其点击按钮
    SendMessage( hWnd,WM_HOOKSPY,0,0 );

    return strlen(lpString);
    }LRESULT HookProc ( int code, // hook code
    WPARAM wParam, // virtual-key code
    LPARAM lParam // keystroke-message information)

    //接收到点击按钮消息
    if( pCW->message == WM_HOOKSPY ) {

    //点击按钮
    SendMessage( g_hWnd,。);
    //卸载钩子
    UnhookWindowsHookEx(g_hHook );
    }
    //将消息处理权转让给下一个钩子函数
    return CallNextHookEx(g_hHook, code, wParam, lParam);
    }2.你的控制程序中这样调用这个dll
    typedef int ( *CtrlBtn)(HWND hWnd);
    CtrlBtn myCtrlBtn=NULL;
    HINSTANCE hDll=0;
    hDll=::LoadLibrary("CtrlBtn.dll");
    myCtrlBtn=(CtrlBtn)::GetProcAddress(hDll,"CtrlBtn");
    CtrlBtn(hwnd); //hwnd是你想要控制的那个窗口的HWND;
    freeLibrary("CtrlBtn.dll");
      

  3.   

    多谢ljlon 
    认真研究研究!!
      

  4.   

    可是我无法得到该按纽的ID的啊LPARAM lParam // keystroke-message information) 

    //接收到点击按钮消息 
    if( pCW->message == WM_HOOKSPY ) { //点击按钮 
    SendMessage( g_hWnd,。); 
    //卸载钩子 
    UnhookWindowsHookEx(g_hHook ); 

    //将消息处理权转让给下一个钩子函数 
    return CallNextHookEx(g_hHook, code, wParam, lParam); 
      

  5.   

    不需要钩子和ID,有控件的句柄就行了。用FindWindowEx就行了,这个是获得控件(子窗体)句柄的
      

  6.   

    可是现在得不到控件的ID或句柄啊
    Spy++找不到
    只能找到一个组合的位置
    就象网页上面用Spy++只能框住菜单拦和工具栏
    我这里不会往上发图
    希望我的描述能使大家明白可
    \