问题标签 [keyboard-hook]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# - 为什么全屏 Winform 应用程序不总是覆盖任务栏?
我使用的是 Windows Vista 和 C#.net 3.5,但我让我的朋友在 XP 上运行该程序并且遇到了同样的问题。
所以我有一个 C# 程序,我在后台运行,系统托盘中有一个图标。我有一个低级键盘钩子,所以当我按下两个键(在本例中为 Ctr+windows)时,它会拉出应用程序的主窗体。表单在组合按键事件处理程序中设置为全屏:
所以它基本上可以工作。当我点击 CTR+Windows 时,无论我关注什么程序,它都会弹出表单。但有时,任务栏仍会显示在表单上,这是我不想要的。当我按下那个组合键时,我希望它总是全屏显示。
我认为这与最初关注的应用程序有关。但即使当我点击我的主窗体时,任务栏有时也会停留在那里。所以我想知道焦点是否真的是问题所在。似乎有时任务栏很顽固,不想坐在我的程序后面。
任何人有任何想法我可以解决这个问题吗?
编辑:更多细节 - 我试图达到与网络浏览器相同的效果,当您将其置于全屏模式或将 powerpoint 置于演示模式时。
在 windows 窗体中,您可以通过将边框样式设置为 none 并最大化窗口来做到这一点。但有时由于某种原因,窗口不会覆盖任务栏。一半的时间会。
如果我将主窗口放在最上面,那么当我单击它时,其他窗口会落在它后面,如果任务栏被隐藏,我不希望这样做。
c# - C# Mono - 低级键盘钩子
我正在使用在CodeProject.com 上找到的代码作为低级键盘挂钩。唯一的问题是它使用了在单声道中不起作用的外部 DLL 调用。我想知道是否有人知道一种方法可以完成与该代码相同的事情,但可以在使用 .net 的 Windows 和使用 mono 的 Linux 中运行?
编辑:澄清我正在尝试做的事情:我正在制作一个Dashboard like application。该程序位于系统托盘中,当用户按下热键时,它将弹出所有小工具。所以程序没有焦点,所以通常它不会捕捉到任何击键,所以我使用低级键盘钩子并钩住用户定义为热键的两个键。但我正在为此使用 Windows DLL 调用,这在使用单声道的 Linux 中不起作用。所以我想知道是否有办法做同样的事情,但会使用单声道在 Linux 中运行?
c# - 来自 C# 中的键盘挂钩事件的 ShowDialog()
我想在ShowDialog()
触发键盘钩子事件时调用,但我遇到了一些困难:
- ShowDialog() 阻塞,所以我不能从钩子触发事件中调用它,因为它会阻塞操作系统。
- 我可以启动一个新线程并
ShowDialog()
从那里调用,但我得到了一些令人讨厌的异常。我想我不能调用ShowDialog()
任何其他线程。 - 我可以启动一个计时器:在接下来的 50 毫秒调用
ShowDialog()
中(顺便说一句,这是一个令人讨厌的 hack,我宁愿不这样做)。但是随后计时器在一个新线程中触发,然后我遇到了上一个项目符号中解释的相同问题。
有办法吗?
c# - 如何在 C# 中创建具有不同线程的键盘挂钩?
我正在使用 SetWindowsHookEx 在 c# 中创建一个低级键盘挂钩,问题是如何使键盘事件函数在主线程以外的线程上运行?另外,除了主线程之外,我目前没有其他线程,那么如何创建一个在键盘钩子事件发生之前会停止的线程?
c++ - 键盘挂钩...没有得到小写或大写字符
下面的函数正在记录“0”、“z”和“1” ok...但它没有捕获“Z”(shift-z)...任何帮助将不胜感激...
keyboard-shortcuts - Adobe AIR 键盘挂钩
我正在尝试向我的 AIR 应用程序添加一项功能,即使应用程序已最小化,它也可以侦听(可配置的)全局键盘事件。例如:CTRL-ALT-SHIFT-F12 截取屏幕截图。
我找不到任何注册键盘钩子的方法,并且监听键盘事件仅在应用程序具有焦点时捕获它们。建议?
c - 如何模拟按键到任何当前聚焦的窗口?
我正在尝试更改键盘发送到应用程序的键。我已经创建了一个全局挂钩并且可以阻止我想要的密钥,但我现在想发送一个新密钥。这是我的钩子过程:
我已经尝试将 SendMessage 和 PostMessage 与 GetFocus() 和 GetForegroudWindow() 一起使用,但无法弄清楚如何为 WM_KEYUP 或 WM_KEYDOWN 创建 LPARAM。我还尝试了 keybd_event(),它确实模拟了按键(我知道是因为这个钩子 proc 捕获了模拟的按键),包括 5 或 6 个不同的扫描代码,但没有任何影响我的前台窗口。
我基本上是想将我的 ms3200 上的缩放栏变成滚动控件,所以我什至可能发送了错误的键(向上和向下)。
language-agnostic - 截取笔记本电脑上的 Fn 键
有时,当我在 Thinkpads/MSI 笔记本电脑上工作时,Ctrl和Fn键被交换(Fn作为最左边的键),这让我抓狂——我一直在Fn按而不是Ctrl.
我想知道是否有可能拦截Fn密钥。我想写一个交换 Ctrl / Fn 密钥的钩子,但似乎Fn操作系统根本没有处理它。
有任何想法吗?
.net - C# 应用程序中的全局键盘捕获
我想在我的应用程序中捕获一个键盘快捷键,并在用户即使在应用程序之外按下键盘组合时触发一个对话框。类似于 Google 桌面搜索的 Ctrl,Ctrl 可以调出搜索对话框。
我尝试过使用一些键盘钩子模块,这些模块基本上使用 Win32 互操作来获得这种效果,但是我尝试的每个实现都会在某种程度上将键盘绑定到您在应用程序执行密集操作时开始出现奇怪行为的地方。比如加载大量数据,会导致键盘鼠标死机。
我正在寻找一种轻量级的解决方案,可以在不束缚键盘和鼠标的情况下完成这项工作。
windows - 如何使用 SetWindowsHookEx 和 WH_KEYBOARD 挂钩外部进程
我试图钩住例如记事本没有成功。制作一个全局钩子似乎工作正常。
在 XP SP2 上测试。
编辑:修改后的代码现在可以使用。
MyDLL 代码
我的程序