自己做的程序,想向后台的另一个程序发送alt+q的组合键
看过不少高手发的帖子
::SendMessage(bhWnd, WM_KEYDOWN, VK_Q,VK_ALT );
不能实现,请问为什么呀,请高手指教.
PS: 为什么在我的程序中提示error C2065: 'VK_ALT' : undeclared identifier
error C2065: 'VK_Q' : undeclared identifier
奇怪了?难道虚拟吗不能这样用吗?要加头文件吗?
看过不少高手发的帖子
::SendMessage(bhWnd, WM_KEYDOWN, VK_Q,VK_ALT );
不能实现,请问为什么呀,请高手指教.
PS: 为什么在我的程序中提示error C2065: 'VK_ALT' : undeclared identifier
error C2065: 'VK_Q' : undeclared identifier
奇怪了?难道虚拟吗不能这样用吗?要加头文件吗?
解决方案 »
- ffmpeg中av_read_frame(pFmt, &pkt) <0 //什么原因?
- VC++里面是否有个delay()函数,表示延迟?delay(1000)表示延迟1秒?
- listctrl右键点击表头事件
- 如何存取数据到EXE自身之中?
- 弱弱的问个VC窗口的问题:如何实现对话框的隐藏
- vc++ 6.0 sp6用boundschecker6.01检查基本任何程序都有resource泄漏
- 如何控制窗口中CButton ,CEdit, Static的可见与不可见呢?
- 如何将一个按钮打灰,如何将一个按钮激活?
- CString 与 char 如何区别使用
- 有没有vc编写的hex文件下载工具源码和通信协议?
- 如何让自己的程序适应不同的分辨率????
- 求助:PCWSTR 转为 CHAR *,也就是WCHAR->char
我用上面这个能实现向后台程序发送数据的情况,,,,证明方法是没错的呀
自己定义吧。
我按照 jasonshark(最后一个暑假了...) 的办法添加了
可是没有反应呀..
举个简单列子
我的程序控制打开的一个 文本文件
我能往里面 用 ::SendMessage(bhWnd, WM_CHAR, 'e', 0); 添加字母进去
可是我想用 ALT+E 打开后台状态的 文本文件的菜单 这个能实现吗?
我用了 JASON的办法 不行呀,,,
要不要 做个钩子呀
以前玩UO的时候有个月光MONNLIGHT 工具软件 就是能后台挂几的....
我这整了个源程序 可惜我看不懂......他是怎么实现的??
我发出来吧...\
//发送快捷键事件
if(lb_event[i].vk!=-1)
{
lParam_keydown = DWORD(keyscancode<<16) + 1;
lParam_keyup = DWORD(keyscancode<<16) + 1 + 0xC0000000;
pWnd->PostMessage(WM_KEYDOWN,lb_event[i].vk,lParam_keydown);
pWnd->PostMessage(WM_KEYUP,lb_event[i].vk,lParam_keyup);
}
//快捷键等待
for(j=0;j<lb_event[i].keytime/100;j++)
{
if(LoopYield()==TRUE)
return TRUE;
Sleep(100);
} //发送鼠标事件
if(lb_event[i].msgdown==WM_LBUTTONDOWN)
{
pWnd->PostMessage(lb_event[i].msgdown,MK_LBUTTON,lParam);
pWnd->PostMessage(lb_event[i].msgup,0,lParam);
}
if(lb_event[i].msgdown==WM_LBUTTONDBLCLK)
{
pWnd->PostMessage(WM_LBUTTONDOWN,MK_LBUTTON,lParam);
pWnd->PostMessage(lb_event[i].msgup,0,lParam);
pWnd->PostMessage(WM_LBUTTONDOWN,MK_LBUTTON,lParam);
pWnd->PostMessage(lb_event[i].msgup,0,lParam);
}
if(lb_event[i].vk!=-1)
{
lParam_keydown = DWORD(keyscancode<<16) + 1;
lParam_keyup = DWORD(keyscancode<<16) + 1 + 0xC0000000;
pWnd->PostMessage(WM_KEYDOWN,lb_event[i].vk,lParam_keydown);
pWnd->PostMessage(WM_KEYUP,lb_event[i].vk,lParam_keyup);
}
//快捷键等待
for(j=0;j<lb_event[i].keytime/100;j++)
{
if(LoopYield()==TRUE)
return TRUE;
Sleep(100);
}//发送鼠标事件
if(lb_event[i].msgdown==WM_LBUTTONDOWN)
{
pWnd->PostMessage(lb_event[i].msgdown,MK_LBUTTON,lParam);
pWnd->PostMessage(lb_event[i].msgup,0,lParam);
}
if(lb_event[i].msgdown==WM_LBUTTONDBLCLK)
{
pWnd->PostMessage(WM_LBUTTONDOWN,MK_LBUTTON,lParam);
pWnd->PostMessage(lb_event[i].msgup,0,lParam);
pWnd->PostMessage(WM_LBUTTONDOWN,MK_LBUTTON,lParam);
pWnd->PostMessage(lb_event[i].msgup,0,lParam);
}
This message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed. WM_KEYDOWN nVirtKey = (int) wParam; lKeyData = lParam;
Parameters
nVirtKey
Specifies the virtual-key code of the nonsystem key.
lKeyData
Specifies the repeat count, context code, previous key-state flag, and transition-state flag, as shown in the following table.
Value Description
0–15 Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user holding down the key.
29 Specifies the context code. The value is 1 if the ALT key is held down while the key is pressed; otherwise, the value is 0.
30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31 Specifies the transition state. The value is 1 if the key is being released, or it is 0 if the key is being pressed.
SendMessage(hWnd,WM_KEYDOWN,VK_Q,0x2000); //看MSDN,29位为1就OK了
29
Specifies the context code. The value is always 0 for a WM_KEYDOWN message.WM_SYSKEYDOWN也不行,他的问题是跨进程发给非活动窗口
编个程序 一运行点 OK 然后就能在后台打开的的TXT文件中实现ALT+E功能
我用 ::SendMessage(bhWnd, WM_CHAR, 'e', 0);能实现 在TXT文件中添加 e 的功能
可是无法实现 ALT+E打开菜单的功能 请注意是打开后台的打开的TXT文件
为什么不能发送组合键呢?
你要对文本编辑器的EDIT控件发,不是主窗口哦
还有SendMessage(hwnd, WM_COMMAND, (1<<16) | i, 0); 这个什么意思呀
能不能简明点呀
比如 梦幻西游
我用SPY看了 只有主窗体的
给主窗体发 ::SendMessage(bhWnd, WM_SYSCHAR, 'e', 0x20120001); 没有用呀
这个怎么实现呀
开新贴继续散分