C# 怎么后台发送组合键ctrl

love_zhao311 2012-12-09 01:19:17
网上说了好多好像都不可以、现在不发送系统按键都没有问题了!就是系统组合键这里不可以。请问怎么实现发送 Ctrl + w 呢
现在的代码如下。应该怎么改才可以?
private static int MakeKeyLparam(byte VirtualKey, bool KeyDown) {
String Firstbyte="";
//lparam参数的24-31位           
if (KeyDown == true){
Firstbyte = "00";           
}else{ 
int First = 12 * 16;
Firstbyte = First.ToString();           
}           
int Scancode=0;//获得键的扫描码           
Scancode = MapVirtualKey(VirtualKey, 0);
String Secondbyte="";//lparam参数的16-23位,即虚拟键扫描码           
String Temp="00"+Scancode.ToString();
Secondbyte=Temp.Substring(Temp.Length-2,2);
String s = Firstbyte+Secondbyte+"0001";   //0001为lparam参数的0-15位,即发送次数和其它扩展信息           
int Back=0;           
int.TryParse(s,out Back);
return Back;       
}       
/// <summary>       
/// 按键       
/// </summary>       
/// <param name=”hWnd”>按键窗口句柄</param>       
/// /// <param name=”key”>按键</param>       
public static void KeyDown(IntPtr hWnd, Keys key)
{            //MyAlert.Alert(MakeKeyLparam((byte)key, true));           
PostMessage(hWnd, WM_KEYDOWN, (IntPtr)key, (IntPtr)MakeKeyLparam((byte)key, true));
System.Threading.Thread.Sleep(100);
PostMessage(hWnd, WM_KEYUP, (IntPtr)key, (IntPtr)MakeKeyLparam((byte)key, false));       
}
...全文
826 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
happySnow_zhe 2012-12-12
  • 打赏
  • 举报
回复
引用 10 楼 love_zhao311 的回复:
引用 8 楼 happySnow_zhe 的回复:引用 7 楼 love_zhao311 的回复:引用 5 楼 happySnow_zhe 的回复:引用 4 楼 love_zhao311 的回复:引用 1 楼 happySnow_zhe 的回复:注册热键就可以了… 你好。 可以说清楚一点吗? 注册热键这东西还真不知道是什么。 我是做java的 调用user32.……
注册热键有个特点,就是只要你注册之后就是全局的,所以说不管你的窗口是否有焦点,该热键就是有效的…
我就是很懒 2012-12-11
  • 打赏
  • 举报
回复
SendKeys.Send()方法试试
蝶恋花雨 2012-12-10
  • 打赏
  • 举报
回复
为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码,这些代码列举如下: 按键 代码 SHIFT + CTRL ^ ALT % SendKeys.SendWait ( "^w" ); //发送 Ctrl + s 键 http://msdn.microsoft.com/zh-cn/library/system.windows.forms.sendkeys.send(VS.80).aspx
  • 打赏
  • 举报
回复
SendMessage(hwnd,WM_KEYDOWN,VK_CONTROL,0); SendMessage(hwnd,WM_KEYDOWN,VK_W,0); SendMessage(hwnd,WM_KEYDOWN,VK_CONTROL,1); SendMessage(hwnd,WM_KEYDOWN,VK_W,1);
happySnow_zhe 2012-12-10
  • 打赏
  • 举报
回复
注册热键就可以了…
love_zhao311 2012-12-10
  • 打赏
  • 举报
回复
引用 8 楼 happySnow_zhe 的回复:
引用 7 楼 love_zhao311 的回复:引用 5 楼 happySnow_zhe 的回复:引用 4 楼 love_zhao311 的回复:引用 1 楼 happySnow_zhe 的回复:注册热键就可以了… 你好。 可以说清楚一点吗? 注册热键这东西还真不知道是什么。 我是做java的 调用user32.dll类库下的API函数: RegisterHo……

//注册热键(窗体句柄,热键ID,辅助键,实键)
            RegisterHotKey(this.Handle, 225, 0, Keys.VolumeUp);
这个函数的意思是不是把 实键 改成 热键??

      protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0312:    //这个是window消息定义的注册的热键消息 
                    if (m.WParam.ToString().Equals("225"))  //提高音量热键 
                    {
                        MessageBox.Show("你按了VolumeUp ");
                    }
这个就是把 225 键改成了 volumeup 键? 如果我想给后台运行的某个窗口发送 ctrl+a 应该怎么写呢?
love_zhao311 2012-12-10
  • 打赏
  • 举报
回复
引用 8 楼 happySnow_zhe 的回复:
引用 7 楼 love_zhao311 的回复:引用 5 楼 happySnow_zhe 的回复:引用 4 楼 love_zhao311 的回复:引用 1 楼 happySnow_zhe 的回复:注册热键就可以了… 你好。 可以说清楚一点吗? 注册热键这东西还真不知道是什么。 我是做java的 调用user32.dll类库下的API函数: RegisterHo……
嗯。 我知道你说的了。可是我是发送到别外的窗体去。做类似后台操作按键!也可以吗
private void Form1_Load(object sender, EventArgs e)
        {
            //窗体锚定在0,0
            this.Location = new Point(-100, -100);

            this.Height = 20;
            this.Width = 20;
            this.Activate();

            //注册热键(窗体句柄,热键ID,辅助键,实键)
            RegisterHotKey(this.Handle, 225, 0, Keys.VolumeUp);
            RegisterHotKey(this.Handle, 226, 0, Keys.VolumeDown);
            RegisterHotKey(this.Handle, 227, 0, Keys.VolumeMute);
            RegisterHotKey(this.Handle, 227, 0, Keys.Control);

        }
this.Handle 改成我想发送的窗体的句柄可以不
happySnow_zhe 2012-12-10
  • 打赏
  • 举报
回复
引用 7 楼 love_zhao311 的回复:
引用 5 楼 happySnow_zhe 的回复:引用 4 楼 love_zhao311 的回复:引用 1 楼 happySnow_zhe 的回复:注册热键就可以了… 你好。 可以说清楚一点吗? 注册热键这东西还真不知道是什么。 我是做java的 调用user32.dll类库下的API函数: RegisterHotKey(IntPtr 操作窗体句柄,int 热……
那得看你什么时候需要启用热键了,如果是窗体加载完就启用,你就在load事件里调用API注册所需要的组合键即可…,窗体关闭时在卸载热键
love_zhao311 2012-12-10
  • 打赏
  • 举报
回复
引用 5 楼 happySnow_zhe 的回复:
引用 4 楼 love_zhao311 的回复:引用 1 楼 happySnow_zhe 的回复:注册热键就可以了… 你好。 可以说清楚一点吗? 注册热键这东西还真不知道是什么。 我是做java的 调用user32.dll类库下的API函数: RegisterHotKey(IntPtr 操作窗体句柄,int 热键ID(唯一性),KeyModifiers 按住组……
那怎么操作窗体句柄(后台)发送这个热键呢?
happySnow_zhe 2012-12-10
  • 打赏
  • 举报
回复
引用 5 楼 happySnow_zhe 的回复:
引用 4 楼 love_zhao311 的回复:引用 1 楼 happySnow_zhe 的回复:注册热键就可以了… 你好。 可以说清楚一点吗? 注册热键这东西还真不知道是什么。 我是做java的 调用user32.dll类库下的API函数: RegisterHotKey(IntPtr 操作窗体句柄,int 热键ID(唯一性),KeyModifiers 按住组……
然后获取按键信息:
protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0312:
                    switch (m.WParam.ToString())
                    {
                        case "热键ID":
                            //执行逻辑处理
                            break;
                        default:
                            break;
                    }
                    break;
            }
            base.WndProc(ref m);
        }
happySnow_zhe 2012-12-10
  • 打赏
  • 举报
回复
引用 4 楼 love_zhao311 的回复:
引用 1 楼 happySnow_zhe 的回复:注册热键就可以了… 你好。 可以说清楚一点吗? 注册热键这东西还真不知道是什么。 我是做java的
调用user32.dll类库下的API函数: RegisterHotKey(IntPtr 操作窗体句柄,int 热键ID(唯一性),KeyModifiers 按住组合键(ctrl,alt,shift,windows等),Keys 另一个组合键(A,B,C,D……)):注册热键 UnregisterHotKey(IntPtr 操作窗体句柄,int 卸载热键ID):卸载热键
love_zhao311 2012-12-10
  • 打赏
  • 举报
回复
引用 1 楼 happySnow_zhe 的回复:
注册热键就可以了…
你好。 可以说清楚一点吗? 注册热键这东西还真不知道是什么。 我是做java的
C#如何在后台捕捉按键 [此问题的推荐答案] API别忘了 using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk); //API public Form1() { InitializeComponent(); RegisterHotKey(this.Handle, 247696411, 0, (UInt32)Keys.F10); //注册热键 } //重写消息循环 protected override void WndProc(ref Message m) { const int WM_HOTKEY = 0x0312; // m.WParam.ToInt32() 要和 注册热键时的第2个参数一样 if (m.Msg == WM_HOTKEY && m.WParam.ToInt32() == 247696411) //判断热键 { //写上你的代码 } base.WndProc(ref m); } 写上代码后 只要 在程序运行时按F10就可以触发热键更改按键可以在 注册时改 RegisterHotKey(this.Handle, 247696411, 0, (UInt32)Keys.***); http://baike.baidu.com/view/1080084.html?tp=0_10 这里有RegisterHotKey 的介绍 RegisterHotKey 函数功能:该函数定义一个系统范围的热键。 函数原型:BOOL RegisterHotKey(HWND hWnd,intid,UINT fsModifiers,UINT vk); 参数: hWnd:接收热键产生WM_HOTKEY消息的窗口句柄。若该参数NULL,传递给调用线程的WM_HOTKEY消息必须在消息循环中中进行处理。 id:定义热键的标识符。调用线程中的其他热键不能使用同样的标识符。应用功能程序必须定义一个0X0000-0xBFFF范围的值。一个共享的动态链接库(DLL)必须定义一个0xC000-0xFFFF范围的值伯GlobalAddAtom函数返回该范围)。为了避免与其他动态链接库定义的热键冲突,一个DLL必须使用GlobalAddAtom函数获得热键的标识符。 fsModifoers:定义为了产生WM_HOTKEY消息而必须与由nVirtKey参数定义的键一起按下的键。该参数可以是如下值的组合: MOD_ALT:按下的可以是任一Alt键。MOD_CONTROL:按下的可以是任一Ctrl键。 MOD_SHIFT:按下的可以是任一Shift键。 MOD_WIN:按下的可以是任一Windows按键。这些键可以用Microsoft Windows日志记录下来。 vk:定义热键的虚拟键码。 返回值:若函数调用成功,返回一个非O值。若函数调用失败,则返回值为0。若要获得更多的错误信息,可以调用GetLastError函数。 本贴来自ZDNetChina中文社区 http://bbs.zdnet.com.cn ,本贴地址:http://bbs.zdnet.com.cn/viewthread.php?tid=93775 RegisterHotKey   函数功能:该函数定义一个系统范围的热键。   函数原型:BOOL RegisterHotKey(HWND hWnd,intid,UINT fsModifiers,UINT vk);   参数:   hWnd:接收热键产生WM_HOTKEY消息的窗口句柄。若该参数NULL,传递给调用线程的WM_HOTKEY消息必须在消息循环中中进行处理。   id:定义热键的标识符。调用线程中的其他热键不能使用同样的标识符。应用功能程序必须定义一个0X0000-0xBFFF范围的值。一个共享的动态链接库(DLL)必须定义一个0xC000-0xFFFF范围的值伯GlobalAddAtom函数返回该范围)。为了避免与其他动态链接库定义的热键冲突,一个DLL必须使用GlobalAddAtom函数获得热键的标识符。   fsModifoers:定义为了产生WM_HOTKEY消息而必须与由nVirtKey参数定义的键一起按下的键。该参数可以是如下值的组合:   MOD_ALT:按下的可以是任一Alt键。MOD_CONTROL:按下的可以是任一Ctrl键。   MOD_SHIFT:按下的可以是任一Shift键。   MOD_WIN:按下的可以是任一Windows按键。这些键可以用Microsoft Windows日志记录下来。   vk:定义热键的虚拟键码。   返回值:若函数调用成功,返回一个非O值。若函数调用失败,则返回值为0。若要获得更多的错误信息,可以调用GetLastError函数。   备注:当某键被接下时,系统在所有的热键中寻找匹配者。一旦找到一个匹配的热键,系统将把WM_HOTKEY消息传递给登记了该热键的线程的消息队列。该消息被传送到队列头部,因此它将在下一轮消息循环中被移去。该函数不能将热键同其他线程创建的窗口关联起来。   若为一热键定义的击键己被其他热键所定义,则RegisterHotKey函数调用失败。   若hWnd参数标识的窗口已用与id参数定义的相同的标识符登记了一个热键,则参数fsModifiers和vk的新值将替代这些参数先前定义的值。   Windows CE:Windows CE 2.0以上版本对于参数fsModifiers支持一个附加的标志位。叫做MOD_KEYUP。   若设置MOD_KEYUP位,则当发生键被按下或被弹起的事件时,窗口将发送WM_HOTKEY消息。   RegisterHotKey可以被用来在线程之间登记热键。   速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib
辅助软件 aspx/asp代码生成器 语言规范 C# Language Specification 1.2(C#语言规范1.2).doc C# Language Specification 2.0(C#语言规范2.0).doc 源码教程 ASP.NET编程技术与交互式网页设计 asp.net亲密接触_带源码 C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_运算符重载.htm.txt 10_阴影和深度复制.htm.txt 11_事件基础.htm.txt 12_事件进阶.htm.txt 13_读写Txt文件.htm.txt 14_StatusBar控件.htm.txt 15_自定义控件.htm.txt 16_使用打开保存文件对话框.htm.txt 17_图形绘制基础.htm.txt 18_图形绘制进阶-线条、字体.htm.txt 19_图形绘制进阶-图像(双倍缓冲).htm.txt 20_Windows应用程序安装部署概念.htm.txt 21_使用文件基础.htm.txt 22_使用文件高级.htm.txt 23_串行化和并行化.htm.txt 技术资料 ACCESS数据库操作类.txt ASP.NET常用代码.txt asp.net常用函数表.txt Asp.net的身份验证.txt ASP导出Excel数据的四种方法.txt C#调用存储过程.txt CheckBox控件.txt datagrid排序_选择_分页.txt DataSet对象.txt DotNET WinForm FAQ 16个.txt excel打印.txt EXCEL导出.txt EXCEL中合并单元格.txt mail.txt NET在RichTextBox控件加入图片(类似QQ).txt send.txt SQL储存过程等的解密.txt VisualC#打造“浏览器”.txt vs2005常用快捷键.txt webcontrol和pagelet.txt win2003中配置msdtc.txt word导出.txt 保证应用程序只有一个实例运行.txt 编辑字段中的word文件.txt 编码标准.txt 播放声音.txt 捕捉DataGrid的双击事件(C#版本).txt 不显示窗口后台运行程序.txt 储存过程.txt 处理“进程性能计数器被禁用”的错误.txt 串口操作.txt 打开word文件.txt 打造“浏览器”.txt 带图标和自定义颜色的ListBox.txt 得到当前数据库中所有用户表信息.txt 读取、设置系统时间日期.txt 读写注册表.txt 对过程进行加密.txt 二进制数据保存.txt 二进制数据字段的更新.txt 分页及动态创建列的控件 .txt 改变Windows服务的启动顺序.txt 各进制之间的转换.txt 给图片添加版权信息.txt 关于拖放操作.txt 关于在WinForm里用HttpWebRequest获得某个页面,并填写页面的textbox及点击button的方法.txt 画带阴影效果的文字.txt 环境信息.txt 获得光标在多行textbox中的行与列的函数.txt 计算控件中文字所占的宽度.txt 加半透明图片水印.txt 将控件放到datagrid中以及修改列宽.txt 截取系统消息.txt 解决VS.NET使用中属性框不显示的问题.txt 里的InputBox.txt 模拟鼠标和键盘操作.txt 取CPU的序列号.txt 如何:在VisualC#.NET中建立一个平滑的进度条.txt 如何得到网卡号.txt 如何调用WindowsAPI的要点.txt 如何控制输入法.txt 如何利用GDI作图解决异或问题.txt 如何取硬件标志.txt 如何让应用程序只有一个实例运行.txt 如何如何插入照片到Excel.txt 如何识别键盘左右的shift,Ctrl或Alt键.txt 如何水晶按钮的程序生成.txt 如何为DataGrid添加下拉列表框.txt 如何用C#在Excel中生成图表?.txt 如何用程序实现键盘和鼠标的模拟?.txt 如何与资源管理器互动剪切、拷贝、粘贴文件.txt 深入理解C#编程中的组件-事件-委托.txt 生成透明的GIF图片 .txt 生成压缩图片时的2种方法.txt 使用C#返回系统特殊路径.txt 使用VisualC#.NET检查Windows版本.txt 使用Win32和其他库.txt 使用自己画的光标.txt 数据绑定.txt 水晶报表使用winform.txt 水印.txt 特殊文件夹路径.txt 同一解决方案中一个项目的xml注释在另一个项目中不能智能提示显示这些注释的解决方法.txt 图像读取.txt 无标题窗口的拖放.txt 下面的5行代码完成了从局域网中找出所有的机器.txt 显示DataGrid序号的一个适用的方法.txt 用C#快速往Excel写数据.txt 用C#来捕获屏幕.txt 用C#做ScreenSaver.txt 用imgscan.ocx来扫描图像.txt 用word填充表格.txt 用户登录组合控件.txt 在.NET中得到计算机硬件信息的一些功能.txt 在MapX中响应滚轮放大缩小地图.txt 在两个ASP.NET页面之间传递值.txt 在如何利用SharpZipLib进行文件的压缩和解压缩.txt 怎样打开关闭CDROM.txt 怎样检测网络中的电脑是否有安装SQL2000.txt 怎样写一个存储过程类来实现如何对存储过程的调用?.txt 直接拉入图片文件到程序窗口中打开.txt 指定Web服务器运行的不是ASP.NET1.1版.txt 字符串加密.txt 字幕显示屏幕保护.txt 自己动手用c#写控件.txt C#试题 简答题.txt 填空题.txt 问答题1.txt 问答题2.txt 选择题.txt 综合题.txt

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧