请问怎么通过模拟按键调用第三方程序右键菜单里的某个按钮?

tteagle 2012-10-05 09:44:21
需求:一个winform程序通过api模拟鼠标及按键操作在第三方程序黏贴数据。
目前其实已经初步实现了,
1、在winform程序里定义全局快捷键
2、在第三方程序的界面中按指定的快捷键模拟鼠标右键点击(可以弹出复制(C),黏贴(P)等菜单)
3、现在就是这步搞不定,要求模拟点击“P”按键,将剪切板里的数据黏贴进来。
模拟鼠标:
//右键点下&松开
Win32API.mouse_event((int)(MouseEventFlags.RIGHTDOWN | MouseEventFlags.RIGHTUP), 0, 0, 0, 0);
System.Threading.Thread.Sleep(100);
模拟键盘Win32API.keybd_event((byte)Keys.P, 0, 0, 0);(这一步不成功)

...全文
275 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tteagle 2012-10-08
  • 打赏
  • 举报
回复
没有好答案,结贴了,谢谢回复的兄弟。
tteagle 2012-10-07
  • 打赏
  • 举报
回复
谢谢你的热情顶贴。
SocketUpEx 2012-10-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 4 楼 的回复:
你试试CTRL+V能不能用
如用能用,直接发送CTRL+V比模拟弹出右键菜单更简单点吧

Ctrl+V不能用。
其实我自己目前已初步实现,
1、模拟鼠标右键,弹出菜单
2、模拟鼠标移动到“黏贴”这个按钮处
3、模拟鼠标左键,确认选择
但我觉得用模拟鼠标移动有点不可靠,所以还是想通过按“P”或其他更可靠的办法。
[/Quote]

山长水远都搞好了
唔差最后一步吧

tteagle 2012-10-07
  • 打赏
  • 举报
回复
人工顶一次,如果没什么好办法就结贴了。
tteagle 2012-10-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
你试试CTRL+V能不能用
如用能用,直接发送CTRL+V比模拟弹出右键菜单更简单点吧
[/Quote]
Ctrl+V不能用。
其实我自己目前已初步实现,
1、模拟鼠标右键,弹出菜单
2、模拟鼠标移动到“黏贴”这个按钮处
3、模拟鼠标左键,确认选择
但我觉得用模拟鼠标移动有点不可靠,所以还是想通过按“P”或其他更可靠的办法。
tteagle 2012-10-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
Win32API.keybd_event((byte)Keys.P, 0, 0, 0);
Win32API.keybd_event((byte)Keys.P, 0, KEYEVENTF_KEYUP, 0);
[/Quote]
谢谢您的回复,但还是不行,手工按一下“P”可以用,用程序模拟不行。
SocketUpEx 2012-10-05
  • 打赏
  • 举报
回复
你试试CTRL+V能不能用
如用能用,直接发送CTRL+V比模拟弹出右键菜单更简单点吧

tteagle 2012-10-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
如果是标准的textbox、richtextbox或者word这样的软件,直接发送wm_paste事件就可以了,不需要这么麻烦。
[/Quote]
不是普通的word软件,是一种仿真telnet软件,类似于netterm。您说的wm_paste需要句柄把,这些没搞定。
其实我的需求就是向一个第三方程序的当前光标所在处发送数据。
SocketUpEx 2012-10-05
  • 打赏
  • 举报
回复
Win32API.keybd_event((byte)Keys.P, 0, 0, 0);
Win32API.keybd_event((byte)Keys.P, 0, KEYEVENTF_KEYUP, 0);

threenewbee 2012-10-05
  • 打赏
  • 举报
回复
如果是标准的textbox、richtextbox或者word这样的软件,直接发送wm_paste事件就可以了,不需要这么麻烦。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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