想让Dephi 的程序向其他程序发送一个Ctrl+c的热键命令该如何做到

m0_37551303 2017-02-18 01:43:52
小弟我想给另一个程序发送一个Ctrl+c的组合键盘信息,使另一个程序能接收到这个组合热键。请求大神们帮帮解决一下!

急~在线等...............
...全文
376 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37551303 2017-02-20
  • 打赏
  • 举报
回复
引用 4 楼 lyhoo163 的回复:
[quote=引用 3 楼 m0_37551303 的回复:] [quote=引用 2 楼 lyhoo163 的回复:] var hwnd : Integer; begin hwnd := FindWindow('Form1', nil); // 关键要获得获取信息的控件的句柄 SetForegroundWindow(hwnd); keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); // 按下Ctrl键 keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), 0, 0); // 按下C键 keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), KEYEVENTF_KEYUP, 0); // 放开C键 keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); // 放开Ctrl end; 自编的窗体,点击后,延时发送消息。在期间,点击接受的窗体,让它成为焦点,接受到消息。
延时?您这句我在百度上查到过,您说延时,在哪里加延时啊?您这代码没法过得窗口焦点啊![/quote] 是这样,你的程序向其它程序发送Ctrl C消息的话。 比较成功的的操作,是要让接受的程序窗口控件成为焦点。再发送消息,该控件也就成功接受Ctrl C。 比方说,在程序中设置一个TTime控件,延时5秒发送消息,通过Button激活TTimer,当点击发送消息后, 再点击别被接受的窗口控件,这样它处于焦点状态,当延时发送的Ctrl C消息,它就成功接受了。 [/quote] 大神,获得句柄FindWindow('Form1', nil); 这句我如何找到Form1啊?
lyhoo163 2017-02-20
  • 打赏
  • 举报
回复
引用 3 楼 m0_37551303 的回复:
[quote=引用 2 楼 lyhoo163 的回复:] var hwnd : Integer; begin hwnd := FindWindow('Form1', nil); // 关键要获得获取信息的控件的句柄 SetForegroundWindow(hwnd); keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); // 按下Ctrl键 keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), 0, 0); // 按下C键 keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), KEYEVENTF_KEYUP, 0); // 放开C键 keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); // 放开Ctrl end; 自编的窗体,点击后,延时发送消息。在期间,点击接受的窗体,让它成为焦点,接受到消息。
延时?您这句我在百度上查到过,您说延时,在哪里加延时啊?您这代码没法过得窗口焦点啊![/quote] 是这样,你的程序向其它程序发送Ctrl C消息的话。 比较成功的的操作,是要让接受的程序窗口控件成为焦点。再发送消息,该控件也就成功接受Ctrl C。 比方说,在程序中设置一个TTime控件,延时5秒发送消息,通过Button激活TTimer,当点击发送消息后, 再点击别被接受的窗口控件,这样它处于焦点状态,当延时发送的Ctrl C消息,它就成功接受了。
m0_37551303 2017-02-18
  • 打赏
  • 举报
回复
引用 2 楼 lyhoo163 的回复:
var hwnd : Integer; begin hwnd := FindWindow('Form1', nil); // 关键要获得获取信息的控件的句柄 SetForegroundWindow(hwnd); keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); // 按下Ctrl键 keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), 0, 0); // 按下C键 keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), KEYEVENTF_KEYUP, 0); // 放开C键 keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); // 放开Ctrl end; 自编的窗体,点击后,延时发送消息。在期间,点击接受的窗体,让它成为焦点,接受到消息。
延时?您这句我在百度上查到过,您说延时,在哪里加延时啊?您这代码没法过得窗口焦点啊!
lyhoo163 2017-02-18
  • 打赏
  • 举报
回复
var hwnd : Integer; begin hwnd := FindWindow('Form1', nil); // 关键要获得获取信息的控件的句柄 SetForegroundWindow(hwnd); keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); // 按下Ctrl键 keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), 0, 0); // 按下C键 keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), KEYEVENTF_KEYUP, 0); // 放开C键 keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); // 放开Ctrl end; 自编的窗体,点击后,延时发送消息。在期间,点击接受的窗体,让它成为焦点,接受到消息。
santiaodahan 2017-02-18
  • 打赏
  • 举报
回复
PostMessage(hwnd, WM_COPY, 0, 0);

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧