首页 新闻 会员 周边

c# Windows Service 程序如何模拟按键消息

0
悬赏园豆:20 [待解决问题]

如题意,我打算写一个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);
        }
NineDev的主页 NineDev | 初学一级 | 园豆:182
提问于:2014-02-20 11:56
< >
分享
所有回答(3)
0

不明白你为什么要用模拟按键,当捕获到请求的时候,调用方法处理,即便是按键,也是调用方法处理,那么这里模拟按键有什么意义

cenlo | 园豆:583 (小虾三级) | 2014-02-20 11:59

感谢你的回答,比如我想要控制ppt的演示的什么的话,就可以用模拟按键来操作了,既然你说可以调用方法出来,那请问有什么好的方法呢,我不是很懂。

支持(0) 反对(0) NineDev | 园豆:182 (初学一级) | 2014-02-20 12:08

@NineDev: 比如说,现在有按键的代码:

public void Buttion1()

{

//处理

}

public void Buttion2()

{

//处理

}

你用模拟按键需要这样:

if(button1)

{Button1()}

else if(button2

{

Button2();

}

关键就在这里,如果你程序里有判断,那么这里就可以直接在判断调用相应的方法,如果没有,你就添一个判断。

支持(0) 反对(0) cenlo | 园豆:583 (小虾三级) | 2014-02-20 12:36
0

方案1:模拟windows按键消息,参看:

http://www.2cto.com/kf/201008/59370.html

http://hi.baidu.com/leilei19922/item/c8d246f9f3e18a7d3c198b7c

方案2:软件“按键精灵”里面有模拟按键的库,可考虑提取

方案3:某些可用的模拟按键插件

hailants | 园豆:750 (小虾三级) | 2014-02-20 12:56

感谢,不过我的那个模拟按键的代码能在win form程式中运行,但是写出windows 服务就不行了,不知道是哪里出现了问题

支持(0) 反对(0) NineDev | 园豆:182 (初学一级) | 2014-02-20 16:22

@NineDev: 怀疑是否因服务默认是sys用户,你试试把服务用户改成administrator试试

支持(0) 反对(0) hailants | 园豆:750 (小虾三级) | 2014-03-10 10:46
0

直接用winapi广播按键消息可以的吧?

吴瑞祥 | 园豆:29449 (高人七级) | 2014-02-20 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册