【问题标题】:How to write my own Global Snippets program with .NET?如何使用 .NET 编写我自己的 Global Snippets 程序?
【发布时间】:2010-11-23 02:31:17
【问题描述】:

我想为 Windows XP 及更高版本编写自己的全局 sn-ps 工具。这将是一个始终在后台运行的工具,它会在全局定义的热键上弹出,允许我选择带有替换参数的 sn-p,然后将扩展的 sn-p 粘贴到我的任何控件的文本输入中激活的时候就在里面了,最后让我回到之前那个app/输入框。

我知道如何完成大部分算法方面的工作,但我不知道如何完成这些基于 Windows 的功能:

1 - 全局热键:如何在 Windows(来自 .net?)中定义一个可以工作的键序列,即使在另一个应用程序文本框中输入数据也是如此? (通常这将是一个浏览器窗口)

2 - 粘贴到另一个应用程序:我可以使用粘贴缓冲区和 Ctrl-C,但我想避免额外的击键。

3 - 将控件返回到原始窗口:无缝返回到我的输入流:我该怎么做?事实上,我的工具在弹出之前怎么知道我在哪里?

我想自己写这篇文章的原因首先是学习如何(因为我想做其他类似的工具),其次,我不知道任何具有参数替换的 sn-ps 工具我想要的。

所以,两 (2) 个问题是 A) 我的一般方法应该是什么? B) 我怎样才能最好地完成上述第 1 到第 3 项?

【问题讨论】:

  • 我在搜索具有这些确切要求的工具时发现了这个问题。我已经找了好几个星期了,还没有找到真正满足这个需求的东西。你是不是:找到了符合这些要求的东西,还是自己写的?
  • 不,抱歉。这里的答案和我得到的一样接近,但它仍然有一些来自 vb.net 的问题。

标签: c# .net vb.net code-snippets hotkeys


【解决方案1】:

您需要使用全局系统键盘挂钩来捕获您的热键。有一个 CodeProject article 展示了如何在 .NET 中执行此操作。

一旦您“捕获”了您的击键,您就可以使用 Windows API 来获取当前的窗口句柄。但是,我会尽量避免激活您的应用程序。您应该能够只粘贴新文本,并允许应用程序处理它。

使用 Windows API 的缺点是它并非在所有情况下都有效,而且“坏掉”的情况越来越普遍。例如,WPF 应用程序不会为窗口中的每个元素提供 HWND,因此获取当前“控件”的句柄只会为您提供窗口,而不是适当的元素。


编辑:另一个参考来源是article in MSDN Magazine。它展示了如何通过 C# 使用 P/Invoke 来做到这一点。

【讨论】:

  • 这篇文章是关于编写一个非托管的 VC++ dll 以在 VB/C# 中启用此功能。 Unmnaged VC++ 有点超出我的理解,反正我在离家更近的地方吗?
  • 这是另一篇文章:msdn.microsoft.com/en-us/magazine/cc188966.aspx 这一篇完全在 C# 中完成,使用 P/Invoke。不幸的是,您需要为此使用 P/Invoke 和 Windows API,因为框架中没有挂钩 API。
  • 我鼓励您将第二个参考移到您的答案中,我确实发现它更有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多