日期:2014-05-18  浏览次数:21567 次

C#向后台(非激活窗体)发送组合键按键消息(shift+tab),在按键的时候不能影响其它窗体。
SendKeys 是不是行的。影响其它窗体
keybd_event 也是不行的。影响其它窗体
SendMessage/PostMessage 在不影响其它程序的时候可以发送字符,但又没有找到模拟组合键的方法

网上找了很资料都没有解决。。。

也行键盘钩子可以解决,但是感觉那个有点复杂,我不会。。。 麻烦帮下忙,解决后马上结贴。。。

下面这种方法也不行:
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, uint wParam, uint lParam);
 
SendMessage(hwnd, 0x0104, 0x00000012, 0x20380001);//(0x00000012 == VK_MENU(ALT键))
SendMessage(hwnd, 0x0104, 0x00000046, 0x20210001);//这一行可以省略(0x00000046 == 'F')
SendMessage(hwnd, 0x0106, 0x00000066, 0x20210001);//发送一个char 'f'
SendMessage(hwnd, 0x0105, 0x00000046, 0xE0210001);//这一行可以省略(0x00000046 == 'F')
SendMessage(hwnd, 0x0105, 0x00000012, 0xC0380001);//(0x00000012 == VK_MENU(ALT键))


------解决方案--------------------
你贴的代码应该是对的,你的不行是怎么不行
------解决方案--------------------
WM_KEYDOWN
WM_KEYUP
------解决方案--------------------
只能使用SendMessage/PostMessage 
这个要深入理解windows的消息循环
Windows能够为所有的应用程序维护一个消息队列。应用程序必须从消息队列中获取消息,然后分派给某个窗口,
应用程序从消息队列中检索消息,再把它分派给适当的窗口,然后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。

其他的模拟键盘操作都不行,模拟键盘只会向当前获取焦点的窗体传递消息