VC中怎么向后台运行的程序发送组合键,比如Ctrl+Alt+S?(这个后台程序的指针,句柄都能正确得到)

来源:百度知道 编辑:UC知道 时间:2024/05/16 18:27:57
不要用key_event那个不能各后台程序发送数据。
要是能用PostMessage,或者SendMessage解决就更好了。希望高手不吝赐教
http://blogs.msdn.com/oldnewthing/archive/2005/05/30/423202.aspx
我查过了,这个PostMessage,SendMessage是不能实现的。大家不用讨论了,上面是MSDN英文版块上的讨论。为了个这耗费三天。。。
如果谁有更好的办法,能向后台发送,但是不影响处在焦点的程序,悬赏可以追加!!!!!!!!!!!

你发送的组合键也不过是希望程序相应并调用相应的函数?

那就直接点,找到后台程序期望的调用入口函数,然后用钩子强制执行

PostMessage(WM_SYSKEYDOWN,VK_CONTROL);//按下CONTROL
PostMessage(WM_SYSKEYDOWN,VK_MENU);//按下ALT
PostMessage(WM_KEYDOWN,'S');//按下S
PostMessage(WM_KEYUP,'S');//放开S
PostMessage(WM_SYSKEYUP,VK_MENU);//放开ALT
PostMessage(WM_SYSKEYUP,VK_CONTROL);//放开CONTROL

PostMessage函数其他参数自己写
不要用SendMessage,这个函数要等返回的!

有点难。
SetKeyboardState 的话可以设置当前线程的输入状态。不能用
你使用 SendInput 试试。

以下是我的解决方法,经测试有效!
先说一下基本思路:
假设后台运行了一个程序名为"Test_2.exe"的文件
先根据文件名获得此程序的进程ID,然后得到拥有其消息队列的线程ID,然后使用PostThreadMessage向该线程发送你的消息
-----------------------------------------------------
需要的头文件:
#include <windows.h>
#include <TLHELP32.H>
-----------------------------------------------------
获得线程ID的方法:
DWORD GetThreadIDFromName(char* name)
{
HANDLE snapshot;
PROCESSENTRY32 processinfo;