介绍 当我需要多次复制/粘贴几个短语/单词时,我发现自己丢失了这个小实用程序。它扫描Windows剪贴板中的新项目,并将它们放入列表中,当用户按下Ctrl+Shift+V时,它将显示一个带有这些项目列表的窗口。棘手的事情是,它监听在任何窗口中被按下的键。用户单击要使用的项后,它将粘贴到文本框或写入区域中的活动表单中。 最重要的事情是,当你想粘贴一些文本你以前放在剪贴板,所有你需要做的就是选择目标文本框在任何窗口(我发现的一个例外是在Flash动画文本框),文本编辑器,浏览器等。按Ctrl + shift + V,并单击所需的物品;释放鼠标左键后,选中的文本就会粘贴-只需要三步!! 使用的代码 剪贴板 剪贴板由ClipboardListener类维护,它有两个公共函数: GetClipboardTextSetClipboardText 我从访问剪贴板的。net函数开始,但在这些函数的使用出现了一些问题之后,我看了一下Windows API,并成功地使用了它们。这些函数是: OpenClipboardEmptyClipboardGetClipboardDataSetClipboardDataCloseClipboard 我使用了Windows API中的其他几个函数—主要用于内存访问,但这里不打算提及它们。 处理键盘 检查键组合是通过使用键盘挂钩来完成的。键盘类侦听按下/释放的键,当按下某些组合时,它触发。键盘挂钩在这个网站的几篇文章中有详细的描述(我已经读过了:-)),所以请使用搜索功能获得更多信息。只需寻找Windows API函数: SetWindowsHookExUnhookWindowsHookExCallNextHookEx 粘贴的内容 要将某些文本粘贴到所需的位置,程序会模拟键盘操作——它使用ClipboardListener类将文本复制到剪贴板中,然后使用Windows API函数keybd_event按下Ctrl+V: 隐藏,复制Code
//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函数: EnumWindowsGetWindowModuleFileNameIsWindowVisible EnumWindows使用窗口的句柄填充列表,但按一定的顺序—从最顶层窗口到最底层窗口。我所要做的就是拒绝隐藏窗口并从列表中返回第二个窗口(第一个窗口是带有列表的窗口)。 在获得句柄之后,我为该窗口设置焦点,光标被移到之前的位置,窗口接收“Ctrl+V”的消息——文本被粘贴到相应的位置。为了设置焦点,我使用了Windows API函数: SetForegroundWindowSetFocus 最后将 这是我的第一篇文章,所以请善良:-) 历史 2007.11.05 -也可以用鼠标左键点击列表来激活窗口;将最近的项目放在列表的顶部。 本文转载于:http://www.diyabc.com/frontweb/news265.html