65.9K
CodeProject 正在变化。 阅读更多。
Home

剪贴板小助手

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.49/5 (18投票s)

2007 年 10 月 23 日

CPOL

3分钟阅读

viewsIcon

59618

downloadIcon

1930

剪贴板小助手 - 最简单地管理你的剪贴板。

Screenshot - 1.png

引言

这是一个小型实用程序,当需要多次复制/粘贴几个短语/单词时,我发现自己很需要它。 它扫描 Windows 剪贴板中的新项目,将它们放入列表中,当用户按下 Ctrl+Shift+V 时,它会显示一个包含这些项目的窗口。 棘手的是,它会监听任何窗口中按下的这些键。 用户单击他想要使用的项目后,它会被粘贴到活动窗体中的文本框或书写区域中。

最重要的是,当你想粘贴之前放在剪贴板中的一些文本时,你所要做的就是在任何窗口中选择目标文本框(我发现的一个例外是 Flash 动画中的文本框) - 文本编辑器、Web 浏览器等 - 按 Ctrl+shift+V,然后单击所需的项目;释放鼠标左键后,选定的文本就会被粘贴 - 只需三个动作!!!

使用代码

剪贴板

剪贴板由 ClipboardListener 类维护,该类具有两个公共函数

  • GetClipboardText
  • SetClipboardText

我首先使用了 .NET 函数来访问剪贴板,但在遇到几个关于使用这些函数的问题后,我查看了 Windows API,并成功地使用了它们。 这些函数是

  • OpenClipboard
  • EmptyClipboard
  • GetClipboardData
  • SetClipboardData
  • CloseClipboard

我使用了 Windows API 中的其他几个函数 - 主要用于内存访问,但我不打算在这里提及它们。

处理键盘

通过使用键盘钩子来检查按键组合。 Keyboard 类监听按下/释放的键,并在按下某些组合时触发。 键盘钩子在本网站上的几篇文章中都有详细描述(我读过它们 :-)),因此请使用搜索功能获取更多信息。 只需查找 Windows API 函数

  • SetWindowsHookEx
  • UnhookWindowsHookEx
  • CallNextHookEx

粘贴内容

要将某些文本粘贴到所需的位置,该程序会模拟键盘操作 - 它使用 ClipboardListener 类将文本复制到剪贴板中,并使用 Windows API 函数 keybd_event "按下" Ctrl+V

//press Ctrl
keybd_event(VK_CONTROL, 0, 0, 0);
//press V
keybd_event((byte)VkKeyScan((byte)'v'), 0, 0, 0);
//release Ctrl
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
//release V
keybd_event((byte)VkKeyScan((byte)'v'), 0, KEYEVENTF_KEYUP, 0);

keybd_event 向活动窗口发送消息。 但是我们应该发送到哪个窗口 - 我们需要一个句柄。 我们所知道的是,目标窗口在列表窗口显示之前位于顶部。 对于这项任务,我使用了其他几个 Windows API 函数

  • EnumWindows
  • GetWindowModuleFileName
  • IsWindowVisible

EnumWindows 用窗口的句柄填充列表,但具有一定的顺序 - 从最顶层的窗口到最底部的窗口。 我所要做的就是拒绝隐藏的窗口并从列表中返回第二个窗口(第一个是带有列表的窗口)。

获取句柄后,我为该窗口设置焦点,光标被带到之前的位置,并且该窗口接收到 "Ctrl+V" 的消息 - 文本被粘贴到位。 要设置焦点,我使用了 Windows API 函数

  • SetForegroundWindow
  • SetFocus

最后遗嘱

这是我的第一篇文章,所以请善待我 :-)

历史

  • 2007.11.05 - 激活窗口,并通过鼠标左键单击列表; 将最近的项目放在列表的顶部。
© . All rights reserved.