当使用自动热键脚本/批处理文件激活窗口时,如何单击超链接文本自动

时间:2017-01-25 07:00:32

标签: batch-file autohotkey

我是自动热键脚本的新手,任何人都可以帮助我如何使用自动热键脚本/批处理文件点击超链接文本。

我的要求是:

右键单击桌面 - >在屏幕分辨率屏幕中 - >高级设置。因此,当我运行自动热键脚本时,我想自动单击“高级设置”链接。请找到下面的图片:

Display Settings

请使用鼠标光标找到我的下面的代码..我已经通过鼠标光标实现但我不认为这将是最终的解决方案。

#SingleInstance force
#persistent

Run,Desk.cpl
SetTimer, Check, 100
return

Check:

IfWinActive, ahk_class CabinetWClass
MouseMove, 658, 368
Click  
Sleep, 1000

IfWinActive, ahk_class #32770
MouseMove, 212, 64
Click  
Sleep, 1000

IfWinActive, ahk_class #32770
MouseMove, 93, 360
Click  
Sleep, 1000

IfWinActive, ahk_class #32770
MouseMove, 81, 392
Click  
Sleep, 1000

IfWinActive, ahk_class #32770
ControlClick,&Apply,ahk_class #32770

IfWinActive, ahk_class #32770
ControlClick,OK,ahk_class #32770

IfWinActive, ahk_class #32770
ControlClick,&Yes,ahk_class #32770

IfWinActive, ahk_class CabinetWClass
ControlClick,OK,ahk_class CabinetWClass

IfWinNotExist, ahk_class CabinetWClass {

ExitApp

return

}

1 个答案:

答案 0 :(得分:1)

此AutoHotkey脚本使用Microsoft Active Accessibility(MSAA)直接调用超链接。

此脚本根据需要打开窗口,并使用直接方法设置True Color(32位)(在Windows 7上测试),而不是通过向坐标发送单击。

注意:脚本需要Acc.ahk Acc库(MSAA)和AccViewer下载链接 - AutoHotkey社区
here

注意:在我的例子中,弹出窗口的窗口标题是'(多个监视器)和英特尔(R)HD图形系列属性', 如果您的窗口具有不同的标题,则可能需要在脚本中更改此内容。

q:: ;set True Color (32 bit) (tested on Windows 7)
windir := A_WinDir
vTarget = %windir%\system32\control.exe desk.cpl,Settings,@Settings
Run, %vTarget%
WinWaitActive, Screen Resolution ahk_class CabinetWClass

ControlGet, hCtl, Hwnd, , DirectUIHWND4, Screen Resolution ahk_class CabinetWClass
oAcc := Acc_Get("Object", "4.1.1.14", 0, "ahk_id " hCtl)
if (oAcc.accName(0) = "Advanced settings")
oAcc.accDoDefaultAction(0)

vWinCriteria = (Multiple Monitors) and Intel(R) HD Graphics Family Properties ahk_class #32770
WinWaitActive, %vWinCriteria%
WinGet, hWnd, ID, %vWinCriteria%
SendMessage, 0x1330, 1, , SysTabControl321, ahk_id %hWnd% ;TCM_SETCURFOCUS := 0x1330
Control, ChooseString, True Color (32 bit), ComboBox2, ahk_id %hWnd%

ControlGetText, vText, Button5, ahk_id %hWnd%
if (vText = "OK")
ControlClick, Button5, ahk_id %hWnd%

MsgBox % "done"
Return

有用的链接:
执行控制面板项目(Windows)
https://autohotkey.com/boards/viewtopic.php?f=6&t=26201

控制面板项目的规范名称(Windows)
https://msdn.microsoft.com/en-us/library/windows/desktop/cc144191(v=vs.85).aspx

[通过搜索找到:AutoHotkey“真彩色(32位)”] 双显示切换(显示属性替换) - 脚本和功能 - AutoHotkey社区
https://msdn.microsoft.com/en-us/library/windows/desktop/ee330741(v=vs.85).aspx

[编辑:]
[通过搜索找到:AutoHotkey DEVMODE]
[求助]如何一次更改两个监视器的分辨率? - AutoHotkey社区
https://autohotkey.com/board/topic/22372-dual-display-toggle-display-properties-replacement/

该链接有一个自定义函数ChangeDisplaySettings, 这可能会做你想要的,(但我会敦促你 在执行代码之前彻底检查代码):

ChangeDisplaySettings(False, 32)

注意:它可能仅适用于32位版本的AutoHotkey (可以在64位Windows上运行。)

[编辑2:]
我写了一些代码来查询而不是设置值:

w:: ;get display data
vSizeTCHAR := A_IsUnicode ? 64 : 32
vSizeDEVMODE := 92 + (vSizeTCHAR * 2)
vOffsetBitsPerPel := 40 + (vSizeTCHAR * 2) ;dmBitsPerPel

;ENUM_CURRENT_SETTINGS := -1 
;ENUM_REGISTRY_SETTINGS := -2
VarSetCapacity(DEVMODE, vSizeDEVMODE, 0)
vRet := DllCall("EnumDisplaySettings", Ptr,0, UInt,-1, Ptr,&DEVMODE)

MsgBox % NumGet(DEVMODE, vOffsetBitsPerPel, "UInt")
Return

祝你好运!