请教关于 Windows 软键盘类型软件的特殊窗口原理

2017-03-03 11:51:35 +08:00
 nfroot
首先必须说的是,真的不知道以什么关键词去谷歌搜.

首先,软键盘的打开方式“开始菜单》运行》 osk+回车”

出来的这个软件就是屏幕键盘,代替键盘去操作电脑,俗称软键盘(吃软饭的)。

这个窗口很有特点,就是点击这个窗口上的按钮(软键盘),原窗口不会失去焦点,而且不是瞬间失去焦点马上返回原窗口,而是原窗口根本没失去焦点。


举个例子,我们在修改文件名的时候,输入文字后点击了其他窗口,或者快捷键切换到了其他软件的窗口,那么文件名就会马上保存(相当于你确认了这个文件名),但是在软键盘上点击,无论多少次,多长时间,“当前窗口”一直是原窗口,当前窗口不会变到软键盘的这个窗口。



是不是懵逼了?我就是想做一个小工具,用的时候希望能像软键盘那样保持原来的窗口,但是很显然不知道如何去实现,因为只要一点击我的工具的窗口,“当前窗口”马上就变成工具所在的窗口了。

如果还不明白,那就当要做一个软键盘,但是输入的时候不能让原窗口失去焦点(显而易见的例子就是修改文件名的这类,焦点一离开窗口就确认操作了)


发一个图希望您能明白……

1929 次点击
所在节点    问与答
7 条回复
nfroot
2017-03-03 11:53:01 +08:00
其实在意这个问题很久了,一直想知道其原理,至于模拟按键不是什么难事,我想知道的不是这个。
wafm
2017-03-03 12:05:27 +08:00
hook api
nfroot
2017-03-03 13:44:09 +08:00
@wafm 这回复也太简单了吧……
wafm
2017-03-03 14:44:49 +08:00
@nfroot 屏幕键盘这种的话 一般需要全局 HOOK ,比如子类化 SetWindowlong

一般程序的话 关键在于注入了 注入该程序 子类化 基本上可以随你用键盘操作了

关于焦点问题 Windows 下 SetFocus 一般是常用的设置焦点的 API

缺点就是 你这么 HOOK 杀毒软件一定拦截你的操作
levie
2017-03-03 15:08:05 +08:00
只是不丢失焦点的话,加 WS_EX_NOACTIVATE 就好了啊 = =
nfroot
2017-03-03 16:48:45 +08:00
@wafm
@levie
谢谢
helixzz
2017-03-03 19:56:29 +08:00
mark

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

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

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

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

© 2021 V2EX