【问题标题】:Integrating my Program in Windows to replace thr default handler for that particular operation在 Windows 中集成我的程序以替换该特定操作的默认处理程序
【发布时间】:2011-11-13 10:01:30
【问题描述】:

我想以这样的方式将我的程序集成到 Windows 中,例如,当用户按下 ctrl + shift 或 ctrl + v 或任何其他组合键时,我的程序应该运行。我见过像 TeraCopy 这样的软件,它在按下 Ctrl-V 时启动,它们处理复制操作,而不是 Windows 资源管理器(默认处理程序)。

我知道可以使用 Windows SDK 来完成,但我不确定要使用哪个 API,或者从哪里开始。任何人都可以提供链接/参考/代码以提供帮助吗?

【问题讨论】:

  • 我并没有将问题缩小到仅复制操作。可以是任何东西。

标签: windows winapi hook


【解决方案1】:

您需要使用键盘挂钩,可以使用SetWindowsHookExWH_KEYBOARD_LL 常量作为idHook 参数来实现。

然后,您可以为按键状态更改时设置回调函数。当检测到某个组合(例如同时按下 Ctrl 和 V,但没有其他修饰键)时,您可以执行您的操作。

请记住,某些程序需要保留 Ctrl+V 用于其他目的,因此您可能需要使用GetForegroundWindow 来检测当前是否针对 Windows 资源管理器。

看到这个:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990.aspx

【讨论】:

  • 我知道键盘挂钩,但我在这里谈论的是不同的东西。我的程序不会运行。它会在按下特定键或键组合时运行。
  • 你不能盲目地将东西挂在不存在的代码上。您需要在后台运行一个常驻进程来处理挂钩回调。从那里你可以弹出一个窗口或使用CreateProcess 来启动你的进程。
  • 另外,我不希望执行默认操作。在复制/粘贴的情况下,我不希望 Windows 资源管理器复制,我的程序应该以自己的方式进行。
  • 那么 TeraCopy 是如何工作的呢?没有属于 TeraCopy 的进程或服务正在运行,每当我复制/粘贴文件时它仍然会弹出..我想达到类似的效果。
  • 如果资源管理器在我之前处理事件怎么办?我的意思是,我没有必要在资源管理器得到它之前得到它。顺便说一句,我想知道,启动我的主进程的 DLL 可以注入资源管理器,这可能会阻止资源管理器以某种方式处理它。
猜你喜欢
  • 2020-07-20
  • 1970-01-01
  • 2016-01-15
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 2010-10-31
  • 1970-01-01
相关资源
最近更新 更多