我是 AHK 用户,没有真正的计算机编程背景或教育(我想 Excel 将是我所拥有的最接近此类知识/经验的东西,不包括第一天hello, world
在这里和那里的接触,或cmd
/ VB6 waaay回到当天)。对于我的许多日常任务和工作流程,我采用了 AHK,但我使用脚本的方式一直是输入文字;换句话说,主要只是模拟产生特定的、肤浅的键输入序列的击键输入。
从某种意义上说,这是因为我可以在几乎没有学习曲线的情况下使用 AHK - 除了其他便利之外 - 但显然有与专业人士齐头并进的缺点。因此,我最近对 AHK 是否能够直接接口和调用特定于程序的操作感到好奇?
概念示例
让我们以 Notepad++ 为例(为了示例的缘故,我们假设它没有任何本机功能来实现这一点)。我想设置一个热键来复制、剪切和粘贴二进制内容。如果可能的话,我应该如何创建脚本?
推测性概念
作为我粗略收集信息的一部分,我确实尝试过跑步psr.exe
,看看是否能够捕捉到任何有用的信息。不幸的是,我没有足够的知识来使用结果,但我认为可能有一些方法类似于捕获后端发生的事情,就像人们可能使用keyboard hook
捕获非标准键输入一样. 我已经在这里托管了结果数据,以备不时之需。
编辑:为了澄清任何混淆,我不是指关于脚本触发条件的条件特异性(例如,#winactive
)。在不引起更多混乱并导致我认为过于复杂的情况下,要描述比我已经拥有的更进一步有点困难,但是如果我必须举一个类似的例子,那么我想要实现的目标可以与执行程序进行粗略的比较使用特定的参数example.exe -function -parameter
,而不是自动化运行过程,example.exe
然后通过预先确定的击键Alt + F, F, P
通过 UI 导航到所述示例函数。
编辑#2:好吧,显然我仍然没有正确传达我的问题的含义。在我放弃之前,我会再做一次尝试。
样本目标:
- 创建调用此函数的热键:
- 我目前这样做的方式:
- 分配触发
send
输入序列的热键Alt + E, P, P, C, Enter
- 分配触发
- 我想做的方式:
- 分配直接调用该
Copy Binary Content
功能的热键。
- 分配直接调用该
- 挑战:确定哪个 AHK 函数实现了这一点(例如,
DllCall
?),并枚举函数的正确和可用的标识符/参数 - 使用 PSR.exe 会记录以下操作:
...第 1 步:用户左键单击“*ne”程序中的“编辑(菜单项)”:NOTEPAD++.EXE UI 元素:编辑、应用程序、*new 1 - Notepad++ [Administrator]、Notepad++
第 2 步:用户左键单击“复制二进制内容(菜单项)”程序:NOTEPAD++.EXE UI 元素:复制二进制内容、选择性粘贴、#32768、*new 1 - Notepad++ [Administrator]、Notepad++...
注意“#32768”!有没有办法直接调用该函数?
我理解所概述的问题,这很有意义,因为我已经尝试(并成功)使用不同的程序在不同程度上做到了这一点。
有几种方法可以做你所追求的,在下面按复杂度递增的顺序列出(在我看来)......
WinMenuSelectItem
对于初学者来说,不太理想的方法是
WinMenuSelectItem
用于具有标准 Windows 菜单的程序(例如,与功能区相比)。这种方法可以避免为了触发现有菜单选项而必须发送所有击键。然而,让这些
WinMenuSelectItem
命令工作有时很棘手,如果它不能正常工作(变成试错法),调试起来可能不是那么简单。有时我完全放弃了尝试完成这项工作并重新使用击键。但是,一旦给定函数使用此方法,窗口不一定必须处于活动状态才能执行它,这很好。
PostMessage/SendMessage
标准 Windows 程序的第二种方法是使用
PostMessage
orSendMessage
。使用 Windows 检查器(Spy++?还有其他流行的,但我不记得名字了。也许是 Sysinternals 工具之一?),您可以记录这些消息并查看手动执行时菜单功能触发的内容,然后发送该消息。您基本上会记录所有窗口消息,然后仅过滤该窗口以查看发送的内容,然后尝试在代码中复制它。这可能是一个不好的例子,但是一个使用 SendMessage 的随机代码片段:
COM 对象
对于 Microsoft Office 类型的程序,获得“幕后”的最佳方式是通过 COM 对象进行连接,然后基本上公开所有已在 VBA 中可用的对象模型。这对于在 Word/Excel/等中执行您需要的任何操作非常有用。因为你可以只查找它的 VBA 代码,然后在 AutoHotkey 中实现一个等效的代码来完成特定的任务。另一个优点是它不需要启用宏权限即可连接到程序并执行某些操作,它 [Word/Excel/etc.] 只需运行即可。
可访问性
最后但同样重要的是,可访问性可用于查找和执行不在标准菜单中但存在于程序或工具栏的 GUI 布局中的功能。这通常更高级和乏味,但可以找到“幕后”的东西,否则如果不使用击键/鼠标点击,您可能无法执行。
通常,您需要使用可访问性树查看器来挖掘特定的 GUI 设置以找到您想要执行的内容,然后将树引用传递给将调用该函数的代码,“按下”或“单击”按钮等。这在不使用标准 Windows 控件并且
NETUIHWND1
在运行 Window Spy 时将鼠标悬停在控件上时只需获得参考的情况下最有用。可访问性允许您实际深入了解其结构,NETUIHWND1
以便在其中查找和/或执行某些内容(文本、按钮等)概括
可以做到吗?是的。显然,其中一些选项涉及很多编程,但如果您要搜索 AutoHotkey 帮助文件和论坛,我建议您从这些主题开始。