先给题主解释一下为什么 keybd_event 会失效。
这种东西很容易就被屏蔽掉,游戏开发商稍微用点儿心的话都会封杀这泓虚拟按键,keybd_event 的本质是传递一个与OEM相关的硬件扫描码给系统,系统再将扫描码转换成虚拟键码,并模拟按键信号。关键就在【虚拟键码】上,它只是向操作系统发送了按键码而已,实际上硬件上并没有这个信号。所以游戏程序只需要判断这个按键码信号是否来自于硬件就可以了,被屏蔽也是很简单的事情。这种情况下应该用 WINIO 之类的调用硬件驱动的方式的模拟按键。
讲到这里,题主就该明白了, keybd_event 都失效了,那么 PostMessage 这种更高级(注意:高级不是说它强大了,而是就系统层面上来讲,越低级才越接近内核)的 API 肯定也是被游戏屏蔽的,所以题主不要想着用这个 API 来模拟按键了,要换用调用驱动的方式才行。
接下来再讲怎么调用这个 API。
从题主的代码上看这个 API 已经被其他人封装在一个现成的函数 PostKey() 里了,所以使用时只需要 PostKey(wHandle, KeyCode) 就可以了,其中 wHandle 是目标程序的句柄,这个可以用 FindWindow 来找到,KeyCode 是按键的 ASCII 码,这个网上有很多,直接找就可以了。