AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1480188
Accepted
Arctiic
Arctiic
Asked: 2019-09-09 00:03:55 +0800 CST2019-09-09 00:03:55 +0800 CST 2019-09-09 00:03:55 +0800 CST

如何创建 .ahk(或类似)热键来执行程序特定的操作?

  • 772

我是 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”!有没有办法直接调用该函数?

notepad++ autohotkey
  • 1 1 个回答
  • 481 Views

1 个回答

  • Voted
  1. Best Answer
    JJohnston2
    2019-09-09T22:13:12+08:002019-09-09T22:13:12+08:00

    我理解所概述的问题,这很有意义,因为我已经尝试(并成功)使用不同的程序在不同程度上做到了这一点。

    有几种方法可以做你所追求的,在下面按复杂度递增的顺序列出(在我看来)......

    WinMenuSelectItem

    对于初学者来说,不太理想的方法是WinMenuSelectItem用于具有标准 Windows 菜单的程序(例如,与功能区相比)。

    这种方法可以避免为了触发现有菜单选项而必须发送所有击键。然而,让这些WinMenuSelectItem命令工作有时很棘手,如果它不能正常工作(变成试错法),调试起来可能不是那么简单。有时我完全放弃了尝试完成这项工作并重新使用击键。

    但是,一旦给定函数使用此方法,窗口不一定必须处于活动状态才能执行它,这很好。

    PostMessage/SendMessage

    标准 Windows 程序的第二种方法是使用PostMessageor SendMessage。使用 Windows 检查器(Spy++?还有其他流行的,但我不记得名字了。也许是 Sysinternals 工具之一?),您可以记录这些消息并查看手动执行时菜单功能触发的内容,然后发送该消息。您基本上会记录所有窗口消息,然后仅过滤该窗口以查看发送的内容,然后尝试在代码中复制它。

    这可能是一个不好的例子,但是一个使用 SendMessage 的随机代码片段:

    SendMessage, % TCM_SETCURFOCUS:=0x1330,1 ,          , SysTabControl321, % helpWinTitle
    SendMessage, % WM_SETTEXT:=0x0C       ,  , &HelpItem, Edit1,            % helpWinTitle   ; Edit1 = Search Tab search
    SendMessage, % WM_KEYDOWN:=0x100      ,13,          , Edit1,            % helpWinTitle
    

    COM 对象

    对于 Microsoft Office 类型的程序,获得“幕后”的最佳方式是通过 COM 对象进行连接,然后基本上公开所有已在 VBA 中可用的对象模型。这对于在 Word/Excel/等中执行您需要的任何操作非常有用。因为你可以只查找它的 VBA 代码,然后在 AutoHotkey 中实现一个等效的代码来完成特定的任务。另一个优点是它不需要启用宏权限即可连接到程序并执行某些操作,它 [Word/Excel/etc.] 只需运行即可。

    可访问性

    最后但同样重要的是,可访问性可用于查找和执行不在标准菜单中但存在于程序或工具栏的 GUI 布局中的功能。这通常更高级和乏味,但可以找到“幕后”的东西,否则如果不使用击键/鼠标点击,您可能无法执行。

    通常,您需要使用可访问性树查看器来挖掘特定的 GUI 设置以找到您想要执行的内容,然后将树引用传递给将调用该函数的代码,“按下”或“单击”按钮等。这在不使用标准 Windows 控件并且NETUIHWND1在运行 Window Spy 时将鼠标悬停在控件上时只需获得参考的情况下最有用。可访问性允许您实际深入了解其结构,NETUIHWND1以便在其中查找和/或执行某些内容(文本、按钮等)

    概括

    可以做到吗?是的。显然,其中一些选项涉及很多编程,但如果您要搜索 AutoHotkey 帮助文件和论坛,我建议您从这些主题开始。

    • 2

相关问题

  • 在 Notepad++“另存为...”对话框中保留当前文件类型/扩展名

  • 计算文本字符串中的逗号并添加新行

  • 删除信息

  • Notepad++ 删除直到冒号替换所有行

  • NotePad++ 用户定义语言不显示条件语句

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    Windows 10 服务称为 AarSvc_70f961。它是什么,我该如何禁用它?

    • 2 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Marko Smith

    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)

    • 4 个回答
  • Marko Smith

    我如何知道 Windows 安装在哪个驱动器上?

    • 6 个回答
  • Martin Hope
    Albin 支持结束后如何激活 WindowsXP? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Ctrl+C 和 Ctrl+V 是如何工作的? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve