求助 V 友:我调用了第三方动态库,它弹了一个密码输入框,我如何在本程序(C#.NET)把字符串(即密码)发送给它?或者向他发送模拟键盘事件的消息?

2018-10-23 12:24:01 +08:00
 AmoxiDu
能够使用 FindWindow 获取密码输入框的句柄,不能修改第三方动态库,求有经验的 V 友指点!
2094 次点击
所在节点    程序员
12 条回复
chinvo
2018-10-23 12:26:50 +08:00
既然有密码框说明设计上就是要输入密码的,你可以研究下这个库的源码看看能不能跳过密码直接调用其他组件
AmoxiDu
2018-10-23 12:33:47 +08:00
@chinvo 没有那个动态库的源码,有源码我就能用 sendmessage 了😂密码是必须输入的
ReVanTis
2018-10-23 12:35:23 +08:00
按你现在的思路,模拟键盘的话,
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.sendkeys.send?view=netframework-4.7.2
以前跑 selenium 的时候网页的弹窗我似乎用过这个。。。
geelaw
2018-10-23 12:35:34 +08:00
最好用那个库本身的东西解决,如果不行的话就用 UI Automation
PulpFunction
2018-10-23 12:41:48 +08:00
严重密码那块改一下?或者启用弹框那里注视
chinvo
2018-10-23 13:28:00 +08:00
@AmoxiDu #2 用 DotPeek / ReSharper / Rider 跟一下( Go To Declaration )
ysc3839
2018-10-23 13:54:26 +08:00
先试试用 PostMessage 发送键盘消息。不行的话再试试 SendInput。
可以的话用 Spy++ 查看一下窗口,截图发上来。
aldenchang
2018-10-23 13:58:29 +08:00
没太明白,你获取了密码窗体句柄把密码发给了窗体后,如果你无法修改动态库代码,也还是无法处理啊。你是想跳过密码输入的步骤?
mingl0280
2018-10-23 14:52:29 +08:00
办法多了去了,post/sendmessage;keybd_event;SendInput 都可以,找到窗口句柄就好办
cjw1115
2018-10-23 15:11:52 +08:00
UI automation 那一套,结合 Windows 消息还有 inspect 可以解决问题
AmoxiDu
2018-10-23 16:48:03 +08:00
搞定了,用的是 keybd_event,感谢楼上各位老哥的回答!
https://paste.ubuntu.com/p/bt9cHqvqRJ/
sarlanori
2018-10-23 17:30:55 +08:00
都能拿到 handle 了,有很多方式都可以达到目的,比如 SetText,SendMessage 等

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/500158

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX