using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading; namespace AutoSendMessages
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} #region AIP //如果函数执行成功,返回值不为0。
//如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要定义热键的窗口的句柄
int id, //定义热键ID(不能与其它ID重复)
KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
Keys vk //定义热键的内容
); [DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //要取消热键的窗口的句柄
int id //要取消热键的ID
); //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
[Flags()]
public enum KeyModifiers
{
None = ,
Alt = ,
Ctrl = ,
Shift = ,
WindowsKey =
} //获取鼠标当前位置
[DllImport("user32.dll")]
private static extern bool GetCursorPos(out Point p); //设置鼠标位置
[DllImport("User32")]
public extern static void SetCursorPos(int x, int y); //模拟鼠标
[DllImport("User32")]
public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo); public enum MouseEventFlags
{
Move = 0x0001, //移动鼠标
LeftDown = 0x0002,//模拟鼠标左键按下
LeftUp = 0x0004,//模拟鼠标左键抬起
RightDown = 0x0008,//鼠标右键按下
RightUp = 0x0010,//鼠标右键抬起
MiddleDown = 0x0020,//鼠标中键按下
MiddleUp = 0x0040,//中键抬起
Wheel = 0x0800,
Absolute = 0x8000//标示是否采用绝对坐标
} #endregion private void Form1_Load(object sender, EventArgs e)
{
RegisterHotKey(Handle, , KeyModifiers.None, Keys.F7);//F7 锁定消息框位置
RegisterHotKey(Handle, , KeyModifiers.None, Keys.F8);//F8 开始 / 暂停
RegisterHotKey(Handle, , KeyModifiers.None, Keys.F9);//F9 隐藏 / 显示 } private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
if (MessageBox.Show("你是否要退出?","退出提示",MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
{
e.Cancel = false;
}
} private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
UnregisterHotKey(Handle, );
UnregisterHotKey(Handle, );
UnregisterHotKey(Handle, );
} protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
//按快捷键
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case : // F7 锁定位置
FindPoint();
break;
case : //F8 开始 / 暂停
MakeStart();
break;
case : //F9 隐藏 / 显示
MakeShow();
break;
}
break;
}
base.WndProc(ref m);
} Point CP = new Point(); //寻找位置
private void FindPoint()
{
GetCursorPos(out CP);
label5.Text = "(" + CP.X + " , "+ CP.Y + ")";
}
//开始/暂停
private void MakeStart()
{
int t_interval = ;
int.TryParse(textBox2.Text.ToString(), out t_interval);
if (t_interval < )
{
t_interval = ;
}
timer1.Interval = t_interval;
timer1.Enabled = !timer1.Enabled;
}
//隐藏/显示
private void MakeShow()
{
this.Visible = !this.Visible;
} int indexs = ;
private void timer1_Tick(object sender, EventArgs e)
{
indexs++;
SendMessage();
}
//发送消息
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
public const int WM_KEYDOWN = ;
public const int WM_KEYUP = ; private void SendMessage()
{
if (textBox1.Text.ToString() != "")
{
MoveMouse();
DoubleMouse();
//Thread.Sleep(100); keybd_event(Keys.ControlKey, , , );
keybd_event(Keys.A, , , );
keybd_event(Keys.A, , 0x2, );
keybd_event(Keys.ControlKey, , 0x2, ); Thread.Sleep(); SendKeys.SendWait(textBox1.Text.ToString());
SendKeys.SendWait("{ENTER}");
}
}
//移动鼠标
private void MoveMouse()
{
SetCursorPos(CP.X, CP.Y);
}
//双击鼠标
private void DoubleMouse()
{
mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), , , , IntPtr.Zero);
mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), , , , IntPtr.Zero); //mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
//mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
}
}
}

C# 定义热键的更多相关文章

  1. delphi程序中定义热键

    delphi程序中定义热键   用到3个API函数          BOOL RegisterHotKey        (        HWND hWnd,        //响应该热键的窗口句 ...

  2. C# 注册 Windows 热键

    闲扯: 前几日,一个朋友问我如何实现按 F1 键实现粘贴(Ctrl+V)功能,百度了一个方法,发给他,他看不懂(已经是 Boss 的曾经的码农),我就做了个Demo给他参考.今日得空,将 Demo 整 ...

  3. wpf程序热键的一个类

    using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...

  4. C#实现全局快捷键(系统热键)响应(转)

    转自http://www.cnblogs.com/Randy0528/archive/2013/02/04/2892062.html 在应用中,我们可能会需要实现像Ctrl+C复制.Ctrl+V粘贴这 ...

  5. 用RegisterHotKey注册系统热键

    函数功能:该函数定义一个系统范围的热键. 函数原型:BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk): 参数: hWnd:接 ...

  6. VC添加全局热键的方法

    VC添加全局热键的方法 这个方法靠谱 http://blog.csdn.net/lujianfeiccie2009/article/details/7498704 VC添加全局热键的方法 标签: bu ...

  7. Java设置全局热键——第三方包jintellitype实现

    Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C/C++的javaer来说,有点困难.不过幸好,国外有人已经实 ...

  8. Windows热键注册的底层原理

    要像系统注册一个全局热键,需要用到RegisterHotKey,函数用法如下(MSDN):BOOL RegisterHotKey(                                    ...

  9. c#为程序添加全局热键的方法

    在程序失去焦点或者在后台运行时,可以通过使用全局热键的方式,进行一些快捷的操作,如QQ默认操作中ctrl+alt+A调出截图功能. 在Windows中实现热键功能需要使用win32的Api函数Regi ...

随机推荐

  1. oracle口令文件在windows和linux系统下的命名和位置

      分类: Oracle 1.windows系统下 oracle口令文件在:$ORACLE_HOME/database目录下: 命名规则为:PWD$SID.ora   2.linux系统下 oracl ...

  2. FFmpeg之Linux下编译与调试

    注:下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行 1. 安装linux的基础环境 基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语 ...

  3. 前端知识点回顾——Javascript篇(四)

    Symbol 为什么需要symbol ES5里面对象的属性名都是字符串,如果你需要使用一个别人提供的对象,你对这个对象有哪些属性也不是很清楚,但又想为这个对象新增一些属性,那么你新增的属性名就很可能和 ...

  4. leetcode25 K 个一组翻转链表

    这道题关于链表的操作,中间指针操作略复杂. /** * Definition for singly-linked list. * struct ListNode { * int val; * List ...

  5. idea git操作 -- 已有项目添加到git

    我们在使用git时,如果是先从git克隆项目,然后配置项目运行没问题,如果将已有项目添加到git,则项目环境还是提交不了git,还需要到克隆的仓库文件夹打开项目去操作git,如果有有类型情况可按照如下 ...

  6. AnimationUtil

    import android.view.View; import android.view.animation.AlphaAnimation; public class AnimationUtil { ...

  7. DML语句

    DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查询(select),是开发人员日常使用最频繁的操作. 插入记录 表创建好后, ...

  8. Hadoop HDFS命令学习笔记

    cat Usage: hadoop fs -cat [-ignoreCrc] URI [URI ...] Copies source paths to stdout. Options The -ign ...

  9. Redis Guide

    1. Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序集合,位图,hyperloglogs等数 ...

  10. Shell中test比较

    数字比较 比较 描述 -eq 检查是否相等 -ge 检查是否大于或等于 -gt 检查是否大于 -le 检查是否小于或者等于 -lt 检查是否小于 -ne 检查是否不等于 字符串比较 = 检查字符串1和 ...