有一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程序是有作用的.想直接用键盘驱动级的模拟来完成这个任务.
就象一些大型的游戏一样.消息级的模拟是不行的可是不清楚这个键盘驱动级的中断模拟应该如何写?
求教大家!!分数不多了,可以后追加!
现在需要写一软件来按时间顺序控制其中的某个按钮(快捷键为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程序是有作用的.想直接用键盘驱动级的模拟来完成这个任务.
就象一些大型的游戏一样.消息级的模拟是不行的可是不清楚这个键盘驱动级的中断模拟应该如何写?
求教大家!!分数不多了,可以后追加!
//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");
认真研究研究!!
{
//接收到点击按钮消息
if( pCW->message == WM_HOOKSPY ) { //点击按钮
SendMessage( g_hWnd,。);
//卸载钩子
UnhookWindowsHookEx(g_hHook );
}
//将消息处理权转让给下一个钩子函数
return CallNextHookEx(g_hHook, code, wParam, lParam);
}
Spy++找不到
只能找到一个组合的位置
就象网页上面用Spy++只能框住菜单拦和工具栏
我这里不会往上发图
希望我的描述能使大家明白可
\