c#中设置快捷键
- 作者: 红花少年丶
- 来源: 51数据库
- 2021-08-08
最近找了一些资料,是讲在c#中设置快捷键运行方法或程序的
要设置快捷键必须使用user32.dll下面的两个方法。
bool registerhotkey(
hwnd hwnd,
int id,
uint fsmodifiers,
uint vk
);
和
bool unregisterhotkey(
hwnd hwnd,
int id
);
转换成c#代码,那么首先就要引用命名空间system.runtime.interopservices;来加载非托管类user32.dll。于是有了:
[dllimport("user32.dll", setlasterror=true)]
public static extern bool registerhotkey(
intptr hwnd, // handle to window
int id, // hot key identifier
keymodifiers fsmodifiers, // key-modifier options
keys vk // virtual-key code
);
[dllimport("user32.dll", setlasterror=true)]
public static extern bool unregisterhotkey(
intptr hwnd, // handle to window
int id // hot key identifier
);
[flags()]
public enum keymodifiers
{
none = 0,
alt = 1,
control = 2,
shift = 4,
windows = 8
}
这是注册和卸载全局快捷键的方法,那么我们只需要在form_load的时候加上注册快捷键的语句,在formclosing的时候卸载全局快捷键。同时,为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰,在form_load的时候,我先将剪贴板里面的内容清空。
于是有了:
private void form1_load(object sender, system.eventargs e)
{
label2.autosize = true;
clipboard.clear();//先清空剪贴板防止剪贴板里面先复制了其他内容
registerhotkey(handle, 100, 0, keys.f10);
}
private void form1_formclosing(object sender, formclosingeventargs e)
{
unregisterhotkey(handle, 100);//卸载快捷键
}
那么我们在别的窗口,怎么让按了快捷键以后调用我的主过程processhotkey()呢?
那么我们就必须重写wndproc()方法,通过监视系统消息,来调用过程:
protected override void wndproc(ref message m)//监视windows消息
{
const int wm_hotkey = 0x0312;//按快捷键
switch (m.msg)
{
case wm_hotkey:
processhotkey();//调用主处理程序
break;
}
base.wndproc(ref m);
}
要设置快捷键必须使用user32.dll下面的两个方法。
bool registerhotkey(
hwnd hwnd,
int id,
uint fsmodifiers,
uint vk
);
和
bool unregisterhotkey(
hwnd hwnd,
int id
);
转换成c#代码,那么首先就要引用命名空间system.runtime.interopservices;来加载非托管类user32.dll。于是有了:
[dllimport("user32.dll", setlasterror=true)]
public static extern bool registerhotkey(
intptr hwnd, // handle to window
int id, // hot key identifier
keymodifiers fsmodifiers, // key-modifier options
keys vk // virtual-key code
);
[dllimport("user32.dll", setlasterror=true)]
public static extern bool unregisterhotkey(
intptr hwnd, // handle to window
int id // hot key identifier
);
[flags()]
public enum keymodifiers
{
none = 0,
alt = 1,
control = 2,
shift = 4,
windows = 8
}
这是注册和卸载全局快捷键的方法,那么我们只需要在form_load的时候加上注册快捷键的语句,在formclosing的时候卸载全局快捷键。同时,为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰,在form_load的时候,我先将剪贴板里面的内容清空。
于是有了:
private void form1_load(object sender, system.eventargs e)
{
label2.autosize = true;
clipboard.clear();//先清空剪贴板防止剪贴板里面先复制了其他内容
registerhotkey(handle, 100, 0, keys.f10);
}
private void form1_formclosing(object sender, formclosingeventargs e)
{
unregisterhotkey(handle, 100);//卸载快捷键
}
那么我们在别的窗口,怎么让按了快捷键以后调用我的主过程processhotkey()呢?
那么我们就必须重写wndproc()方法,通过监视系统消息,来调用过程:
protected override void wndproc(ref message m)//监视windows消息
{
const int wm_hotkey = 0x0312;//按快捷键
switch (m.msg)
{
case wm_hotkey:
processhotkey();//调用主处理程序
break;
}
base.wndproc(ref m);
}
推荐阅读
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
热点文章
团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
0
使用 MSBuild.exe 在发布模式下构建 C# 解决方案
0
当我发布 Web 应用程序时,AfterPublish 脚本不运行
0
构建时 T4 转换的产品仅在下一个构建中使用
0
ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
0
新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
0
如何将条件编译符号(DefineConstants)传递给 msbuild
0
MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
0
NuGet 包还原找不到包,没有源
0
使用 C# 6.0 功能运行 TFS 构建
0
