一个获取鼠标指针下面文件信息的示例

一个实时获取鼠标指针下面文件具体信息示例,具体用途自己去拓展!

一个获取鼠标指针下面文件信息的示例

;@Ahk2Exe-ExeName %A_ScriptDir%\鼠标指针下文件信息获取工具.exe		; 打包后的exe文件路径
;@Ahk2Exe-SetMainIcon info.ico				; 指定托盘图标文件
;@Ahk2Exe-SetCompanyName 98五笔资源库				; 企业信息
;@Ahk2Exe-SetCopyright Copyright (c) 98五笔资源库			; 版权信息
;@Ahk2Exe-SetLegalTrademarks GetCursorFileInfo				; 更改合法商标信息.
;@Ahk2Exe-SetDescription 鼠标指针下文件信息获取工具 			; 文件说明
;@Ahk2Exe-SetFileVersion 1.0.0.0				; 文件版本
;@Ahk2Exe-SetInternalName 鼠标指针下文件信息获取工具			; 文件内部名
;@Ahk2Exe-SetLanguage 0x0804				; 区域语言
;@Ahk2Exe-SetName 鼠标指针下文件信息获取工具				; 名称
;@Ahk2Exe-SetProductName 鼠标指针下文件信息获取工具			; 产品名称
;@Ahk2Exe-SetOrigFilename 鼠标指针下文件信息获取工具.exe				; 原始文件名称
;@Ahk2Exe-SetProductVersion 1.0.0.0			; 产品版本号
;@Ahk2Exe-SetVersion 1.0.0.0				; 版本号

#NoEnv
#SingleInstance force
SetBatchLines, -1
#InstallMouseHook
#InstallKeybdHook
#Persistent

Menu, TRAY, NoStandard
Menu, TRAY, DeleteAll
Menu, TRAY, UseErrorLevel
Menu, TRAY,Color, ffffff
Menu, TRAY,Add, 关于,OnAbout
Menu, TRAY,Add,
Menu, TRAY,Add, 重载,OnReload
Menu, TRAY,Add,
Menu, TRAY,Add, 退出,OnExits
Menu, TRAY, Tip, 鼠标指针下文件信息获取工具
;鼠标停留时间(毫秒)
TimeIdle:=600
;tooltip框显示时长(毫秒)
timeout:=4500
SetTimer, GetCursorFilePath, 250
traytip, 操作提示:, 鼠标指针放在文件上获取文件信息!, , 1
EmptyMem()
return

OnExits:
	EmptyMem()
	exitapp
return

OnAbout:
	BrowserPath:=GetDefaultBrowserPath()
	Run,%BrowserPath% "http://98wb.ysepan.com/",, UseErrorLevel
return

OnReload:
	reload
return

GetCursorFilePath:
	MouseGetPos,,, hWnd, vCtlClassNN
	WinGetClass, vWinClass, % "ahk_id " hWnd
	if (A_TimeIdlePhysical>TimeIdle&&A_TimeIdlePhysical<60000)&&(vWinClass = "CabinetWClass"||vWinClass = "ExploreWClass"||vWinClass = "Progman"||vWinClass = "WorkerW"){
		FilePath:= GetCursorExplorerFilePath(vWinClass), FileBitType:=""
		FileInfo:=FileGetInfo(FilePath, ["FileVersion", "FileDescription", "CompanyName"]*)
		FileInfo:=FileInfo~="[\t\n]"?"文件路径:" FilePath "`n" RegExReplace(FileInfo, "\t", ":"):FilePath
		;判断文件位数
		if FilePath~="^[a-zA-Z]:(((\\(?! )[^/:*?<>\""|\\]+)+\\?)|(\\)?)\s*$"
			FileBitType:=GetFileBitType(FilePath)
		FileInfo:=FileInfo . (FileBitType?"`n文件位数:" FileBitType:"")
		ControlGetText, tipInfo , , ahk_class tooltips_class32
		if (FileInfo<>""&&tipInfo<>FileInfo){
			ToolTip, %  FileInfo
			HTT:=WinExist("ahk_class tooltips_class32")
			flag:=Func("DllCall").Bind("DestroyWindow", "ptr", HTT)
			SetTimer, % flag,% "-" timeout
		}
	}else{
		if WinExist("ahk_id" htt){
			ToolTip
			EmptyMem()
		}
	}
return

RegReadFunc(RootKey, SubKey,ValueName=""){
	if (A_Is64bitOS&&A_PtrSize>4){
		SetRegView, 64
	}
	RegRead, Var, %RootKey%\%SubKey%, %ValueName%

	Return Var
}

GetDefaultBrowserPath(){
	RegRead,item1,HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice,ProgId
	RegRead,item2,HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice,ProgId
	if item1 {
		RegRead,item,HKEY_LOCAL_MACHINE\SOFTWARE\Classes\%item1%\shell\open\command
		RegExMatch(item,"i)([a-zA-Z]\:\\.+\.exe)",BrowserPath)
	}
	if FileExist(Trim(BrowserPath)){
		Return Trim(BrowserPath)
	}Else{
		if item2 {
			RegRead,item,HKEY_LOCAL_MACHINE\SOFTWARE\Classes\%item2%\shell\open\command
			RegExMatch(item,"i)([a-zA-Z]\:\\.+\.exe)",BrowserPath)
			if FileExist(Trim(BrowserPath))
				Return Trim(BrowserPath)
			Else{
				RegRead, BrowserPath, HKLM, SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\iexplore.exe
				Return Trim(BrowserPath)
			}
		}Else{
			RegRead, BrowserPath, HKLM, SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\iexplore.exe
			Return Trim(BrowserPath)
		}
	}
}

GetCursorExplorerFilePath(vWinClass:=""){
	oAcc := Acc_ObjectFromPoint(vChildID)
	if !WinExist("ahk_class " vWinClass){
		MouseGetPos,,, hWnd, vCtlClassNN
		WinGetClass, vWinClass, % "ahk_id " hWnd
	}
	if (vWinClass = "CabinetWClass") || (vWinClass = "ExploreWClass"){
		if (explorerHwnd := WinExist("ahk_class " vWinClass))
		{
			for window in ComObjCreate("Shell.Application").Windows
			{
				try {
					if (window.hwnd==explorerHwnd)
					{
						Folder:= RTrim(window.Document.Folder.Self.Path, "\")
					}
				}
			}
		}
		try vText := oAcc.accValue(vChildID)
	}else if (vWinClass = "Progman") || (vWinClass = "WorkerW"){
		Folder:= A_desktop
		try vText := oAcc.accName(vChildID)
	}
	SplitPath, % Folder "\" vText, name, dir, ext, name_no_ext, drive

	return ext?Folder "\" vText:vText
}

Acc_ObjectFromPoint(ByRef _idChild_ = "", x = "", y = "")
{
	DllCall("LoadLibrary","Str","oleacc","Ptr")
	If	DllCall("oleacc\AccessibleObjectFromPoint", "Int64", x==""||y==""?0*DllCall("GetCursorPos","Int64*",pt)+pt:x&0xFFFFFFFF|y<<32, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0
	Return	ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"UInt")
}

EmptyMem(PID=""){
	pid:=!PID ? DllCall("GetCurrentProcessId") : pid
	h:=DllCall("OpenProcess", "UInt", 0x001F0FFF, "Int", 0, "Int", pid)
	DllCall("SetProcessWorkingSetSize", "UInt", h, "Int", -1, "Int", -1)
	DllCall("CloseHandle", "Int", h)
}

/*
	判断exe文件是32位还是64位
*/
GetFileBitType(filepath){
	f:=fileopen(filepath, "r"), f.seek(0x3c, 0), f.seek(f.readUint()+4, 0)

	switch, f.readUshort()
	{
		case 0x14c:
			return "32bit", f.close()
		case 0x8664, 0x0200:
			return "64bit", f.close()
		default:
			f.close()
	}
}

/*
	判断exe文件是32位还是64位
	返回值包含字符解释:IA64是intel推出的架构,IA64不兼容原有的32位x86架构指令集
		AMD64是AMD推出的也叫 X64 指令集,对原有的32位X86架构进行了扩展,有良好的兼容性
		i386是32位指令集统称
	{0x014c: "IMAGE_FILE_MACHINE_I386", 0x0200: "IMAGE_FILE_MACHINE_IA64", 0x8664: "IMAGE_FILE_MACHINE_AMD64"}
*/
FileGetBits(vPath) {
	IMAGE_DOS_SIGNATURE := 0x5A4D
	IMAGE_NT_SIGNATURE := 0x4550
	Machines := {0x014c: "IMAGE_FILE_MACHINE_I386(32bit)", 0x0200: "IMAGE_FILE_MACHINE_IA64(64bit)", 0x8664: "IMAGE_FILE_MACHINE_AMD64(64bit)"}
	if ((file := FileOpen(vPath, "r")))
	{
		if (file.ReadUShort() == IMAGE_DOS_SIGNATURE)
		{
			file.Seek(60)
			e_lfanew := file.ReadInt()
			file.Seek(e_lfanew)
			if (file.ReadUInt() == IMAGE_NT_SIGNATURE)
			{
				file.Seek(e_lfanew + 4)
				vOutput := Machines[file.ReadUShort()]
			}
		}
		file.Close()
	}

	return vOutput
}

/*
	FileDescription	文件描述说明
	FileVersion	文件版本
	InternalName	内部名称
	LegalCopyright	法律版权所有
	OriginalFilename	创建文件时所使用的名称
	ProductName	产品名称
	ProductVersion	产品版本
	CompanyName	企业名称
	PrivateBuild	私有版本的信息
	SpecialBuild	特殊内部版本信息
	LegalTrademarks	文件的商标和注册商标
*/
;;获取文件信息
FileGetInfo(FilePath:="", p*) {   ; Written by SKAN, modified by HotKeyIt	; www.autohotkey.com/forum/viewtopic.php?p=233188#233188  CD:24-Nov-2008 / LM:27-Oct-2010
	static DLL:="Version\GetFileVersion"
	static Description:={FileDescription:"文件描述说明", FileVersion:"文件版本"
	, InternalName:"内部名称", LegalCopyright:"法律版权所有"
	, OriginalFilename:"创建文件时所使用的名称", ProductName:"产品名称"
	, ProductVersion:"产品版本", CompanyName:"企业名称"
	, PrivateBuild:"私有版本的信息", SpecialBuild:"特殊内部版本信息"
	, LegalTrademarks:"文件的商标和注册商标"}
	
	If ! FSz := DllCall( DLL "InfoSize" (A_IsUnicode ? "W" : "A"), "Str",FilePath, "UInt",0 )
		Return DllCall( "SetLastError", UInt,1 ),""
	VarSetCapacity( FVI, FSz, 0 ),DllCall( DLL "Info" ( A_IsUnicode ? "W" : "A"), "Str",FilePath, "UInt",0, "UInt",FSz, "PTR",&FVI )
	If !DllCall( "Version\VerQueryValue" (A_IsUnicode ? "W" : "A"), "PTR",&FVI, "Str","\VarFileInfo\Translation", "PTR*",Transl, "PTR",0 )
		Return DllCall( "SetLastError", UInt,2 ),""
	If !Trans:=format("{1:.8X}",NumGet(Transl+0,"UInt"))
		Return DllCall( "SetLastError", UInt,3),""
	for k,v in p
	{
		subBlock := "\StringFileInfo\" SubStr(Trans,-3) SubStr(Trans,1,4) "\" v
		If ! DllCall( "Version\VerQueryValue" ( A_IsUnicode ? "W" : "A"), "PTR",&FVI, "Str",SubBlock, "PTR*",InfoPtr, "UInt",0 )
			continue
		If Value := StrGet( InfoPtr )
			Info .= p.MaxIndex()=1?Value:SubStr(Description[v]?Description[v]:v "	",1,24 ) . A_Tab . Value . "`n"
	}

	Return RTrim(Info,"`n")
}

单文件下载链接

提取码:84bs复制
解压码:无

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

记录:RA无法在win11系统下vscode运行的问题和解决

2022-10-13 14:58:12

其他

影子超级命令-网址点点互换

2022-10-14 14:18:44

3 条回复 A文章作者 M管理员
  1. 蜜獾哥
    蜜獾哥给您捐赠了¥5
  2. 蜜獾哥

    网站打赏支付机制出现bug了,竟然能自己给自己打赏?,难道后台代码没做用户操作过滤与检测?

  3. dbgba
    dbgba给您捐赠了¥2
个人中心
购物车
优惠劵
有新私信 私信列表
搜索