| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1036 人关注过本帖
标题:如何获取整个屏幕的KeyPress事件
只看楼主 加入收藏
one_june
Rank: 4
等 级:业余侠客
帖 子:139
专家分:212
注 册:2010-3-14
结帖率:86.96%
收藏
已结贴  问题点数:30 回复次数:4 
如何获取整个屏幕的KeyPress事件

我建了一个Winform程序,现在想在整个屏幕的任意位置按下键盘的的a键,弹出消息框(不只是在这个Form上),可是只能定义Form的KeyPress事件,鼠标出了Form
就没用了...不知道该怎么办,麻烦各位了帮帮忙...
搜索更多相关主题的帖子: KeyPress 屏幕 获取 
2010-07-28 20:34
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:30 
系统钩子

★★★★★为人民服务★★★★★
2010-07-28 21:36
小菰
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-7-27
收藏
得分:0 
键盘记录器就是这原理,C#应该怎么做还不是很清楚,有待高人解决…
2010-07-29 00:58
one_june
Rank: 4
等 级:业余侠客
帖 子:139
专家分:212
注 册:2010-3-14
收藏
得分:0 
回复 2楼 cnfarer
好几个人都说用钩子函数 可惜我还是个新手 还是慢慢来吧!!!
2010-07-30 23:25
xydddaxia
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:33
帖 子:466
专家分:2307
注 册:2009-3-20
收藏
得分:0 
程序代码:
 public Form1()
        {
            InitializeComponent();
            RegisterHotKey(Handle, 100, 2, Keys.Up); // 热键一:Control +光标上箭头
            RegisterHotKey(Handle, 200, 2, Keys.Down); // 热键一:Control +光标下箭头
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct SHFILEINFO
        {
            public IntPtr hIcon;
            public int iIcon;
            public int dwAttributes;
            public string szDisplayName;
            public string szTypeName;
        }
        public enum KeyModifiers
        {
            None = 0,
            Alt = 1,
            Control = 2,
            Shift = 4,
            Windows = 8
        }
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk);
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
        private void ProcessHotkey(Message m)//触发热键
        {
            try
            {
                IntPtr id = m.WParam;
                string sid = id.ToString();
                switch (sid)
                {
                    case "100":
                        playup();
                        break;
                    case "200":
                        playnext();
                        break;
                }
            }
            catch (Exception W)
            {
                this.label_Error.Text = "错误47:  " + W.Message;
            }
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)//卸载热键
        {
            try
            {
                UnregisterHotKey(Handle, 100); //卸载第1个快捷键
                UnregisterHotKey(Handle, 200); //缷载第2个快捷键
}

站在春哥的肩膀上
2010-08-02 08:37
快速回复:如何获取整个屏幕的KeyPress事件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029385 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved