剪贴板小助手
剪贴板小助手 - 最简单地管理你的剪贴板。
引言
这是一个小型实用程序,当需要多次复制/粘贴几个短语/单词时,我发现自己很需要它。 它扫描 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 - 激活窗口,并通过鼠标左键单击列表; 将最近的项目放在列表的顶部。