随身固态U盘内的文件(2018年10月14日修改并测试)(第6次修改)作者:徐晓亮 ( aahk )QQ595076941

随身固态U盘内的文件(2018年10月14日修改并测试)(第6次修改)作者:徐晓亮 ( aahk )QQ595076941

 

本次修改了Notepad++的文本文件自动创建位置设定,便于文本文件的长期统一管理

文本文件内容搜索可以借助”FileLocator Pro(全文搜索工具)”来对正文内容的快速搜索

 

这次有几处字母大小写写错了改一下,Notepad++的文本打开也改进了一下,语言语法也有些小改动,会影响到执行效果所以还是改了一下。

 

; 随身固态U盘内的文件
; (2018年10月14日修改并测试)
; (第6次修改)
; 作者:徐晓亮 ( aahk )
; QQ595076941
;
;
;
; 本次修改了Notepad++的文本文件自动创建位置设定,便于文本文件的长期统一管理
;
; 文本文件内容搜索可以借助"FileLocator Pro(全文搜索工具)"来对正文内容的快速搜索

; 01_此脚本说明
; 此脚本的标题 := 自定义无窗口全局快捷键.ahk
; 此脚本的文件名(见标题栏) := S:\03-自定义无窗口全局快捷键.ahk
; 本文最后修改时间(通过WT空格填写,见文件属性):= 2018年10月13日18时22分
; 本文作者 := 徐晓亮
; 作者昵称 := aahk
; 作者腾讯QQ邮箱地址 := 595076941@qq.com
; 本文作用 := 设置全局无窗口快捷键
; 在SciTE4AutoHotkey中跳转到函数或标签子程序的定义处快捷键是:= 选中函数名后按F12
; 在SciTE4AutoHotkey中跳转到函数或标签子程序的帮助说明快捷键是 := F1
; 为了使得“腾讯微云同步助手PC版”可以正确同步随身网盘中的办公专用文件夹,
; 所以修改U盘盘符为S:,并保持长期固定不变。
; 请把以下柒个文件和一个文件夹S复制到“CHIPFANCIER 1TB USB3.1  随身固态U盘”根目录中

; 01-个人文件转移工具pft.exe
;下载网址 http://doshome.com/yj/down.html
; 02-自动安装AutoHotkey.exe
;下载网址 http://www.autohotkey.com/
; (
;请用单文件打包工具制作成自解压全自动安装包
; AHKSetup.bat
; @Rem 修复.ahk文件类型运行关联
; regedit /s AHKReg.reg
; reg import AHKReg.reg

; Windows Registry Editor Version 5.00
; [HKEY_CLASSES_ROOT\.ahk]
; @="AutoHotkeyScript"
; [HKEY_CLASSES_ROOT\AutoHotkeyScript]
; @="AutoHotkey Script"
; [HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Open\Command]
; @="\"D:\\Pr\\AutoHotkey\\AutoHotkey.exe\" \"%1\" %*"
; )
; 03-自定义无窗口全局快捷键.ahk
;下载网址 http://www.autoahk.com/archives/author/aahk
; 04-改盘符DriveLetterChanger.exe
;下载网址 http://www.so.com/s?q=DriveLetterChanger
; 05-MasterSeeker.exe
;下载网址 http://master-seeker.com/
; 06-Everything.exe
;下载网址 http://www.voidtools.com/
; 07-运行精灵.exe
;下载网址 http://www.andisy.com/runplus.php
; 08-PrimoCache2.2.0(解压密码3).rar
;下载网址 http://www.SO.com/
; 09-OneKeyGhost.exe
;下载网址 http://www.onekeyghost.com/

02_设置全局无窗口快捷键()
03_设置全局变量()
04_设置定时执行器()
05_设置此脚本参数()
06_防止重复运行此脚本()
SetTimer,重启微云同步助手,100
SetTimer,备份此脚本文件到各分区,100
; 输入热字串WT,插入当前时间 ( what is the time? )
::wt::
NowTimeString=%A_YYYY%年%A_MM%月%A_DD%日%A_Hour%时%A_Min%分
Clipboard=%NowTimeString%
Send ^v
return
return

重启微云同步助手:
	SetTimer,重启微云同步助手,Delete
	loop
	{
		Process,Close,weiyunsync.exe
		IfExist,C:\Progra~1\Tencent\WeiyunSync\WeiyunSync\Bin\weiyunsync.exe
			Run,C:\Progra~1\Tencent\WeiyunSync\WeiyunSync\Bin\weiyunsync.exe
		loop,540
		{
			WinHide,微云同步助手
			WinHide,ahk_exe weiyunsync.exe
			Sleep,1000
		}
	}
return

备份此脚本文件到各分区:
	SetTimer,备份此脚本文件到各分区,Delete
	DriveGet,备份用盘符清单,List
	loop,Parse,备份用盘符清单
	{
		FileCreateDir,%A_LoopField%:\S
		FileCreateDir,%A_LoopField%:\S\10备份
		FileDelete,%A_LoopField%:\S\10备份\%A_ScriptName%
		FileCopy,%A_ScriptFullPath%,%A_LoopField%:\S\10备份,1
		IfExist,c:\Progra~1\WinRAR\WinRAR.exe
		{
			FileDelete,%A_LoopField%:\S\10备份\%A_ScriptName%.rar
			Run,c:\Progra~1\WinRAR\WinRAR.exe a -DF -IBCK -INUL -m5 %A_LoopField%:\S\10备份\%A_ScriptName%.rar  %A_LoopField%:\S\10备份\%A_ScriptName%
		}
	}
return
; ===== 函数或标签子程序定义代码段开始 =====
02_设置全局无窗口快捷键()
{
	Hotkey,^0 ,07_终止此脚本执行 ;按快捷键 Ctrl+ F12 终止此脚本的执行
	;连续快速按两次Ctrl键打开办公专用文件夹
	Hotkey,~Ctrl,08_激活或隐藏窗口随身固态U盘的办公专用文件夹
	Hotkey,`~,09_加密压缩备份随身固态U盘的办公专用文件夹到D盘
	Hotkey,``,09_加密压缩备份随身固态U盘的办公专用文件夹到D盘
	Hotkey,`#n,10_激活或隐藏窗口Notepad++
	Hotkey,`#e,11_激活或隐藏窗口TotalCommander  ;  按热键 Win+E 激活 TotalCommander
	Hotkey,`#f,12_激活或隐藏窗口MasterSeeker
	Hotkey,`#g,13_激活或隐藏窗口Everything
	Hotkey,`#s,14_激活或隐藏窗口SogouExplorer
	Hotkey,`#c,15_激活或隐藏窗口计算器Calc  ;  按热键 Win + C,打开计算器
	Hotkey,`^!E,16_用SciTE4AutoHotkey编辑此脚本
	Hotkey,`^!H,17_激活或隐藏窗口AutoHotkey中文CHM帮助文件
	Hotkey,`^!R,18_重启_重新装载运行_此脚本
}

07_终止此脚本执行:
	显示会定时关闭的提示窗口(A_ScriptName "(即此脚本)已经退出" )
	Sleep,1000
	ExitApp
return

显示会定时关闭的提示窗口(ToolTipText)
{
	ToolTip,%ToolTipText%,% A_ScreenWidth/2-150,% A_ScreenHeight/2-150
	; 此处使用SetTimer而不使用Sleep
	SetTimer, 关闭提示窗口, 3000
}

关闭提示窗口:
	SetTimer, 关闭提示窗口,Off
	ToolTip
return

08_激活或隐藏窗口随身固态U盘的办公专用文件夹:
	if (A_PriorHotkey <> "~Ctrl" or A_TimeSincePriorHotkey > 400)
	{
		KeyWait, Ctrl
		return
	}

	随身固态U盘的盘符:=搜索随身固态U盘并设置盘符()
	if (随身固态U盘的盘符<>0)
	{
		; 1、如果程序没有运行则运行程序
		Process,Exist,TotalCMD.exe
		if (%ErrorLevel%=0)
		{
			IfWinNotExist,8.52a,\S\01办公
			{
				IfExist,D:\Pr\TotalCMD\TotalCMD.exe
					Run,D:\Pr\TotalCMD\TotalCMD.exe %随身固态U盘的盘符%:\S\01办公
				else
					MsgBox,找不到文件 D:\Pr\TotalCMD\TotalCMD.exe
			}
		}

		; 2、如果窗口置顶并且已经隐藏则显示并激活(切换到)指定窗口

		WinGet,WinStyle ,Style,8.52a
		if (not(WinStyle&0x10000000))
		{
			loop,22
			{
				WinShow,8.52a
				WinMaximize,8.52a
				WinGet, WinID, ID,8.52a
				DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
				WinActivate,8.52a
#WinActivateForce
				WinActivate,8.52a
				WinGetActiveTitle,WinActiveTitle
				; 窗口处于置顶状态, 执行适当的动作.
				IfInString,WinActiveTitle,8.52a
				{
					;~ MsgBox,%A_Index% 1
					return
				}
			}
		}

		; 3、如果窗口未置顶则显示并激活(切换到)指定窗口
		IfWinNotActive,ahk_exe totalcmd.exe
		{
			loop,22
			{
				WinShow,8.52a
				WinMaximize,8.52a
				WinGet, WinID, ID,8.52a
				DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
				WinGetActiveTitle,WinActiveTitle
				; 窗口处于置顶状态, 执行适当的动作.
				IfInString,WinActiveTitle,8.52a
				{
					;~ MsgBox,%A_Index% 2
					return
				}
			}
		}

		; 4、如果窗口已经显示并置顶则隐藏窗口
		WinMinimize,8.52a
		WinHide,8.52a
	}
	else
	{
		ToolTip,请连接随身固态U盘,% A_ScreenWidth/2-150,% A_ScreenHeight/2-150
		SetTimer, 关闭提示窗口,3000
		Sleep,3000
	}
	;~ SetTimer,激活并最大化办公专用文件夹窗口
	;~ WinMaximize,ahk_class CabinetWClass
	;~ WinMaximize,ahk_exe explorer.exe
return

09_加密压缩备份随身固态U盘的办公专用文件夹到D盘:
	随身固态U盘的盘符:=搜索随身固态U盘并设置盘符()
	if (随身固态U盘的盘符<>0)
	{
		FileCreateDir,D:\S
		FileCreateDir,D:\S\10备份
		IfExist,c:\Progra~1\WinRAR\WinRAR.exe
		{
			Pa := % decryptstr("这里需要改成自己的密码暗码MyCryptedPassword_GLUgwFOPlwPAAA","my_secret_key")
			Run,c:\Progra~1\WinRAR\WinRAR.exe u -hp%Pa%  -IBCK -INUL  -m5  -or  -r -tk D:\S\10备份\办公文档备份%A_YYYY%%A_MM%%A_DD%.rar %随身固态U盘的盘符%:\S\01办公\*.*
			显示会定时关闭的提示窗口("正在加密压缩备份办公文档表格图片。。。")
		}
		else
		{
			ToolTip,找不到文件 c:\Progra~1\WinRAR\WinRAR.exe,% A_ScreenWidth/2-150,% A_ScreenHeight/2-150
			SetTimer, 关闭提示窗口,9000
			Sleep,9000
		}
	}
	else
	{
		ToolTip,请连接随身固态U盘,% A_ScreenWidth/2-150,% A_ScreenHeight/2-150
		SetTimer, 关闭提示窗口,3000
		Sleep,3000
	}
	; 这里用SetTimer是防止主线程阻塞引起下一个快捷键输入的接收和处理
	SetTimer,关闭WinRAR出错提示窗口,500
return


encryptStr(str="",pass="")
{
	if !(enclen:=(StrPut(str,"utf-16")*2))
		return "Error: Nothing to Encrypt"
	if !(passlen:=StrPut(pass,"utf-8")-1)
		return "Error: No Pass"
	enclen:=Mod(enclen,4) ? (enclen) : (enclen-2)
	VarSetCapacity(encbin,enclen,0)
	StrPut(str,&encbin,enclen/2,"utf-16")
	VarSetCapacity(passbin,passlen+=Mod((4-Mod(passlen,4)),4),0)
	StrPut(pass,&passbin,StrLen(pass),"utf-8")
	_encryptbin(&encbin,enclen,&passbin,passlen)
	return _crypttobase64(&encbin,enclen)
}

decryptStr(str="",pass="")
{
	if !((StrPut(str,"utf-16")*2))
		return "Error: Nothing to Decrypt"
	if !((passlen:=StrPut(pass,"utf-8")-1))
		return "Error: No Pass"
	VarSetCapacity(passbin,passlen+=Mod((4-Mod(passlen,4)),4),0)
	StrPut(pass,&passbin,StrLen(pass),"utf-8")
	enclen:=_cryptfrombase64(str,encbin)
	_decryptbin(&encbin,enclen,&passbin,passlen)
	return StrGet(&encbin,"utf-16")
}

_MCode(mcode)
{
	static e := {1:4, 2:1}, c := (A_PtrSize=8) ? "x64" : "x86"
	if (!RegExMatch(mcode, "^([0-9]+),(" c ":|.*?," c ":)([^,]+)", m))
		return
	if (!DllCall("crypt32\CryptStringToBinary", "str", m3, "uint", 0, "uint", e[m1], "ptr", 0, "uint*", s, "ptr", 0, "ptr", 0))
		return
	p := DllCall("GlobalAlloc", "uint", 0, "ptr", s, "ptr")
	if (c="x64")
		DllCall("VirtualProtect", "ptr", p, "ptr", s, "uint", 0x40, "uint*", op)
	if (DllCall("crypt32\CryptStringToBinary", "str", m3, "uint", 0, "uint", e[m1], "ptr", p, "uint*", s, "ptr", 0, "ptr", 0))
		return p
	DllCall("GlobalFree", "ptr", p)
}

_encryptbin(bin1pointer,bin1len,bin2pointer,bin2len){
	static encrypt :=_MCode("2,x86:U1VWV4t0JBCLTCQUuAAAAAABzoPuBIsWAcKJFinCAdAPr8KD6QR164tsJByLfCQYi3QkEItMJBSLH7gAAAAAixYBwjHaiRYx2inCAdAPr8KDxgSD6QR154PHBIPtBHXQuAAAAABfXl1bww==,x64:U1ZJicpJidNMidZMidlIAc64AAAAAEiD7gSLFgHCiRYpwgHQD6/CSIPpBHXpuAAAAABBixhMidZMidmLFgHCMdqJFjHaKcIB0A+vwkiDxgRIg+kEdeVJg8AESYPpBHXbuAAAAABeW8M=")
	b:=0
	loop % bin1len/4
	{
		a:=NumGet(bin1pointer+0,bin1len-A_Index*4,"uint")
		NumPut(a+b,bin1pointer+0,bin1len-A_Index*4,"uint")
		b:=(a+b)*a
	}
	loop % bin2len/4
	{
		c:=NumGet(bin2pointer+0,(A_Index-1)*4,"uint")
		b:=0
		loop % bin1len/4
		{
			a:=NumGet(bin1pointer+0,(A_Index-1)*4,"uint")
			NumPut((a+b)^c,bin1pointer+0,(A_Index-1)*4,"uint")
			b:=(a+b)*a
		}
	}
}

_decryptbin(bin1pointer,bin1len,bin2pointer,bin2len){
	static decrypt :=_MCode("2,x86:U1VWV4tsJByLfCQYAe+D7wSLH7gAAAAAi3QkEItMJBSLFjHaKcKJFgHQD6/Cg8YEg+kEdeuD7QR11LgAAAAAi3QkEItMJBQBzoPuBIsWKcKJFgHQD6/Cg+kEde24AAAAAF9eXVvD,x64:U1ZJicpJidNNAchJg+gEuAAAAABBixhMidZMidmLFjHaKcKJFgHQD6/CSIPGBEiD6QR16UmD6QR140yJ1kyJ2UgBzrgAAAAASIPuBIsWKcKJFgHQD6/CSIPpBHXruAAAAABeW8M=")

	loop % bin2len/4
	{
		c:=NumGet(bin2pointer+0,bin2len-A_Index*4,"uint")
		b:=0
		loop % bin1len/4
		{
			a:=NumGet(bin1pointer+0,(A_Index-1)*4,"uint")
			NumPut(a:=(a^c)-b,bin1pointer+0,(A_Index-1)*4,"uint")
			b:=(a+b)*a
		}
	}
	b:=0
	loop % bin1len/4
	{
		a:=NumGet(bin1pointer+0,bin1len-A_Index*4,"uint")
		NumPut(a:=a-b,bin1pointer+0,bin1len-A_Index*4,"uint")
		b:=(a+b)*a
	}
}

_crypttobase64(binpointer,binlen)
{
	s:=0
	DllCall("crypt32\CryptBinaryToStringW","ptr",binpointer,"uint",binlen,"uint",1,"ptr",   0,"uint*",s)
	VarSetCapacity(out,s*2,0)
	DllCall("crypt32\CryptBinaryToStringW","ptr",binpointer,"uint",binlen,"uint",1,"ptr",&out,"uint*",s)
	return StrGet(&out,"utf-16")
}

_cryptfrombase64(string,byref bin)
{
	DllCall("crypt32\CryptStringToBinaryW", "wstr",string,"uint",0,"uint",1,"ptr",0,"uint*",s,"ptr",0,"ptr",0)
	VarSetCapacity(bin,s,0)
	DllCall("crypt32\CryptStringToBinaryW", "wstr",string,"uint",0,"uint",1,"ptr",&bin,"uint*",s,"ptr",0,"ptr",0)
	return s
}

;摘自www.autohotkey.com/board, by Welt

;函数调用

;加密(文本,秘钥)
;~ encrypted_pass :=encryptstr("myspassword","my_secret_key")
;~ Clipboard := encrypted_pass
;解密(文本,秘钥)
;~ MsgBox % decryptstr(encrypted_pass,"my_secret_key")

关闭WinRAR出错提示窗口:
	loop,360
	{
		WinClose,诊断信息,中断操作
		Sleep,500
	}
	SetTimer,关闭WinRAR出错提示窗口,Delete
return

10_激活或隐藏窗口Notepad++:
	; 1、如果程序没有运行则运行程序
	Process,Exist,Notepad++.exe
	if (%ErrorLevel%=0)
	{
		IfWinNotExist,Notepad++
		{
			随身固态U盘的盘符:=搜索随身固态U盘并设置盘符()
			if (随身固态U盘的盘符<>0)
			{
				IfExist,D:\Pr\Notepad++\Notepad++.exe
				{
					FileCreateDir,%随身固态U盘的盘符%:\S\01办公\00临时文本\
					Run,D:\Pr\Notepad++\Notepad++.exe %随身固态U盘的盘符%:\S\01办公\00临时文本\%A_YYYY%%A_MM%%A_DD%.txt
				}
				else
					MsgBox,找不到文件 D:\Pr\Notepad++\Notepad++.exe
			}
		}
	}
	; 2、如果窗口置顶并且已经隐藏则显示并激活(切换到)指定窗口

	WinGet,WinStyle ,Style,Notepad++
	if (not(WinStyle&0x10000000))
	{
		loop,22
		{
			WinShow,Notepad++
			WinMaximize,Notepad++
			WinGet, WinID, ID,Notepad++
			DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
			WinActivate,Notepad++
#WinActivateForce
			WinActivate,Notepad++
			WinGetActiveTitle,WinActiveTitle
			; 窗口处于置顶状态, 执行适当的动作.
			IfInString,WinActiveTitle,Notepad++
			{
				;~ MsgBox,%A_Index% 1
				return
			}
		}
	}

	; 3、如果窗口未置顶则显示并激活(切换到)指定窗口
	IfWinNotActive,ahk_exe Notepad++.exe
	{
		loop,22
		{
			WinShow,Notepad++
			WinMaximize,Notepad++
			WinGet, WinID, ID,Notepad++
			DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
			WinGetActiveTitle,WinActiveTitle
			; 窗口处于置顶状态, 执行适当的动作.
			IfInString,WinActiveTitle,Notepad++
			{
				;~ MsgBox,%A_Index% 2
				return
			}
		}
	}

	; 4、如果窗口已经显示并置顶则隐藏窗口
	WinMinimize,Notepad++
	WinHide,Notepad++
return

根据窗口标题激活或者隐藏窗口(VarExeFileName:="notepad++",VarWinTitle:="Notepad++")
{

	; 1、如果程序没有运行则运行程序
	Process,Exist,%VarExeFileName%.exe
	if (%ErrorLevel%=0)
	{
		IfWinNotExist,%VarWinTitle%
		{
			IfExist,D:\Pr\%VarExeFileName%\%VarExeFileName%.exe
				Run,D:\Pr\%VarExeFileName%\%VarExeFileName%.exe
			else
				MsgBox,找不到文件 D:\Pr\%VarExeFileName%\%VarExeFileName%.exe
		}
	}

	; 2、如果窗口置顶并且已经隐藏则显示并激活(切换到)指定窗口

	WinGet,WinStyle ,Style,%VarWinTitle%
	if (not(WinStyle&0x10000000))
	{
		loop,22
		{
			WinShow,%VarWinTitle%
			WinMaximize,%VarWinTitle%
			WinGet, WinID, ID,%VarWinTitle%
			DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
			WinActivate,%VarWinTitle%
#WinActivateForce
			WinActivate,%VarWinTitle%
			WinGetActiveTitle,WinActiveTitle
			; 窗口处于置顶状态, 执行适当的动作.
			IfInString,WinActiveTitle,%VarWinTitle%
			{
				;~ MsgBox,%A_Index% 1
				return
			}
		}
	}

	; 3、如果窗口未置顶则显示并激活(切换到)指定窗口
	IfWinNotActive,ahk_exe %VarExeFileName%.exe
	{
		loop,22
		{
			WinShow,%VarWinTitle%
			WinMaximize,%VarWinTitle%
			WinGet, WinID, ID,%VarWinTitle%
			DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
			WinGetActiveTitle,WinActiveTitle
			; 窗口处于置顶状态, 执行适当的动作.
			IfInString,WinActiveTitle,%VarWinTitle%
			{
				;~ MsgBox,%A_Index% 2
				return
			}
		}
	}

	; 4、如果窗口已经显示并置顶则隐藏窗口
	WinMinimize,%VarWinTitle%
	WinHide,%VarWinTitle%
}

11_激活或隐藏窗口TotalCommander:
	根据窗口标题激活或者隐藏窗口("TotalCMD","8.52a")
return


12_激活或隐藏窗口MasterSeeker:
	根据窗口类激活或者隐藏窗口("MasterSeeker","WindowsForms10.Window.8.app.0.218f99c")
	SetTimer,全选激活MasterSeeker窗口的搜索编辑框,500
return
全选激活MasterSeeker窗口的搜索编辑框:
	loop,3
	{
		ControlFocus,Filename,ahk_class WindowsForms10.Window.8.app.0.218f99c
		Sleep,100
	}
	SetTimer,全选激活MasterSeeker窗口的搜索编辑框,Delete
return

根据窗口类激活或者隐藏窗口(VarExeFileName:="notepad++",VarClassName:="Notepad++")
{

	; 1、如果程序没有运行则运行程序
	Process,Exist,%VarExeFileName%.exe
	if (%ErrorLevel%=0)
	{
		IfWinNotExist,ahk_class %VarClassName%
		{
			;~ MsgBox,%programDir%
			;~ IfExist,%ProgramDir%\%VarExeFileName%\%VarExeFileName%.exe
			; 我的所有绿色免安装程序都分类保存在文件夹D:\Pr中
			;一个软件对应于一个以窗口标题命名的专有子文件夹
			Run,D:\Pr\%VarExeFileName%\%VarExeFileName%.exe
		}
	}

	; 2、如果窗口置顶并且已经隐藏则显示并激活(切换到)指定窗口

	WinGet,WinStyle ,Style,ahk_class %VarClassName%
	if (not(WinStyle&0x10000000))
	{
		loop,99
		{
			WinShow,ahk_class %VarClassName%
			WinMaximize,ahk_class %VarClassName%
			WinGet, WinID, ID,ahk_class %VarClassName%
			DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
#WinActivateForce
			WinActivate,ahk_class %VarClassName%
			WinGet,WinActiveID,ID,A
			WinGetClass,WinActiveClass,ahk_id %WinActiveID%
			; 窗口处于置顶状态, 执行适当的动作.
			IfInString,WinActiveClass,%VarClassName%
			{
				;~ msgbox,%A_Index% 1
				return
			}
		}
	}

	; 3、如果窗口未置顶则显示并激活(切换到)指定窗口
	IfWinNotActive,ahk_exe %VarExeFileName%.exe
	{
		loop,99
		{
			WinShow,ahk_class %VarClassName%
			WinMaximize,ahk_class %VarClassName%
			WinGet, WinID, ID,ahk_class %VarClassName%
			DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
			WinActivate,ahk_class %VarClassName%
#WinActivateForce
			WinActivate,ahk_class %VarClassName%
			WinGet,WinActiveID,ID,A
			WinGetClass,WinActiveClass,ahk_id %WinActiveID%
			; 窗口处于置顶状态, 执行适当的动作.
			IfInString,WinActiveClass,%VarClassName%
			{
				;~ msgbox,%A_Index% 2
				return
			}
		}
	}
	; 4、如果窗口已经显示并置顶则隐藏窗口
	WinMinimize,ahk_class %VarClassName%
	WinHide,ahk_class %VarClassName%
}

13_激活或隐藏窗口Everything:
	; 当窗口标题测试不通过的话只好用窗口类了
	Process,Close,Everything.exe
	根据窗口类激活或者隐藏窗口("Everything","EVERYTHING")
return

14_激活或隐藏窗口SogouExplorer:
	根据窗口类激活或者隐藏窗口("SogouExplorer","SE_SogouExplorerFrame")
return

15_激活或隐藏窗口计算器Calc:
	Run,calc
return

16_用SciTE4AutoHotkey编辑此脚本:
	随身固态U盘的盘符:=搜索随身固态U盘并设置盘符()
	if (随身固态U盘的盘符<>0)
	{
		Run,D:\Pr\AutoHotkey\SciTE\SciTE.exe %随身固态U盘的盘符%:\03-自定义无窗口全局快捷键.ahk
	}
	else
	{
		ToolTip,请连接随身固态U盘,% A_ScreenWidth/2-150,% A_ScreenHeight/2-150
		SetTimer, 关闭提示窗口,3000
		Sleep,3000
	}
return

17_激活或隐藏窗口AutoHotkey中文CHM帮助文件:
	Run,D:\Pr\AutoHotkey\AutoHotkey.CHM
return

18_重启_重新装载运行_此脚本:
	Reload
return

03_设置全局变量()
{
	global 随身固态U盘的盘符
}

搜索随身固态U盘并设置盘符()
{
	找到U盘:=false
	DriveGet,盘符清单,List
	loop,Parse,盘符清单
	{
		DriveGet,卷标,Label,%A_LoopField%:
		IfInString,卷标,S随身固态U盘943GB
		{
			找到U盘:=true
			return,%A_LoopField%
		}
	}
	if (not	找到U盘)
	{
		return,0
	}
}


04_设置定时执行器()
{
	;~ SetTimer,关闭广告窗口杀死广告窗口删除广告文件强力清理删除粉碎广告文件,500
	;~ SetTimer,定时关闭电脑,500
}

关闭广告窗口杀死广告窗口删除广告文件强力清理删除粉碎广告文件:
	;~ 关闭广告窗口
	;~ WinClose,
	;~ ,杀死广告窗口,
	;~ WinKill,
	;~ 清理广告进程,
	;~ Process,Close,
	;~ 清除广告文件
	;~ FileDelete,
return

定时关闭电脑:
	;~ if(A_Hour=18)
	;~ {
	;~ if (A_Min=01)
	;~ {
	;~ Run,Shutdown /f /r /t 30
	;~ goto,黑屏锁定电脑
	;~ Run,Shutdown /f /r /t 30
	;~ SetTimer,定时关闭电脑,Off
	;~ ExitApp
	;~ }
	;~ }
return

05_设置此脚本参数()
{
	SetWorkingDir,%A_ScriptDir%
	DetectHiddenWindows,On
	SetTitleMatchMode,2
	;~ #NoTrayIcon
#NoEnv
#Persistent  ;让脚本持久运行(即直到用户关闭或遇到 ExitApp)。
#WinActivateForce
	CoordMode,Mouse,Screen
	CoordMode,Pixel,Screen
	CoordMode,ToolTip,Screen
	ListLines,Off
	SendMode,Input
	SetBatchLines,-1
	SetStoreCapsLockMode, On
}

06_防止重复运行此脚本()
{
#SingleInstance,force
	loop,33
	{
		DetectHiddenWindows,On
		Sleep,33
		IfWinExist,QQ595076941_HotkeySet
			ExitApp
	}
	Gui, Show, Hide,QQ595076941_HotkeySet
}

;;;   随身固态U盘内的文件
;;;
;;;   (2018年10月13日修改并测试)(第3次修改)
;;;
;;;   作者:徐晓亮 ( aahk )
;;;
;;;   QQ595076941
;;;
;;;
;;;
;;;   第3次修改添加了明文密码的加密函数,
;;;
;;;   调整修改了文件名和快捷键,
;;;
;;;   并修复测试了一些Bug
;;;
;;;
;;;
;;;   随身固态U盘在使用过程中不离身,一直挂在博友不锈钢钥匙扣上,
;;;
;;;   并用博友不锈钢链条连接皮带扣,使用U盘时用USB30延长线连接U盘和电脑
;;;
;;;
;;;
;;;   随身固态U盘:=CHIPFANCIER 1TB USB3.1 MLC 随身固态U盘
;;;
;;;
;;;
;;;   备用随身固态U盘:= IXUNICS 1TB USB3.1 MLC 随身固态U盘
;;;
;;;
;;;
;;;   通过加入SetTimer来保持主线程的无阻塞高效率运行。
;;;
;;;   通过加入Loop和IfInString判断来保证窗口被可靠的操作到
;;;
;;;   (以前的代码会出现窗口还没有显示出来对窗口的操作就已经执行了,
;;;
;;;   而WinWaitActive又会造成长期等待窗口时间浪费,
;;;
;;;   具体代码格式如下:
;;;
;;;   #Persistent
;;;
;;;   DetectHiddenWindows,On
;;;
;;;   SetTitleMatchMode,2
;;;   SetWorkingDir,%A_ScriptDir%
;;;   SetTimer,跳转的目标标签,500
;;;
;;;   SetTimer,跳转的目标标签2,500
;;;
;;;   SetTimer,跳转的目标标签3,500
;;;
;;;   return
;;;
;;;   跳转的目标标签:
;;;
;;;   SetTimer,跳转的目标标签,Delete
;;;
;;;   Loop
;;;
;;;   {
;;;
;;;   操作前判断1
;;;
;;;   操作1
;;;
;;;   操作前判断2
;;;
;;;   操作2
;;;
;;;   ......
;;;
;;;   ......
;;;
;;;   所有操作是否成功的总的判断
;;;
;;;   如果操作成功则Break退出循环
;;;
;;;   }
;;;
;;;   return
;;;
;;;   跳转的目标标签2:
;;;
;;;   SetTimer,跳转的目标标签,Delete
;;;
;;;   Loop
;;;
;;;   {
;;;
;;;   ......
;;;
;;;   此处省略部分代码 ......
;;;
;;;   }
;;;
;;;
;;;
;;;
;;;
;;;   )
;;;
;;;   通过Loop循环包住所有代码,先判断状态再执行操作最后判断操作是否成功的方法来保证所有操作都可靠的得到执行。
;;;   (
;;;   1、进程操作前判断和操作后验证
;;;   Process,Exist,TotalCMD.exe
;;;   if (%ErrorLevel%=0)
;;;   {
;;;   MsgBox,进程不存在
;;;   }
;;;
;;;   2、窗口
;;;   DetectHiddenWindows,On
;;;   IfWinExist,ahk_class Notepad
;;;   {
;;;   MsgBox,记事本窗口存在
;;;   }
;;;
;;;   ; 置顶激活窗口
;;;   WinGet, WinID, ID,8.52a
;;;   DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
;;;
;;;   WinGetActiveTitle,WinActiveTitle
;;;   IfInString,WinActiveTitle,记事本
;;;   {
;;;   MsgBox,记事本窗口已经置顶激活成功
;;;   }
;;;
;;;   3、控件
;;;   ControlFocus,Filename,ahk_class WindowsForms10.Window.8.app.0.218f99c
;;;
;;;   4、文件
;;;   IfExist,C:\Progra~1\Tencent\WeiyunSync\WeiyunSync\Bin\weiyunsync.exe
;;;   {
;;;   MsgBox,文件存在
;;;   }
;;;
;;;   5、屏幕上的图片和文字
;;;   大漠插件 for AutoHotkey 晓亮专用重制改进加强版
;;;
;;;   6、网络状态
;;;
;;;   7、其他网络的站点软硬件状态操作前判断和操作是否成功结果判断
;;;
;;;   8、其他程序软件文件执行结果状态判断操作是否成功
;;;
;;;   (用 Delphi/Pascal 或 C++/C 写的一些程序的执行结果和状态,操作前判断和操作是否成功结果判断)
;;;
;;;   )

 

 

 

随身固态U盘内的文件(2018年10月14日修改并测试)(第6次修改)作者:徐晓亮 ( aahk )QQ595076941

 

本次修改了Notepad++的文本文件自动创建位置设定,便于文本文件的长期统一管理

文本文件内容搜索可以借助”FileLocator Pro(全文搜索工具)”来对正文内容的快速搜索

 

 

 

给TA捐赠
共{{data.count}}人
人已捐赠
其他

全自动安装 WinRAR 5.40 简体中文版 压缩软件的AutoHotkey脚本源代码 2018年10月14日 作者:徐晓亮 ( aahk )QQ595076941

2018-10-14 8:56:29

其他

AutoHotkey 调用 大漠插件 dm.dll (2018年10月14日修改并测试)作者:徐晓亮 ( aahk )QQ595076941

2018-10-14 17:09:04

18 条回复 A文章作者 M管理员
  1. AHK中文社区

    很不错,持续更新,文章写得越来越好了!有必要的话我给你开个专栏!

    • aahk

      谢谢前辈的肯定,如有不对的地方还望多多指教,我会继续努力的

      强大的AutoAHK网站,强大的中国,预祝网站越办越好,
      ahk的网站不多,但是ahk的资源很丰富,
      无论什么问题只要搜索一下总有类似的解决方案。

      目前我遇到的问题是:
      如何用C++或者Delphi或者AutoHotkey批量采集互联网资源?
      1、通过一次鼠标单击来批量分类采集”国语中字电影迅雷BT下载链接网址清单”
      2、通过一次鼠标单击来批量分类采集”高清图片下载链接网址清单”
      3、通过一次鼠标单击来批量分类采集”无损音乐下载链接网址清单”
      4、通过一次鼠标单击来批量分类采集”有声读物下载链接网址清单”
      5、通过一次鼠标单击来批量分类采集”单机游戏下载链接网址清单”
      6、通过一次鼠标单击来批量分类采集”autohotkey源代码下载链接网址清单”

      我现在主要常用的软件是:
      1、Windows 7 旗舰版
      2、AutoHotkey
      3、Delphi
      4、PrimoCache
      5、MasterSeeker
      6、WPS Office

    • aahk

      另外还有一个问题一直困扰着我:

      如何无痛刷新右下角任务状态栏显示图标(有时候进程重启后会留下原有图标时间长了有非常多的同样的图标,鼠标移到图标上又自动消失了)

    • AHK中文社区

      刷新工具栏就行了!刷新的命令自己查查资料吧,通过命令行肯定能实现!ahk运行命令行也能完美支持!

    • aahk

      ;~ 刷新任务栏和托盘图标_有痛版(会闪一下,我要不闪的)
      WinClose,ahk_exe Explorer.EXE
      Process,Close,Explorer.EXE
      Run,explorer.exe

    • aahk

      那个网站打开有点慢可能已经失效了

      所以再贴一下

      刷新系统托盘(清除死掉的图标)修正版

      2009-08-06 18:50:06| 分类: Delphi | 标签: |字号大中小 订阅

      type
      TOSVersion = (osUnknown, os95, os98, osME, osNT3, osNT4, os2K, osXP, os2K3);
      ……
      function GetOS: TOSVersion;
      var
      OS: TOSVersionInfo;
      begin
      ZeroMemory(@OS,SizeOf(OS));
      OS.dwOSVersionInfoSize := SizeOf(OS);
      GetVersionEx(OS);
      Result := osUnknown;
      if OS.dwPlatformId = VER_PLATFORM_WIN32_NT then
      begin
      case OS.dwMajorVersion of
      3: Result := osNT3;
      4: Result := osNT4;
      5:
      begin
      case OS.dwMinorVersion of
      0: Result:= os2K;
      1: Result:= osXP;
      2: Result:= os2K3;
      end;
      end;
      end;
      end
      else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 0) then
      Result := os95
      else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 10) then
      Result := os98
      else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 90) then
      Result := osME
      end;

      function GetSysTrayWnd(): HWND;
      //返回系统托盘的句柄,适合于Windows各版本
      var OS: TOSVersion;
      begin
      OS := GetOS;
      Result := FindWindow(‘Shell_TrayWnd’, nil);
      Result := FindWindowEx(Result, 0, ‘TrayNotifyWnd’, nil);
      if(OS in [osXP, os2K3])then
      Result := FindWindowEx(Result, 0, ‘SysPager’, nil);
      if(OS in [os2K, osXP, os2K3])then
      Result := FindWindowEx(Result, 0, ‘ToolbarWindow32’, nil);
      end;

      procedure RefreshTrayIcon();
      //刷新系统托盘图标
      var
      hwndTrayToolBar : HWND;
      rTrayToolBar : tRect;
      x , y : Word;
      begin
      hwndTrayToolBar := GetSysTrayWnd;

      Windows.GetClientRect(hwndTrayToolBar, rTrayToolBar);
      for x:=1 to rTrayToolBar.right-1 do
      begin
      for y:=1 to rTrayToolBar.bottom-1 do
      begin
      SendMessage(hwndTrayToolBar , WM_MOUSEMOVE, 0, MAKELPARAM(x,y));
      end;
      end;
      end;

      ===================================
      调用RefreshTrayIcon()就OK

      [笔记]隐藏指定程序的托盘图标(Delphi版)
      突然想到又添加一个把“疯狂刷新”的托盘图标都隐藏的功能。于是百度了半天才弄到一个还可以的实现功能。(添加uses CommCtrl;)

      procedure HideAllTrace;
      var TBHWND: HWND;
      i, count: Integer;
      PID, PRC: THandle;
      Buff: PChar;
      Info: _TBBUTTON;
      R: Cardinal;
      S: array[0..1024] of char;
      begin
      TBHWND := GetSysTrayWnd;
      if TBHWND = 0 then exit;

      GetWindowThreadProcessId(TBHWND, @PID);
      PRC := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, PID);
      Buff := VirtualAllocEx(PRC, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
      count := SendMessage(TBHWND, TB_BUTTONCOUNT, 0, 0); //托盘中button的个数,不一定是图标的个数,有些button是隐藏的。
      for i := 0 to count – 1 do
      begin
      FillChar(Info, SizeOf(Info), 0);
      WriteProcessMemory(PRC, Buff, @Info, SizeOf(Info), R); //消息使用的内存空间必须在Shell之内,所以利用ReadProcessMemoery和WriteProcessMemory。
      SendMessage(TBHWND, TB_GETBUTTON, i, Integer(Buff));
      ReadProcessMemory(PRC, Buff, @Info, SizeOf(Info), R);

      SendMessage(TBHWND, TB_GETBUTTONTEXT, Info.idCommand, Integer(Integer(@Buff[0]) + SizeOf(Info)));
      ReadProcessMemory(PRC, Pointer(Integer(@Buff[0]) + SizeOf(Info)), @S[0], SizeOf(S), R);
      if pos(‘疯狂刷新’, StrPas(S)) > 0 then //如果button的TEXT中包含’疯狂刷新’
      SendMessage(TBHWND, TB_DELETEBUTTON, i, 0); //删除
      end;
      VirtualFreeEx(PRC, Buff, 0, MEM_RELEASE);
      CloseHandle(PRC);
      end;

      但终因这个功能太猥亵,有点你木马或恶意软件而没有添加到辅助工具里。

    • aahk

      条条大道通罗马

      不是编程工具的问题,是源代码的问题,是人的问题

      struct AppData
      {
      HWND hwnd;
      UINT uID;
      };

      void Refurbish(HWND hToolbarWindow32)

      {
      if (hToolbarWindow32)
      {
      DWORD pid = 0;
      LPVOID lngAdress = NULL;
      long lngButtonID = 0;
      LPVOID lngText = NULL;
      LPVOID lngRect = NULL;
      RECT rc = { 0 };
      char strBuff[1024] = { 0 };
      GetWindowThreadProcessId(hToolbarWindow32, &pid);
      if (NULL == pid)
      {
      return;
      }
      HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, true, pid);
      if (NULL == hProcess)
      {
      return;
      }
      int iNum = ::SendMessage(hToolbarWindow32, TB_BUTTONCOUNT, NULL, NULL);
      lngAdress = VirtualAllocEx(hProcess, 0, 0x4096, MEM_COMMIT, PAGE_READWRITE);
      lngRect = VirtualAllocEx(hProcess, 0, sizeof(RECT), MEM_COMMIT, PAGE_READWRITE);
      lngText = VirtualAllocEx(hProcess, 0, 1024, MEM_COMMIT, PAGE_READWRITE);
      for (int i = 0; i <= iNum; i++)
      {
      long lngTempID = lngButtonID;

      SIZE_T numBytes = 0;
      AppData appData = { 0, 0 };

      int ret = ::SendMessage(hToolbarWindow32, TB_GETBUTTON, i, (LPARAM)(lngAdress));
      if (ret != 0)
      {
      ret = ReadProcessMemory(hProcess, LPVOID((long)lngAdress + 4), &lngButtonID, 4, 0);
      ret = ::SendMessage(hToolbarWindow32, TB_GETBUTTONTEXT, (WPARAM)lngButtonID, (LPARAM)(lngText));//一定是buttonID,网上都是i,这样过去到的text不是对应托盘的text.
      ret = ReadProcessMemory(hProcess, lngText, strBuff, 1024, 0);
      ret = ::SendMessage(hToolbarWindow32, TB_GETITEMRECT, (WPARAM)i, (LPARAM)(lngRect));
      ret = ReadProcessMemory(hProcess, lngRect, &rc, sizeof(rc), 0);

      if (!ReadProcessMemory(trayProcess, lngAdress, &buttonData, sizeof(TBBUTTON), &numBytes))
          continue;
      if (!ReadProcessMemory(trayProcess, (LPVOID)buttonData.dwData, &appData, sizeof(AppData), &numBytes))
      continue;//获取托盘图标窗口句柄和ID

      if (strcmp(strBuff,"微信")==0)//通过托盘tooltip信息查找自己的程序
      {
      int iGap = rc.right – rc.left;
      ::SendMessage(hToolbarWindow32, WM_MOUSEMOVE, 0, MAKELPARAM(rc.right – (iGap / 2), rc.bottom -(iGap / 2)));
      i–;
      //::SendMessage(hToolbarWindow32, TB_DELETEBUTTON, i, 0);
      }
      }
      }
      VirtualFreeEx(hProcess, lngAdress, 0x4096, MEM_RELEASE);
      VirtualFreeEx(hProcess, lngText, 1024, MEM_RELEASE);
      VirtualFreeEx(hProcess, lngRect, sizeof(RECT), MEM_RELEASE);
      CloseHandle(hProcess);
      }
      }

      //获取普通托盘区窗口句柄  
      HWND FindTrayWnd()
      {
      HWND hWnd = NULL;
      HWND hWndPaper = NULL;
      //任务栏窗口 
      if ((hWnd = FindWindow(_T("Shell_TrayWnd"), NULL)) != NULL)
      {
      //任务栏右边托盘图标+时间区
      if ((hWnd = FindWindowEx(hWnd, 0, _T("TrayNotifyWnd"), NULL)) != NULL)
      {
      //不同系统可能有可能没有这层  
      hWndPaper = FindWindowEx(hWnd, 0, _T("SysPager"), NULL);
      //托盘图标窗口  
      if (!hWndPaper)
      hWnd = FindWindowEx(hWnd, 0, _T("ToolbarWindow32"), NULL);
      else
      hWnd = FindWindowEx(hWndPaper, 0, _T("ToolbarWindow32"), NULL);
      }
      }

      return hWnd;
      }
      //获取溢出托盘区窗口句柄  
      HWND FindNotifyIconOverflowWindow()
      {
      HWND hWnd = NULL;

      hWnd = FindWindow(_T("NotifyIconOverflowWindow"), NULL);
      if (hWnd != NULL)
      {
      hWnd = FindWindowEx(hWnd, NULL, _T("ToolbarWindow32"), NULL);
      }

      return hWnd;
      }

      //刷新托盘区域
      void RefurbishTray()

      HWND hToolbarWindow32=NULL;
      HWND hToolbarOverWindow32=NULL;
      hToolbarWindow32 = FindTrayWnd();
      hToolbarOverWindow32 = FindNotifyIconOverflowWindow();
      if (NULL != hToolbarWindow32)
      {
      Refurbish(hToolbarWindow32);//刷新托盘区域
      }
      if (NULL != hToolbarOverWindow32)
      {
      Refurbish(hToolbarOverWindow32);//刷新溢出区域
      }
      }
      ———————
      作者:zy1031393630
      来源:CSDN
      原文:https://blog.csdn.net/zy1031393630/article/details/78442527?utm_source=copy
      版权声明:本文为博主原创文章,转载请附上博文链接!

    • AHK中文社区

      网络资源自动采集是网络爬虫的专长,你可以使用python实现,所有的编程语言只是一个工具罢了!

    • aahk

      谢谢指教,python非常流行,但是我不会用,并且也不符合我的使用习惯,我需要制作一个不用安装不用配置的在各种windows版本上都可以通过一次鼠标双击可执行文件就自动解压配置采集分类另存为下载地址清单的单个可执行文件。正在研究测试搜索改进中。我需要零安装零配置,方便简单稳定的使用和下载同步。

      不知道老是这样沉迷与各种源代码中好不好。

    • AHK中文社区

      希望你学习过程中遇到优秀的脚本也请分享到网站!我们希望将这里建设成autohotkey超级网站!让别的朋友越用越方便!

    • aahk

      现在急需制作一个文件夹4.6GB,里面包含,1、autohotkey和scite4ahk,scriptwrite,autoahk,micro键鼠宏记录器等常用工具软件。2、常用经典源代码(已分类)。3、ahk编程文章。4、ahk编程音频教程。5、autohotkey视频教程。总共是1张dvd刻录盘的大小空间。包含ahk的方方面面。这是我的愿望,应该也是大家的需求,编程留念,到此一游。商业化也可以,淘宝一下。

    • aahk

      类似delphi的bbs的chm帮助文件,即使离线也可以天下无敌了。谢谢大家。首先内容要巨大(4.6GB的文本搜索库基本满足要求了)。然后是全文搜索。离线也可以搜索解决大部分编程问题。

    • aahk

      关于开专栏的事,暂时还是不要麻烦前辈。

      等我有了更重大的突破后再主动联系前辈。

  2. AHK中文社区

    建议将你之前的版本链接放过来,突然看到这个,有点突兀!

个人中心
购物车
优惠劵
有新私信 私信列表
搜索