我是Windows的长期用户,他非常喜欢使用许多不同的实用程序(有些是我自己用Python编写的)和AutoHotKey脚本来自定义Windows。这些都使用全局热键来实现其功能。
最近,我被迫升级到Windows10。问题之一是某些热键似乎无法绑定。几个示例是ctrl-j和ctrl-v。
有人告诉我,我需要通过“属性”将这些应用标记为以管理员身份运行,但是即使如此,它们仍无法成功绑定到这些热键。
知道如何绑定这些热键吗?
更新:
像AHK看起来是能够绑定到这些键,但不断有用同上也没有了,我的wxPython的程序是没有。知道为什么后两个不能绑定到这些键,我该如何解决?
wxpython autohotkey keyboard-shortcuts global-hotkey windows-10
首先,我想知道Global Hotkeys和Hook Global Keystrokes之间有什么区别,并将它们用作热键?
其次,我想在我的应用程序中使用全局热键,它将有两个部分:1.我将创建一个窗口,向用户显示他现在按下的键,使用KeyUp功能,它将保存组合.2.按下步骤1的组合时,将调用特定功能
用户可以同时拥有多个热键组合,每个热键组合调用不同的功能.
我在互联网上找到了很多解决方案/解释/但我不知道哪个最符合我的需求 - 这就是我需要你帮助的地方.
以下是我发现的一些(可能全部)解决方案/解释/内容:
在WPF/C#中使用全局键盘钩子(WH_KEYBOARD_LL)
https://gist.github.com/Ciantic/471698
http://www.dreamincode.net/forums/topic/180436-global-hotkeys/
http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731.aspx
http://www.codeproject.com/Tips/274003/Global-Hotkeys-in-WPF
http://www.pinvoke.net/default.aspx/user32/RegisterHotKey.html
如何使用WPF和.NET 3.5注册全局热键来说CTRL + SHIFT +(LETTER)?
非常感谢你的帮助
我有一个应用程序,该应用程序始终检查是否F12按下了某个键。它不需要将焦点放在应用程序的主窗口上。我尝试了这段代码:
public int a = 1;
// DLL libraries used to manage hotkeys
[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
const int MYACTION_HOTKEY_ID = 1;
public Form1()
{
InitializeComponent();
// Modifier keys codes: Alt = 1, Ctrl = 2, Shift = 4, Win = 8
// Compute the addition of each combination of the keys you want to be pressed
// ALT+CTRL = …Run Code Online (Sandbox Code Playgroud) 我正在创建一个程序,用于截取游戏的截图.当我按热键时它可以工作,但是在全屏打开游戏时它不会检测到键.
我的代码:
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
switch (m.Msg)
{
case WM_HOTKEY:
{
if ((short)m.WParam == 1)
{
start = DateTime.Now;
progressBar1.Maximum = 1;
progressBar1.Step = 1;
progressBar1.Value = 0;
DoRequest();
}
break;
}
default:
{
base.WndProc(ref m);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用以下方式注册全局密钥:
RegisterHotKey(this.Handle, 1, (int)KeyModifier.None, Keys.F11);
Run Code Online (Sandbox Code Playgroud)
帮我 :/
解决了! 解决了,我设法修复了这个项目:http: //www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook
谢谢你们!
所以我有一个带有Form的C#控制台应用程序,我想用热键打开它.比如说Ctrl+ <打开表单.所以我现在得到了处理globalkeylistener的代码,但看起来我实现它失败了.它创建了一个while循环来阻止它关闭程序,我尝试使用kbh_OnKeyPressed方法从用户那里获得输入.
我试着用这种方式实现它:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Globalkey
{
static class Program
{
[DllImport("user32.dll")]
private static extern bool RegisterHotkey(int id, uint fsModifiers, uint vk);
private static bool lctrlKeyPressed;
private static bool f1KeyPressed;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LowLevelKeyboardHook kbh = new LowLevelKeyboardHook();
kbh.OnKeyPressed += kbh_OnKeyPressed;
kbh.OnKeyUnpressed += kbh_OnKeyUnpressed;
kbh.HookKeyboard();
while(true) { }
}
private static void kbh_OnKeyUnpressed(object sender, Keys e)
{
if (e == Keys.LControlKey)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个在后台运行的应用程序,就像我可以将我的应用程序保存在系统托盘中.如果它仍然在系统托盘上,我的应用程序将完成它的工作.每当用户按F10或F9时,将完成一些工作.我试过这个:
public partial class Form1 : Form
{
public int a = 1;
[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);
const int MYACTION_HOTKEY_ID = 1;
public Form1()
{
InitializeComponent();
RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 0, (int) Keys.F9);
RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 0, (int)Keys.F10);
this.ShowInTaskbar = false;
}
protected override void WndProc(ref Message m)
{
if (m.Msg …Run Code Online (Sandbox Code Playgroud) 就像 Ctl, Alt + delete
我想编写一个程序,它在 python 中使用带有 3 个或更多参数的全局热键。分配的功能应该只在我按下键盘上的所有三个键时执行。例如 alt、windows 和 F3。
win32con.VK_F3, win32con.MOD_WIN, win32con.VK_F5
Run Code Online (Sandbox Code Playgroud)
这是我要运行的当前程序,但是它的输出是:
win32con.VK_F3, win32con.MOD_WIN, win32con.VK_F5
Run Code Online (Sandbox Code Playgroud)
该程序:
import os
import sys
import ctypes
from ctypes import wintypes
import win32con
byref = ctypes.byref
user32 = ctypes.windll.user32
HOTKEYS = {
1 : (win32con.VK_F3, win32con.MOD_WIN, win32con.VK_F5),
2 : (win32con.VK_F4, win32con.MOD_WIN),
3 : (win32con.VK_F2, win32con.MOD_WIN)
}
def handle_win_f3 ():
#os.startfile (os.environ['TEMP'])
print ("Hello WOrld! F3")
def handle_win_f4 ():
#user32.PostQuitMessage (0)
print ("Hello WOrld! F4")
def handle_win_f1_escape ():
print("exit")
sys.exit()
HOTKEY_ACTIONS …Run Code Online (Sandbox Code Playgroud) 我刚刚阅读了有关如何使用Carbon事件创建全局热键的文章.在作者提到的评论中,他不再使用这种技术,因为它是"弃用的方式".到现在为止还挺好.
现在我正在寻找Cocoa吊坠.有人有提示在哪里搜索它吗?我试着稍微谷歌,但我发现的一切都与他采取的方法相同.
谢谢
-f
c# ×6
hotkeys ×3
autohotkey ×1
cocoa ×1
events ×1
forms ×1
keystroke ×1
macos-carbon ×1
objective-c ×1
python ×1
screenshot ×1
windows ×1
windows-10 ×1
wpf ×1
wxpython ×1