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. QList和QVector等容器的区别

    QList和QVector等容器的区别. 1.大多数情况下可以用QList.像prepend()和insert()这种操作,通常QList比QVector快的多.这是因为QList是基于index标签 ...

  2. MAC为Apache2服务器配置多个虚拟主机

    Mac 下自带的 Apache 配置 2016年01月25日 00:25:03 阅读数:1292 参考: http://www.cnblogs.com/snandy/archive/2012/11/1 ...

  3. 异常值检验实战1--风控贷款年龄变量(附python代码)

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

  4. 反射中的 Method 的 getReadMethod 与 getWriteMethod 使用 【获取一个对象的所有属性字段名称和其对应的值】

    转: class反射(一),以及Method 的 getReadMethod 与 getWriteMethod 使用 2018年11月28日 17:27:42 zich77521 阅读数 788   ...

  5. 一百零三:CMS系统之使用sweetalert提示框优化返回结果

    在base模板中引用 在修改密码的js中使用 $(function () { $('#submit').click(function (evnet) { evnet.preventDefault(); ...

  6. [Python]最长公共子序列 VS 最长公共子串[动态规划]

    前言 由于原微软开源的基于古老的perl语言的Rouge依赖环境实在难以搭建,遂跟着Rouge论文的描述自行实现. Rouge存在N.L.S.W.SU等几大子评估指标.在复现Rouge-L的函数时,便 ...

  7. ProbCog[github]使用心得

    1. After installing ProbCog,you can run blnquery and mlnquery. If the terminal warns that 'command n ...

  8. LeetCode.1170-比较字符串中最小字符的出现频率(Compare Strings by Frequency of the Smallest Char)

    这是小川的第412次更新,第444篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第263题(顺位题号是1170).在一个非空字符串s上定义一个函数f(s),该函数计算s中最小字 ...

  9. PJzhang:CVE-2019-14287 sudo权限绕过漏洞复现

    猫宁!!! 参考链接:Ms08067实验室公众号 sudo 1.8.28版本之前有漏洞. 更新完kali linux,deepin截图工具失效,只能用自带的,不能划重点. 看一下sudo版本,1.8. ...

  10. Books Exchange (easy version)   CodeForces - 1249B2

    The only difference between easy and hard versions is constraints. There are nn kids, each of them i ...