vb 模拟输入文本 20

sendkeys感觉很不稳定有时候莫名其妙就不能用了有没有其他方法?... sendkeys 感觉很不稳定 有时候莫名其妙就不能用了 有没有其他方法? 展开
 我来答
匿名用户
2020-06-26
展开全部

有一些使用DirectX接口的游戏程序,它们在读取键盘操作时绕过了windows的消息机制,而使用DirectInput.这是因为有些游戏对实时性控制的要求比较高,比如赛车游戏,要求以最快速度响应键盘输入。而windows消息由于是队列形式的,消息在传递时会有不少延迟,有时1秒钟也就传递十几条消息,这个速度达不到游戏的要求。而DirectInput则绕过了windows消息,直接与键盘驱动程序打交道,效率当然提高了不少。因此也就造成,对这样的程序无论用PostMessage或者是keybd_event都不会有反应,因为这些函数都在较高层。

这个时候就要用到驱动级模拟。可以到网上搜搜,以前有一个WINIO可以模拟,现在好像没有了,不过应该还有其他的插件的,可以到网上搜一下。

——网页链接

百喥知道
2013-06-18 · TA获得超过356个赞
知道小有建树答主
回答量:371
采纳率:0%
帮助的人:144万
展开全部
其实很多情况下不是SendKeys本身的事,而是应用程序的限制,随便举个例子吧,YY的账号和密码输入框,你试试,你获得它句柄也没用!得到输入框的句柄后,SendKeys没用,用剪贴板复制粘贴也没用,KeyPress也没用...对付这些有点限制的应用软件,用Windows API也是不靠谱的,最好是用到某些高手写的驱动级的键鼠模拟插件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
网海1书生
科技发烧友

2013-06-18 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12310 获赞数:26224

向TA提问 私信TA
展开全部
并不是因为sendkeys不稳定,而是因为它是完全模拟键盘的动作的,而在某一时刻,键盘输入的内容只能被拥有输入焦点的前台控件所接受,因此这很大程度决定于当sendkeys运行时焦点处在什么位置,比如第一次运行时焦点在窗体1的文本框中,第二次运行焦点却在窗体2的一个按钮上,那么两次运行的结果的就会大相径庭,如果拥有焦点的控件本身并不接受键盘输入(比如Label),那么sendkeys发出的键值就会被吞掉,看起来就像完全没起到作用一样。
因此,你必须在运行sendkeys之前确保你要操作的对象拥有输入焦点。
当然,最彻底的解决办法是抛弃模拟键盘输入的方式,通过API函数(FindWindow、GetWindow等)查出要输入字符的控件(如文本框)的句柄,然后直接向这个句柄写入字符(用SendMessage)即可。这种方法,操作对象可以不在前台,甚至隐藏亦可,而且不会对鼠标、键盘的正常操作造成干扰(运行期间鼠标键盘可以做其他工作)。很多游戏外挂、网站登录器、网页采集器等软件就是这样做的。
追问
我写的一个程序sendkeys之前可以用 现在突然不能用了 我测试的时候确定是有焦点的 SendMessage 咋用呢?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式