玩网页游戏挂机,又不想让别人看见你电脑的运行。所以写了个后台运行的程序。

先谁HotKey注册类,用来调用com组件来显示与隐藏窗体:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace ntsvs
{
static class Hotkey
{
//系统api#region 系统api
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool RegisterHotKey(IntPtr hWnd, int id, HotkeyModifiers fsModifiers,Keys vk); [DllImport("user32.dll")]
static extern bool UnregisterHotKey(IntPtr hWnd, int id); /**//// <summary>
/// 注册快捷键
/// </summary>
/// <param name="hWnd">持有快捷键窗口的句柄</param>
/// <param name="fsModifiers">组合键</param>
/// <param name="vk">快捷键的虚拟键码</param>
/// <param name="callBack">回调函数</param>
public static void Regist(IntPtr hWnd, HotkeyModifiers fsModifiers, Keys vk, HotKeyCallBackHanlder callBack)
{
int id = keyid++;
if (!RegisterHotKey(hWnd, id, fsModifiers, vk))
throw new Exception("regist hotkey fail.");
keymap[id] = callBack;
} /**//// <summary>
/// 注销快捷键
/// </summary>
/// <param name="hWnd">持有快捷键窗口的句柄</param>
/// <param name="callBack">回调函数</param>
public static void UnRegist(IntPtr hWnd, HotKeyCallBackHanlder callBack)
{
foreach (KeyValuePair<int, HotKeyCallBackHanlder> var in keymap)
{
if (var.Value == callBack)
UnregisterHotKey(hWnd, var.Key);
}
} /**//// <summary>
/// 快捷键消息处理
/// </summary>
public static void ProcessHotKey(System.Windows.Forms.Message m)
{
if (m.Msg == WM_HOTKEY)
{
int id = m.WParam.ToInt32();
HotKeyCallBackHanlder callback;
if (keymap.TryGetValue(id, out callback))
{
callback();
}
}
} const int WM_HOTKEY = 0x312;
static int keyid = 10;
static Dictionary<int, HotKeyCallBackHanlder> keymap = new Dictionary<int, HotKeyCallBackHanlder>(); public delegate void HotKeyCallBackHanlder();
} enum HotkeyModifiers
{
MOD_ALT = 0x1,
MOD_CONTROL = 0x2,
MOD_SHIFT = 0x4,
MOD_WIN = 0x8
} }

然后是主窗体formMain formmain里添加了一个webBrowiser控件,一个textbox控件,一个button控件。在webBrowiser里可以登录到页游的网址,按快捷键就可以隐藏网页了。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices; namespace ntsvs
{
public partial class Form1 : Form
{
bool isVisible = false;
public Form1()
{
InitializeComponent();
//注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
Hotkey.Regist(this.Handle, HotkeyModifiers.MOD_ALT, Keys.P, Test3);//最大化窗口
Hotkey.Regist(this.Handle, HotkeyModifiers.MOD_ALT, Keys.B, Test2);//最小化
Hotkey.Regist(this.Handle, HotkeyModifiers.MOD_ALT, Keys.L, Test1);//还原
Hotkey.Regist(this.Handle, HotkeyModifiers.MOD_ALT, Keys.A, Test0);//隐藏
Test0();
} //0-隐藏窗口
void Test0()
{
this.Activate();
Class1.ShowWindowAsync(this.Handle, 0);
}
//1-还原窗口
void Test1()
{
this.Activate();
Class1.ShowWindowAsync(this.Handle, 1);
}
//2-最小化窗口,
void Test2()
{
this.Activate();
Class1.ShowWindowAsync(this.Handle, 2);
}
//3-最大化窗口,
void Test3()
{
this.Activate();
Class1.ShowWindowAsync(this.Handle, 3);
} private void Form1_Shown(object sender, EventArgs e)
{
this.Visible = isVisible;
} ///
/// 监视Windows消息
/// 重载WndProc方法,用于实现热键响应
///
///
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
Hotkey.ProcessHotKey(m);
} private void button1_Click(object sender, EventArgs e)
{
try
{
this.webBrowser1.Url = new Uri(textBox1.Text);
this.webBrowser1.Update();
}
catch { }
} private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
Hotkey.UnRegist(this.Handle, Test3);
Hotkey.UnRegist(this.Handle, Test2);
Hotkey.UnRegist(this.Handle, Test1);
Hotkey.UnRegist(this.Handle, Test0);
webBrowser1.Stop();
webBrowser1.Dispose();
Environment.Exit(0);
}
catch { }
}
}
}

感谢每一位阅读此篇文章的人,希望可以帮到你。

c#写的热键注册程序的更多相关文章

  1. 使用WinAPI全局热键注册和全局模拟按键

    一.全局热键注册 1.先引用DLL [System.Runtime.InteropServices.DllImport("user32.dll")] //导入WinAPI publ ...

  2. Window 注册程序关联后缀文件,双击运行

    一般来说,很多软件都会有自定义后缀的文件,比如.cpp..doc等,那么如果我们想把这些后缀与我们的软件关联起来,如何做呢 #pragma once #include "StdAfx.h&q ...

  3. 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度。 2)输出字符串中第一个出现字母a的位置。 3)在字符串的第3个字符后面插入子串“hello”,输出新字符串。 4)将字符串“hello”替换为“me”,输出新字符串。 5)以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。 */

    namespace test4 {/* 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度. 2)输出字符串中第一个出现字母a的位置. 3)在字符串的第3个字符 ...

  4. Spring写第一个应用程序

    ref:http://www.importnew.com/13246.html 让我们用Spring来写第一个应用程序吧. 完成这一章要求: 熟悉Java语言 设置好Spring的环境 熟悉简单的Ec ...

  5. Android逆向破解表单注册程序

    Android逆向破解表单注册程序 Android开发 ADT: android studio(as) 程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败. 布 ...

  6. 用python写一个定时提醒程序

    身体是革命的本钱,身体健康了我们才有更多精力做自己想做的事情,追求女神,追求梦想.然而程序员是一个苦比的职业,大部分时间都对着电脑,我现在颈椎就不好了,有时候眼睛还疼,我还没20阿,伤心...于是乎写 ...

  7. 干净win7要做几步才能运行第一个Spring MVC 写的动态web程序

    干净win7要做几步才能运行第一个Spring MVC 写的动态web程序: 1. 下载安装jdk 2. 配置Java环境变量 3. 测试一下第1,2两步是否完全成功:http://jingyan.b ...

  8. python学习(10)字典学习,写一个三级菜单程序

    学习了字典的应用.按老师的要求写一个三级菜单程序. 三级菜单程序需求如下: 1.深圳市的区--街道--社区---小区4级 2.建立一个字典,把各级区域都装进字典里 3.用户可以从1级进入2级再进入3级 ...

  9. C++代写,代写C++,C++程序代写,C++ assignment代写

    C++代写,代写C++,C++程序代写 关于C++代写,我们的涉猎范围: C++数据结构.算法题目 C++操作系统os题目 C++网络编程networking题目 C++ Linux题目 C++ Wi ...

随机推荐

  1. deeplearning.ai 人工智能行业大师访谈 Geoffrey Hinton 听课笔记

    1. 怀揣着对大脑如何存储记忆的好奇,Hinton本科最开始学习生物学和物理学,然后放弃,转而学习哲学:然后觉得哲学也不靠谱,转而学习心理学:然后觉得心理学在解释大脑运作方面也不给力,转而做了一段时间 ...

  2. JavaScript字符串转换成数字的三种方法

    在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b.value,因为他们都是字符串形 ...

  3. bzoj:1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名

    Description     农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序.    约翰已经比较了M(1≤M≤100 ...

  4. UESTC1599-wtmsb-优先队列

    wtmsb Time Limit: 1000/100MS (Java/Others) Memory Limit: 131072/131072KB (Java/Others) 这天,AutSky_Jad ...

  5. bean的作用域 :singleton和prototype

  6. 三 : spring-uploadify上传文件

    一 : applicationContext.xml中:必须声明不然获取不到<!-- 上传文件的配置 --> <bean id="multipartResolver&quo ...

  7. echarts图表里label文字过长换行的方法

    在做一些图标时,有时会出现显示文字过长的问题,需要将其按照指定的字数换行,像下图这样 而echarts没有提供换行的方法,但是可以使用fomatter方法进行设置,代码如下 formatter: fu ...

  8. [学习OpenCV攻略][007][缩小图片]

    cvPryDown(输入图片,输出图片) 根据输出图片的大小,把输入图片进行压缩 cvPryUp(输入图片,输出图片) 根据输出图片的大小,把输入图片进行放大 #include "cv.h& ...

  9. 免费V P N获取方式

    给需要加速器链接国外网站的朋友, 打开网址:http://miaoaff.com/reg.php?id=204250: 用一个邮箱注册,就会得到一个免费的vpn软件账号(包含300M流量时间永久): ...

  10. 如何在vue里面访问php?

    如果你选择前端使用vue框架,后端用PHP开发,服务器就不用node了,用Apache就好了 开发中,看你是否想进行前后端的分离.如果你不想进行前后端的分离,可以将vue的项目build之后放到php ...