急 给指定的程序或当前激活的程序发送键盘消息和鼠标消息,该如何解决

急!急!急! 给指定的程序或当前激活的程序发送键盘消息和鼠标消息
我想做的程序是,1.给指定的程序发送键盘消息和鼠标左键点击消息, 2.给windows桌面上任意激活的程序发送键盘消息和鼠标左键点击消息,这个用一个checkbox控件让用户选择。
而且一定不能用keybd_event和mouse_event!!!!

我现在遇到的问题时用sendmessage和PostMessage没有反应,不是道是不是我获取句柄的问题还是别的地方不对,还有一个就是我刚开始在用mouse_event测试时(我先定位好了坐标,是桌面整屏幕定位的,用时钟事件定时模拟鼠标点击),我先模拟鼠标在windows桌面上点击一下,然后再向指定的程序界面模拟点击按钮(指定程序界面有个按钮,我实在整个桌面屏幕定位时把坐标定位在了制定程序的那个按钮上了),但无效,鼠标还是点击在前面我模拟点击桌面的那个位置,然后我手动点击了下我的程序界面后才能模拟鼠标点击到指定的程序界面,但却不是点击在按钮上,是点击在按钮旁边的位置。

请大虾们帮帮忙,小弟很着急。因csdn系统不允许发表超过100分的帖子k,分不够,我会开贴再加。


------解决方案--------------------
楼主上代码吧,光说,不好判断啊。
最好是代码和详细的陈述结合,大家才能群策群力啊。
------解决方案--------------------
SendInput
------解决方案--------------------
//添加发送代码
::PostMessage(param_hwnd,WM_KEYDOWN,VK_SPACE,32);//这是按下VK_SPACE的消息
::PostMessage(param_hwnd,WM_KEYUP,VK_SPACE,32);//这是抬起VK_SPACE的消息,注意,此处一定要有抬起的操作

改为
 DWORD dwVKFkeyData;
 WORD dwScanCode =MapVirtualKey(VK_SPACE,0);//VK_SPACE

 dwVKFkeyData = 1;
 dwVKFkeyData |= dwScanCode<<16;
 dwVKFkeyData |= 0<<24;
 dwVKFkeyData |= 1<<29;
 //按下
 ::PostMessage(param_hwnd,WM_KEYDOWN,VK_SPACE,dwVKFkeyData);

 //弹起
 dwVKFkeyData |= 3 << 30;
 ::PostMessage(param_hwnd,WM_KEYUP,VK_SPACE,dwVKFkeyData);
------解决方案--------------------
先用spy++看看往哪个目标发送了什么东西,再在PostMessage中填入相应的参数就可以了
------解决方案--------------------
你要做什么
这种需求一般都不是什么正常程序的需求
------解决方案--------------------
针对目标程序你可以用spy++看看你关心的操作都触发了那些消息
然后再用PostMessage发过去
你说的一些消息可能单纯的通过键盘消息的方式还不能解决问题
有些是系统消息
有些是加速键消息
------解决方案--------------------
探讨

我用spy++看到指定的程序有好几个句柄,我怎么去判定是发给那个窗口句柄呢,比如酷狗或者迅雷看看播放器,他们又有好几个窗口句柄,帮帮忙,快过年了,小弟不想挨骂啊。

------解决方案--------------------
我看了一下迅雷看看
主窗口就是一个啊
主窗口是XLUEFrameHostWnd
下面有两个子窗口
当然看看应该是directui的
所以子窗口应该比较少
这对你的需求应该是好事啊
这样你需要分析的目标窗口就少了
你做这个需求本身就很麻烦
没什么捷径可寻
祝你好运吧
------解决方案--------------------
用 Spy 看看你的目标程序是怎样响应按键的。
是什么窗口响应按键的。

然后,尝试获取这个窗口,发送按键。
注意 WM_KEYXX 的参数。