从autohotkey到Python

来源:互联网 发布:sqlserver 视图 编辑:程序博客网 时间:2024/06/13 19:41

本文给自己看的

打包整理的autohotkey与Python相关文件

云盘地址

ahk会点击鼠标发送按键,还有判定某个点击时机(通过区域找图),就够用了,其他也就是控制系统有点用

Python2.x有ahk的库,也有autopy跨平台用,其他的库都不怎么好用,而3.x只能用win32的api,不太方便



if WinExist("ahk_exe notepad.exe")
    WinActivate, ahk_exe notepad.exe

WinGet, OutputVar [, Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText]
ahk_id 唯一 ID/HWND
ahk_pid 进程 ID
ahk_exe 进程名称、路径
CMD可以是ID,PID,LIST
List: 获取匹配指定的 WinTitle, WinText, ExcludeTitle 以及 ExcludeText 的所有窗口的唯一 ID 号 (要获取整个系统中所有窗口, 请省略所有的四个标题/文本参数). 每个 ID 号保存在以 OutputVar 名称开始的 数组元素 中, 而 OutputVar 自己则保存了获取的项数 (没有则为 0). 例如, 如果 OutputVar 为 MyArray 且找到两个匹配的窗口, 那么 MyArray1 会被设置为首个窗口的 ID, MyArray2 被设置为第二个窗口的 ID, 同时 MyArray 自身被设置为数目 2. 窗口获取的顺序是从最上面到最下面 (根据它们在桌面上的堆放顺序). 只有在打开 DetectHiddenWindows 设置时才会包括隐藏窗口. 在 函数 中, 要创建全局数组而不是局部数组, 必须在使用此命令前 声明 MyArray 为全局变量 (对于 假设全局 函数, 反之亦成).
WinGet, wowid, List, 魔兽世界 ;用的时候controlsend,,键,ahk_id %wowid%
如WinGet,wei,,TITLE
ControlSend,,111,ahk_id  %wei%


上述示例中, 字母 F 将被添加下划线, 这允许用户按下 快捷键 Alt+F 将键盘焦点设置到此文本控件后添加的首个可输入型控件中


Shutdown, 1
logoff 0
Shutdown 1
重启 2
强制 4
断电 8
把需要的值加在一起. 例如, 要关闭并切断电源的代码为 9 (关闭 + 切断电源 = 1 + 8 = 9). 或者, 可以使用 表达式, 例如 1+8.












Gusub语句可以带有   Return,而GOTO不能带


KeyWait     等待按键或鼠标/操纵杆按钮被松开或按下.


IfMsgBox     检查用户在最近的 MsgBox 命令中点击了哪个按钮.


PixelSearch     在屏幕某个区域中搜索指定颜色所在的像素.


SetKeyDelay,0


\. 表示一个原义的句点而 \\ 表示一个原义的反斜线. 使用 \Q...\E 能避免转义. 例如: \QLiteral Text\E.


goto label0
label0:
用GOSUB的话可以带RETURN


 从函数的角度看, 参数本质上是 局部变量, 除非它们被定义为 ByRef, 例如:

Swap(ByRef Left, ByRef Right)
Add(X, Y, Z:=0) {
    return X + Y + Z
}定义函数时, 在最后一个参数后面写一个星号来标记此函数为可变参数的, 这样让它可以接收可变数目的参数:
Join(sep, params*)


要禁用按键而不进行重映射, 请把它设置为只含有 return 的热键. 例如,F1::return 会禁用 F1 键。
下面的两个命令会禁用重映射 a::b。

Hotkey, *a, off
Hotkey, *a up, off



以 "and", "or", ||, &&, 逗号或 句点 开始的行会自动合并到其前一行


此外, 可以使用 /* 和 */ 符号注释整块代码, 但仅当它们出现在行首时才有效, 例如:


click   30,40     right     2      r可以空格可以逗号(左右中键可以用LRM)click,坐标,左右,次数,相对zuobiao


在AutoHotKey.ini文件里, #Include 用这个,意思是载入文件,作用相当于把那个文件内容复制到当前位置,就会只显示一个图标了


MsgBox, 4, , Would you like to continue?
IfMsgBox, No
    return

如何让 热键 或 热字串 只在特定的程序中有效? 换句话说, 在特定的窗口不活动时我想让特定的按键执行它原来的功能.
#IfWinActive, ahk_class Notepad
^a::MsgBox You pressed Control-A while Notepad is active.



F1::Pause用F1暂停


Random, x, 1,100 ; 在1到100之间随机一个值给x,简单吧,先这么地吧


MouseGetPos   x,y   m,    n    ;四个变量,当然都可以省的,但省的时候得留下逗号,这行执行完了后,变量x和y的值就是取得的坐标,m变量为当前鼠标悬停的窗口的ID,n为当前鼠标悬停的控件的名称(ClassNN),估计目前的您还用不着,mn省了吧。


GetKeyState, state, RButton ;得到右键状态,结尾,P的话就是按下了


reload 重启脚本


RunWait     运行外部程序并等待其结束.


WinGetActiveTitle     获取活动窗口的标题.
WinGetClass     获取指定窗口的类名.


WinHide     隐藏指定的窗口.
WinSet     对指定的窗口进行各种设置, 例如 "总在最前面" 和透明度.
WinMove     改变指定窗口的位置和/或大小.
WinKill     强制关闭指定的窗口.
WinClose     关闭指定的窗口.
WinWait     等到指定的窗口出现.
WinWaitActive     等到指定的窗口处于活动状态.
WinWaitClose     等到指定的窗口消失.


#IfWinActive [, WinTitle, WinText]
#IfWinExist [, WinTitle, WinText]
#IfWinNotActive [, WinTitle, WinText]
#IfWinNotExist [, WinTitle, WinText]
#If [, Expression]这样的热键会根据窗口是否活动或存在的不同情况执行不同的动作(或什么都不做)。#IfWinActive ahk_class Notepad
a::b  ; 让 'a' 键到 'b' 键的映射仅在记事本中有效.
#IfWinActive  ; 这里让后续的重映射和热键对所有窗口生效.


~保留原作用 *遇到就激活 $避免发送的命令有热键本身
热字串里有*就是不用结束符,如:*:btw::by the way,其他功能有B0不删热键词,C大小写敏感,O是结束符只起作用但不显示,Z很重要是用来避免热字串被重用(比如111是两次11而有Z时1111是2次11)


ControlClick [, Control-or-Pos, WinTitle, WinText, WhichButton, ClickCount, Options, ExcludeTitle, ExcludeText]后台点击如ControlClick, x55 y77, WinTitle


ControlSetText, Edit1, New Text Here, ahk_class Notepad和下头的不一样,全改掉,而
ControlSend, Edit1, This is a line of text in the notepad window., hk_class Notepad


CoordMode, ToolTip|Pixel|Mouse|Caret|Menu [, Screen|Relative]区分相对坐标和屏幕坐标


Return     从子程序返回到之前通过 函数调用, Gosub, 激活 Hotkey, GroupActivate 或其他方式执行跳转的地方.


StringReplace, clipboard, clipboard, `r`n, , All去掉剪贴板里的换行


TrayTip [, Title, Text, Seconds, Options]时间没用,不如用sleep,option包括1: Info icon 2: Warning icon 3: Error icon


Var = value     把指定的值赋给 变量.
Var := expression     计算 表达式 并把结果保存到 变量.


 while循环
while GetKeyState("LButton")
    {
        MouseGetPos, x, y
        ToolTip, % begin_x ", " begin_y "`n" Abs(begin_x-x) " x " Abs(begin_y-y)
        Sleep, 10
    }


if (x < y)
{
}else{
}

如果是IF X就是有非零值就TRUE


clipboard=%clipboard% ;%null%
; 这句还是废话一下:windows 复制的时候,剪贴板保存的是“路径”。只是路径不是字符串,只要转换成字符串就可以粘贴出来了。


ImageSearch, FoundX, FoundY, 40,40, 300, 300, C:\My Images\test.bmp

CoordMode Pixel  ; Interprets the coordinates below as relative to the screen rather than the active window.
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *Icon3 %A_ProgramFiles%\SomeApp\SomeApp.exe
if ErrorLevel = 2
    MsgBox Could not conduct the search.
else if ErrorLevel = 1
    MsgBox Icon could not be found on the screen.
else
    MsgBox The icon was found at %FoundX%x%FoundY%.

2、MsgBox命令按钮有几种类型?
OK—0
OK/Cancel—1
Abort/Retry/Ignore—2
Yes/No/Cancel—3
Yes/No—4
Retry/Cancel—5
Icon Hand (stop/error)—16
Icon Question—32
Icon Exclamation—48
Icon Asterisk (info)—64
Make 2nd button the default—256
Make 3rd button the default—512
System Modal (always on top) —4096
Task Modal—8192 这些参数允许相加而得到复合效果。

3、显示含有yes/no按钮并总在顶端的对话框?
msgbox,4100,标题,内容




Loop %RunCount%
{
Run C:\Check Server Status.exe
Sleep 60000  ; 等待60秒
}
在上面的例子中,脚本将进行指定的循环次数,除非变量RunCount的值为0,这个循环才会完全跳过(结束)。
另外也可以设置循环在一个或多个条件发生改变的时候中止,例如下面这个例子:
Loop
{
PixelGetColor, Color, 11, 22 ;获取屏幕指定位置的象素颜色
if Color = 0xEEAA99  ; 如果上面获得的值符合此行指定的值
break  ; 中止此次循环
; 否则,点击下面指定的按钮,直到象素改变颜色(为指定的值)
ControlClick, OK, 目标窗口的标题

利用 PixelSearch(象素搜寻) 和 PixelGetColor(象素色彩)命令来实现游戏动作的自动化。

RControl::
IfWinActive, 无标题.txt - 记事本
{
  WinMenuSelectItem, , , 文件, 另存为
}
else IfWinActive, 计算器
{
  Send, ^c!{tab}^v
}
return


FileReadLine, OutputVar, Filename, LineNum


使用 InputBox(输入框)命令来提示用户输入字串。使用 FileSelectFile 或 FileSelectFolder 让用户选择文件或文件夹。如果需要更高级的功能,请使用 Gui(用户界面) 命令来创建自定义的数据输入表格和用户界面。


特殊字符: A_Space, A_Tab
脚本属性: 命令行参数, A_WorkingDir, A_ScriptDir, A_ScriptName, (...更多...)
日期和时间: A_YYYY, A_MM, A_DD, A_Hour, A_Min, A_Sec, (...更多...)
脚本设置: A_IsSuspended, A_BatchLines, A_TitleMatchMode, (...更多...)
用户空闲时间: A_TimeIdle, A_TimeIdlePhysical
GUI 窗口和菜单栏: A_Gui, A_GuiControl, A_GuiEvent, A_EventInfo
热键, 热字串和自定义菜单项: A_ThisHotkey, A_EndChar, A_ThisMenuItem, (...更多...)
操作系统和用户信息: A_OSVersion, A_ScreenWidth, A_ScreenHeight, (...更多...)
杂项: A_Cursor, A_CaretX, A_CaretY, Clipboard, ClipboardAll, ErrorLevel
循环: A_Index, (...更多...)




#o::  ; Win+O 热键关闭显示器.
Sleep 1000  ; 让用户有机会释放按键 (以防释放它们时再次唤醒显视器).
; 关闭显示器:
SendMessage, 0x112, 0xF170, 2,, Program Manager  ; 0x112 为 WM_SYSCOMMAND, 0xF170 为 SC_MONITORPOWER.
; 对上面命令的注释: 使用 -1 代替 2 来打开显示器.
return
#p::
Sleep 1000  ; 让用户有机会释放按键 (以防释放它们时再次唤醒显视器).
; 关闭显示器:
SendMessage, 0x112, 0xF170, -1,, Program Manager  ; 0x112 为 WM_SYSCOMMAND, 0xF170 为 SC_MONITORPOWER.
; 对上面命令的注释: 使用 -1 代替 2 来打开显示器.

0 0