例如,使用winamp(至少在Windows上),您可以在后台以winamp播放全屏游戏,并使用媒体按钮*控制声音。Winamp不需要聚焦,可以使游戏继续全屏显示。
我更喜欢用Java编写此代码,但这可能行不通(在Java afaik中很难捕获没有重点的击键),因此任何C#解决方案也都可以。
因此,基本问题是:如何在没有重点的情况下捕获击键?
*)我相信“后退/前进/停止/邮件/搜索/收藏夹/网站/主页”按钮称为媒体按钮,但欢迎使用更好的名称:)。
低级Windows挂钩是一种实现方法。这是一篇文章,这里是来自MSDN的更多信息。
这是该代码的局部视图:
private IntPtr LowLevelKeyboardHook(int nCode, WindowsMessages wParam, [In] KBDLLHOOKSTRUCT lParam)
{
bool callNext = true;
bool isKeyDown = (wParam == WindowsMessages.KEYDOWN || wParam == WindowsMessages.SYSKEYDOWN);
bool isKeyUp = (wParam == WindowsMessages.KEYUP || wParam == WindowsMessages.SYSKEYUP);
if ((nCode >= 0) && (isKeyDown || isKeyUp))
{
// the virtual key codes and the winforms Keys have the same enumeration
// so we can freely cast back and forth between them
Keys key = (Keys)lParam.vkCode;
// Do your other processing here...
}
// if any handler returned false, trap the message
return (callNext) ? User32.CallNextHookEx(_mainHook, nCode, wParam, lParam) : _nullNext;
}
/// <summary>
/// Registers the user's LowLevelKeyboardProc with the system in order to
/// intercept any keyboard events before processed in the regular fashion.
/// This can be used to log all keyboard events or ignore them.
/// </summary>
/// <param name="hook">Callback function to call whenever a keyboard event occurs.</param>
/// <returns>The IntPtr assigned by the Windows's sytem that defines the callback.</returns>
private IntPtr RegisterLowLevelHook(LowLevelKeyboardProc hook)
{
IntPtr handle = IntPtr.Zero;
using (Process currentProcess = Process.GetCurrentProcess())
using (ProcessModule currentModule = currentProcess.MainModule)
{
IntPtr module = Kernel32.GetModuleHandle(currentModule.ModuleName);
handle = User32.SetWindowsHookEx(HookType.KEYBOARD_LL, hook, module, 0);
}
return handle;
}
/// <summary>
/// Unregisters a previously registered callback from the low-level chain.
/// </summary>
/// <param name="hook">IntPtr previously assigned to the low-level chain.
/// Users should have stored the value given by
/// <see cref="Drs.Interop.Win32.LowLevelKeyboard.RegisterLowLevelHook"/>,
/// and use that value as the parameter into this function.</param>
/// <returns>True if the hook was removed, false otherwise.</returns>
private bool UnregisterLowLevelHook(IntPtr hook)
{
return User32.UnhookWindowsHookEx(hook);
}
只需实现所需的所有P / Invoke声明,它就可以工作。我在应用程序中使用了这种方法,并且效果很好。
问题内容: Python中是否有某种方法可以捕获事件而不将所有代码放入-语句中? 如果用户按下 +,我想干净地退出而没有任何痕迹 。 问题答案: 是的,您可以使用模块signal安装中断处理程序,并使用threading.Event永远等待:
问题内容: 我想在应用程序中连接到wifi网络。 码: 但是问题是我不知道。如何获取WiFi网络的SSID ? 问题答案: 如果您想获得所有可用的wifi: 如果要连接wifi ssid: 如果您想添加新的wifi设置,我已在下面编写了演示应用程序:
问题内容: 如何捕获iframe周围的div上的click或mousedown事件。我尝试将函数附加到div上的click事件,但是由于iframe从未将事件泡到周围的div上,因此永远不会调用该函数。有没有一种方法可以捕获div上的事件,然后将其传播到iframe进行默认操作? 问题答案: 如果点击在iframe区域中,则iframe上下文会处理click事件,它不会冒泡到iframe父级。因此
我正在我的 SPA 应用程序中实现 Auth0,其中一个要求是拥有一个自定义 UI,这也意味着我无法使用重定向到 Auth0 的通用登录页面。 在阅读了Auth0网站后,我发现了资源所有者授权类型,这似乎解决了我直接使用Auth0 API处理登录的问题。 使用这种授予类型有什么缺点吗??(我读到这不是很推荐,但我想听听关于这一点的意见) 此外,这种资助类型还有其他选择吗??我是说,如果Biz不想要
问题内容: 我有一个用Java编写的控制台程序,该程序可以响应单键按下,但是用户不按Enter。 我正在打乒乓球,所以需要上下键来移动蝙蝠的东西。 欢迎使用其他方法!(除了制作GUI外) -编辑: 我将只在UNIX系统(OSX和Linux)上运行程序,因此我可以通过以下方式将终端置于“原始”模式: 当我在运行程序之前在控制台中键入该命令时,它将起作用!但是我需要Java自动执行此操作,因此我尝试了
问题内容: 我正在尝试用我的程序解决一个奇怪的问题。该程序创建了一系列GUI和JTable,使用户能够生成XML文件。这些表之一是用于创建“语句”的。除了要说的是数据存储在多个2D数组中,这些2D数组又存储在哈希映射中之外,我将不做详细介绍。 这是发生了什么。当用户进入Statement屏幕时,将使用2D数组中的内容生成JTable。此数据填充用户能够修改的单元格。这些单元格之一(也是最重要的)是