想做一个 Windows 上的 Vimium,但是有个功能想不出来怎么实现,请求指教

2018-11-01 22:45:25 +08:00
 rpish

大家应该都用过 Chrome 上 Vimium 插件吧 可以实现纯键盘操控浏览器,我想在 Windows 下也实现这样一个软件来实现纯键盘操控电脑。 但是被一个功能难住了,该怎么像 vimium 一样按 F 之后识别桌面和任务栏所有图标呢? 有 WindowsAPI 可以实现这个功能吗?还是得做图像识别?

3544 次点击
所在节点    奇思妙想
10 条回复
ob
2018-11-01 23:26:17 +08:00
已经有人用 ahk 实现了类似的功能,具体叫啥忘记了,label 什么的吧,就是按一个键,所有的窗口,或焦点都给一个字母编号,按某个字母对应聚焦或触发点击。
具体网上搜下。。
codehz
2018-11-01 23:32:58 +08:00
你可以看看辅助功能相关的 API
PS: 我只知道有这个东西,具体没用过
billlee
2018-11-01 23:39:40 +08:00
billlee
2018-11-01 23:40:07 +08:00
看错了,忽略
geelaw
2018-11-01 23:53:21 +08:00
如果你想识别任务栏所有的程序,你可以 follow Windows 的文档 https://docs.microsoft.com/en-us/windows/desktop/shell/taskbar#managing-taskbar-buttons

但是我强烈不建议你这样做,因为逻辑非常复杂,很难正确实现。

另一个方式是使用 Automation API,但是如何确保你目前在桌面上是个问题。

——————

或者不要重复造轮子,因为所有的 Windows 自带的软件都是可以键盘完成所有基本任务的(否则这是一个 accessibility bug,我觉得盲人基本上不会用鼠标)。

当然有些神奇的软件会做成完全不可访问的样子——比如微信。它的 accessibility 如此之差,令我怀疑他们是不是自己造了一个 windowless UI framework,但是完全没有实现 dialog navigation 和 automation peer。
milu123
2018-11-02 00:03:04 +08:00
在 Windows 上先 FindWindow,然后用 UIAutomation。
在 OSX 我有做过一个 demo。https://github.com/mario206/Assistant

注意,界面控件很多的时候,枚举控件会很慢。
xml123
2018-11-02 09:11:03 +08:00
@ob #1 LabelControl,效果其实一般,因为有枚举不到的控件。
桌面系统想要纯键盘操作舒服还是挺困难的。另一个思路是 VimDesktop,针对不同的软件绑定相应的快捷键。如果只是手不离开键盘,小红点考虑一下?
chaker
2018-11-02 13:09:54 +08:00
ls ~/Desktop/*
nicevar
2018-11-04 10:47:23 +08:00
额。。。windows 一直都能纯键盘操作,也很舒服,十来年前就习惯了,首字也能定位,你做类似用 F 定位链接那样意义不大,一个 everything 方便多了
skyemm
2018-11-11 23:52:53 +08:00
有一个桌面管理器叫 i3wm,可以试一下移植到 windows

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

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

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

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

© 2021 V2EX