如题意,我打算写一个Windows Service的程序,程序里面有模拟按键的功能,即某个请求来的时候时候,响应相关的按键,我用的User32.dll 里面的函数,但是不行,请问我哪里错,代码如下
[DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo); [DllImport("user32.dll")] static extern byte MapVirtualKey(byte wCode, int wMap); ///模拟键盘 public static void AnalogKey(byte KeyCode) { ///VK_F5 = 116 ///VK_SHIFT = 16 ///VK_ESCAPE = 27 ///VK_LEFT = 37 ///VK_UP = 38 ///VK_RIGHT = 39 ///VK_DOWN = 40 keybd_event(KeyCode, MapVirtualKey(KeyCode, 0), 0, 0); ///keybd_event(18, MapVirtualKey(18, 0), 0, 0); //按下CTRL鍵。 ///keybd_event(18, MapVirtualKey(18, 0), 0x2, 0);//放開CTRL鍵。 } ///释放按键 public static void ReleaseKey(byte KeyCode) { keybd_event(KeyCode, MapVirtualKey(KeyCode, 0), 0x2, 0); }
不明白你为什么要用模拟按键,当捕获到请求的时候,调用方法处理,即便是按键,也是调用方法处理,那么这里模拟按键有什么意义
感谢你的回答,比如我想要控制ppt的演示的什么的话,就可以用模拟按键来操作了,既然你说可以调用方法出来,那请问有什么好的方法呢,我不是很懂。
@NineDev: 比如说,现在有按键的代码:
public void Buttion1()
{
//处理
}
public void Buttion2()
{
//处理
}
你用模拟按键需要这样:
if(button1)
{Button1()}
else if(button2
{
Button2();
}
关键就在这里,如果你程序里有判断,那么这里就可以直接在判断调用相应的方法,如果没有,你就添一个判断。
方案1:模拟windows按键消息,参看:
http://www.2cto.com/kf/201008/59370.html
http://hi.baidu.com/leilei19922/item/c8d246f9f3e18a7d3c198b7c
方案2:软件“按键精灵”里面有模拟按键的库,可考虑提取
方案3:某些可用的模拟按键插件
感谢,不过我的那个模拟按键的代码能在win form程式中运行,但是写出windows 服务就不行了,不知道是哪里出现了问题
@NineDev: 怀疑是否因服务默认是sys用户,你试试把服务用户改成administrator试试
直接用winapi广播按键消息可以的吧?