AutoHotKey神器的使用

最近利用AutoHotKey這個神器,寫了幾個腳本,自動化完成了平時工作中的一部分繁瑣又重複的事情。總結一下編寫腳本中遇到的問題:

             注意:腳本運行不正確,可能是文件編碼不兼容,存爲UTF-8 試試^_^

給腳本加上運行圖標

icon.ico和腳本要放到同一個文件夾裏

IfExist, icon.ico
{
Menu TRAY, Icon, icon.ico
}


AutoHotKey中熱鍵腳本里調用其它熱鍵

使用Gosub,把熱鍵當做標籤使用。

Gosub #s  ;#s是win+S熱鍵
發送指令 Send 發送Win、Alt、Ctrl鍵的時候使用#、!、^,而不是{Alt}這種,

把.ahk文件打包成.exe文件

使用自帶的Convert .ahk to .exe即可,還可以設置程序圖標,如果想讓exe程序雙擊就運行的話,可以把#g:: 這個設置的熱鍵直接刪除。


我寫的腳本:

從服務器get新版本解壓到本地目錄

SetTitleMatchMode, MatchMode
SetTitleMatchMode, Fast|Slow
這是WinTitle 參數的匹配模式。一般必帶!

#g::  ;熱鍵是Windos鍵+G
SetTitleMatchMode, 2  
SetTitleMatchMode, slow  
IfWinNotExist,Q-Dir 5.70  ;這句話要想起作用,前面兩句必須加!  
    Run C:\Program Files\Q-Dir\Q-Dir.exe  
Path = D:\work\release  
TimeNow = %A_YYYY%%A_MM%  ;%A_DD% 獲取現在的年月,因爲文件名是年月日組合,防止某日的所有編譯都不成功,所以採用年月組合
FileList =  ;初始爲空
FileName =    
rar = %A_ProgramFiles%\WinRAR\WinRAR.exe  
Loop,\\192.168.1.111\方案設計師\Main\%TimeNow%*.*,1,0  ;找到所有包含今天年月名的文件夾
    FileList = %FileList%%A_LoopFileName%`n  ;`n是換行符
Sort, FileList,R  ;逆序排列  
Loop, parse, FileList, `n  ;解析字符串,讀取FileList  
{  
    if A_LoopField =  ;忽略列表末尾的空項.  
        continue  
    FileName = %A_LoopField% ;
    IfExist,\\192.168.1.111\方案設計師\Main\%FileName%\%FileName%.release.pdb.rar ;判斷文件是否存在,因爲有編譯不成功的情況
        break  
}  
SetWorkingDir,\\192.168.1.111\方案設計師\Main\%FileName%\ 
FileGetTime,OutputVar,%FileName%.release.pdb.rar,c ;獲取文件時間戳  
Loop, read, %Path%\更新歷史.txt  
    last_line := A_LoopReadLine ;獲取文本文件的最後一行,這裏存着上次更新的文件的時間戳
if ( last_line = OutputVar )  
{  
    msgbox,4,,%FileName%:爲最新可用文件夾,本地文件與服務器一致耶! `n`n按Y:將只拷貝“更新”文件夾下的DLL文件(如果有的話:D)...`n`n按N:我好閒,讓我們再更新一次吧!  
    IfMsgBox Yes  
    {  
                IfExist,\\192.168.1.111\方案設計師\Main\%FileName%\更新\  
        {  
            FileCopy,\\192.168.1.111\方案設計師\Main\%FileName%\更新\*.dll,%Path%\bin  
            MsgBox,更新dell成功  
            return  
        }  
        else  
        {  
            MsgBox,48,,嘛也沒有,白忙活一趟:-(  ;a joke ^_^
        }  
        return  
    }  
    else  
    {  
        Gosub GetV  
        FileAppend,%OutputVar%`n,%Path%\更新歷史.txt  ;把剛更新的文件的時間戳寫入txt的最後一行,方便下次讀取比對
    }         
}  
else  
{  
    Gosub GetV  
    FileAppend,%OutputVar%`n,%Path%\更新歷史.txt  ;寫入  
}  
return  
  
  
;Gosub的標籤  
GetV: ;獲取方案設計師版本  
RunWait,%rar% X -o+  %FileName%.release.pdb.rar %Path% ;解壓的命令行  
IfExist,\\192.168.1.111\方案設計師\Main\%FileName%\更新\  
{  
    FileCopy,\\192.168.1.111\方案設計師\Main\%FileName%\更新\*.dll,%Path%\bin  
}  
SoundPlay, %A_WinDir%\Media\ding.wav  
return

Visual Studio調試方案設計師

Visual Studio調試,自動編譯後打開方案設計師加載上次的bdn文件,然後鼠標點擊出圖,同時以不保存的形式關閉CAD中所有打開的圖紙。複雜的是考慮了各種調試期間的情況。取得VS現在的狀態,靠的是檢測左下角的提示信息文本。需要注意各個操作之間間隔時間不能太短,否則界面反應不過來。

;一鍵調試腳本!
#s::  ;Windows鍵+S 
SetTitleMatchMode, 2
SetTitleMatchMode, slow
IfWinExist,THLGaiLiangGJ - Microsoft Visual Studio,,(Running),  ;Visual Studio不在調試中的情況
{
	WinActivate
	Send ^{F7} ;Ctrl+F7 編譯
	WinWait, - Microsoft Visual Studio,,,,Build started... ;等待含有Build started文本的窗口結束
	sleep 200
	WinWait, - Microsoft Visual Studio,Build succeeded,2,,
	IfWinExist, - Microsoft Visual Studio,Build succeeded,,
	{
		Send {F5}
		WinWait, 方案設計師V3.0
		Gosub,OpenBDN
		Gosub,Draw
		return
	}
	else
	{
		Gosub,SoundError
		return
	}
}
else ;Visual Studio在調試中的情況
{
	IfWinActive,(Running) - Microsoft Visual Studio,, ;如果Visual Studio窗口是當前是活動的窗口
	{
		IfWinExist,(Running) - Microsoft Visual Studio,.cpp*, ;.cpp文件代碼有改動且未保存
		{
			Send ^+{F5} ;Ctrl+Shift+F5 重啓調試
			sleep 1000
			WinWait, - Microsoft Visual Studio,,,,Build started...
			sleep 200
			IfWinExist,,There were build errors. ;如果Build Error
			{
				Gosub,SoundError
				return
			}
			else
			{
				IfWinNotExist,There were build errors.
				{
					WinWait,方案設計師V3.0
					Gosub,OpenBDN
					Gosub,Draw
					return
				}
				else ;未取到任何以上窗口文本
				{		
					MsgBox,0,,Not My Thing... ∑( ̄□ ̄) ,
					Gosub,SoundError
					return
				}
			}
		}
		else
		{
			IfWinExist,(Running) - Microsoft Visual Studio,.h*, ;.h文件代碼有改動且未保存
			{
				Send ^+{F5} ;Ctrl+Shift+F5 重啓調試
				sleep 1000
				WinWait, - Microsoft Visual Studio,,,,Build started...
				sleep 200
				IfWinExist,,There were build errors. ;如果Build Error
				{
					Gosub,SoundError
					return
				}
				else
				{
					IfWinNotExist,There were build errors.
					{
						WinWait,方案設計師V3.0
						Gosub,OpenBDN
						Gosub,Draw
						return
					}
					else ;未取到任何以上窗口文本
					{		
						MsgBox,0,,No Error! :) ,
						Gosub,SoundSucceed
						return
					}
				}
			}
			else ;文件無改動,如下斷點
			{
				IfWinExist,方案設計師V3.0 - [D:\
				{
					WinActivate
					Gosub,Draw
					return
				}
				else
				{
					WinActivate,方案設計師V3.0,
					Gosub,OpenBDN
					Gosub,Draw
					return
				}
			}
		}
	}
	else
	{
		IfWinExist,方案設計師V3.0 ;如果未改動代碼僅重新出圖
		{
			WinActivate
			IfWinExist,方案設計師V3.0 - [D:\
			{
				Gosub,Draw
				return
			}
			else
			{
				Gosub,OpenBDN
				Gosub,Draw
				return
			}
		}
		else
		{
			MsgBox,0,,Have a rest! Enjoy! :-),
			Gosub,SoundSucceed
			return
		}
	}
}
return

OpenBDN:
SetTitleMatchMode, 2
SetTitleMatchMode, slow
WinMaximize
MouseClick, left, 40,40  ;相對座標,座標原點爲激活窗口的左上角
sleep 100
MouseClick, left, 100,265  ;相對座標,座標原點爲激活窗口的左上角
WinWait, ,打開項目成功!,
WinWait, ,就緒,
sleep 100
return

Draw:
SetTitleMatchMode, 2
SetTitleMatchMode, slow
WinMaximize
MouseClick, right, 200,805  ;相對座標,座標原點爲激活窗口的左上角
sleep 200
MouseClick, left, 310, 630  ;相對座標,座標原點爲激活窗口的左上角
sleep 200
;啓動構件出圖...
WinWait, ,系統即將啓動構件繪圖,請不要修改構件數據!,2, , ;超時前等待2秒
sleep 100
Send {space}
Gosub,CloseAllCAD
WinWait,方案設計師V3.0,,1200,,啓動構件出圖... ;超時前等待120秒
IfWinExist,方案設計師V3.0,構件出圖結束,,,
{
	Gosub,RunCAD
	Gosub,SoundSucceed	
}
else
{
	Gosub,SoundError
}
return

CloseAllCAD:
IfWinExist,AutoCAD 2008 - [D:\
{
	WinActivate
	Send closeall{Enter}
	sleep 100
	Loop
	{
		IfWinExist,AutoCAD,是否將改動保存到
			send n
		sleep 1000
		IfWinNotExist,AutoCAD,是否將改動保存到
			break
	}
	IfWinExist 方案設計師V3.0
		WinActivate
}
return

RunCAD:
Run D:\L形蓋樑鋼筋_鋼筋設計圖紙.dxf
Run D:\work\L蓋樑\LCapBeamV4\Drawing\L形蓋樑柱式墩\L形蓋樑鋼筋構造圖.dxf
return

SoundSucceed:  ;成功提示音
Loop 3
{
    SoundPlay, %A_WinDir%\Media\ding.wav
    sleep 1000
}
return

SoundError:  ;錯誤提示音
Loop 3
{
    SoundPlay,*16
    sleep 1000
}
return


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章