Tag: keyboard hook

为什么按Ctrl +“+”会在TextBox中产生哔声?

我正在使用C#和Windows Forms并希望使用Ctrl+”Oemplus”作为我的应用程序的functionkey 。 我使用German keyboard ,这个键位于字母P右侧的2个键(即“+”)。 每当我与Ctrl结合使用此键并且焦点位于TextBox我会发出一声哔哔声。 当我切换到US keyboard布局(仍使用我的German keyboard )时也会发生这种情况。 这是] key 。 在Internet Explorers地址栏中按此键时也会发生同样的情况。 我的问题是: 为什么此组合键会在TextBox中产生哔声。 我怎能避免发出哔哔声? 感谢您为此付出的任何努力。 更新: 我在美国/泰国键盘上试了一下,也发出了哔哔声。 无论我使用什么逻辑键盘布局(德语,美国,泰国),都会发生这种情况。 蜂鸣声也发生在地址栏中的Windows资源管理器中,但不会出现在搜索框中。

C#中使用全局热键进行密钥捕获

我有一个在后台运行的应用程序,就像我可以将我的应用程序保存在系统托盘中。如果它仍然在系统托盘上,我的应用程序将完成它的工作。 每当用户按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 = […]

在不聚焦窗口的情况下捕获键

我有一个应用程序,总是检查是否按下了像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 = […]

可以使用Winkey + L的低级键盘挂钩/ SendInput? (工作站锁定在Vista及更高版本中被截获)

我正在开展一个名为UAWKS (非官方Apple无线键盘支持)的项目,帮助Windows用户使用Apple的蓝牙键盘。 UAWKS的主要目标之一是使用Ctrl交换Cmd键(在Windows中表现为Winkey ),允许用户为复制执行Cmd + C ,为新选项卡执行Cmd + T等。 它目前使用AutoHotkey开发,在Windows XP下运行良好。 但是,在Vista和Windows 7上, Cmd + L会导致问题: 无论低级键盘挂钩如何, Win + L总是被Windows拦截并且通常锁定工作站…… 您可以使用此注册表黑客禁用工作站锁定,但按下Win + L仍然无法在AHK中反弹 按下Win + L将Winkey保持在Keydown状态,直到下一个(额外的)Winkey Up。 模拟Keyup事件似乎也不起作用! 似乎Win + L是一个特殊的和弦,让其他一切混乱。 我查看了AHK源代码,他们试图在keyboard_mouse.cpp中的SendKey()中解决这个问题(在SendKey()中的第883行附近),但它不起作用。 我在C#中编写了自己的低级键盘钩子应用程序,我也看到了同样的问题。 有没有其他人遇到这个? 有解决方法吗?

在Windows XP中使用SetWindowsHookEx时出错,但在Windows 7中没有

我开发了一个使用全局键盘/鼠标钩子的应用程序。 它在Windows 7中运行良好,但在Windows XP中运行不佳。 当我在Windows XP中调用SetWindowsHookEx时,收到错误代码1428 int MouseLowLevel = 14 int code = SetWindowsHookEx(MouseLowLevel, MouseHookProc, IntPtr.Zero, 0); private IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) {}

如何知道键盘在文本输入上是否处于活动状态

我有一个像屏幕键盘一样的应用程序,我需要它知道键盘光标(插入符号)是否在任何位置处于活动状态,因此键盘将设置为活动状态。 我搜索了键盘钩子和winapi,但我找不到合适的方法。 为了简化我的问题,如果用户可以按真实键盘并在计算机上打印文本,我需要激活我的应用程序。

使用c#阻止快捷键

我使用以下代码禁用Alt + Tab,Alt + Esc,Ctrl + Esc和Windows Key,但不知何故它不起作用。 请帮我纠正。 namespace BlockShortcuts { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam); [DllImport(“user32.dll”, EntryPoint = “SetWindowsHookExA”, CharSet = CharSet.Ansi)] private static extern int SetWindowsHookEx( int idHook, LowLevelKeyboardProcDelegate lpfn, int hMod, int dwThreadId); [DllImport(“user32.dll”)] […]

如何在C#中捕获windows键,alt + tab,ctrl + alt + delete?

如何使用C#在Windows应用程序中捕获Windows键, Alt + Tab和Ctrl + Alt + Delete ?

什么可以导致Windows取消挂钩低级别(全局)键盘钩子?

我们通过SetWindowsHookEx和WH_KEYBOARD_LL安装了一些全局键盘钩子,这些钩子看起来随机被Windows WH_KEYBOARD_LL 。 我们validation了它们不再附加钩子,因为在句柄上调用UnhookWindowsHookEx返回false 。 (还validation了它正常工作时返回true ) 似乎没有一致的repro,我听说他们可以因为超时或exception被抛出而脱钩,但我已经尝试了两个只是让它在处理方法中的断点超过一分钟,以及抛出一个随机exception(C#),它似乎仍然有效。 在我们的回调中,我们很快发布到另一个线程,因此可能不是问题。 我已经阅读了Windows 7中的解决方案,用于在注册表中设置更高的超时,因为Windows 7显然更加积极地执行超时(我们都在这里运行Win7,所以不确定这是否发生在其他操作系统上),但这并不是看起来似乎是一个理想的解决方案。 我考虑过只运行一个后台线程来每隔一段时间刷新一次钩子,这很黑,但我不知道这样做有什么真正的负面影响,而且它似乎比改变全局Windows注册表设置更好。 还有其他建议或解决方案? 设置钩子的类和它们所附加的代理都是静态的,所以它们不应该是GC。 编辑:通过调用GC.Collect();validationGC.Collect(); 他们仍然工作,所以他们没有被收集。

C#:键盘钩

我不知道这个问题有更好的标题,但我会说明我的问题。 我正在开发类似MP3播放器的应用程序,它使用多媒体键播放/暂停,停止播放歌曲,我实际上使它工作但是FormApplication必须在顶部[聚焦] protected override void WndProc(ref Message msg) { if (msg.Msg == 0x319) // WM_APPCOMMAND message { // extract cmd from LPARAM (as GET_APPCOMMAND_LPARAM macro does) int cmd = (int)((uint)msg.LParam >> 16 & ~0xf000); switch (cmd) { case 13: // APPCOMMAND_MEDIA_STOP constant MessageBox.Show(“Stop”); break; case 14: // APPCOMMAND_MEDIA_PLAY_PAUSE MessageBox.Show(“Play/Pause”); break; case 11: // APPCOMMAND_MEDIA_NEXTTRACK MessageBox.Show(“Next”); […]