7-Zip命令行生成自解压文件-2022年9月9日

;

7-Zip命令行生成自解压文件-2022年9月9日

;

压缩包下载地址1:
https://ds920.lanzouy.com/ifo060bdgemh

;
  7-Zip命令行生成自解压文件操作说明文档
;

第1步:
仔细阅读并理解此文档
文件名:D:\Prog\Everything\010-7-Zip-SFX-Builder-Command-Line-Version.txt

第2步:
复制需制作程序相关文件到此文档所在的文件夹
(
例如:
7-Zip命令行程序文件“7z.exe”
7zS前缀开始的sfx自解压程序模板文件 7zS*.sfx
编译后的AutoHotkey自动化热键脚本程序“Everything-F1.exe”
“Everything-F1.exe”的作用是:
激活或者隐藏Everything主窗口,
激活搜索框SetFocus(),
调整Everything主窗口的位置和大小。

exe可执行文件、
假如有x86(32位)和x64(64位)两种程序时仅复制x64(64位)
Reg注册表导入文件、
bat批处理文件、
vbs脚本文件、
ahk自动化脚本文件、
Delphi编译后的exe文件和
其他相关图片文档音频视频等资源文件
)

;//////////////////////////////////////////////////
; 文件名:D:\Prog\Everything\Everything-F1.ahk
; 此脚本从此行开始
;/*
;===========================================
; 设置激活或者隐藏 Everything 主窗口的快捷键为 F8 (位于Esc键右边第8个键)
;
; 脚本作者 : Cloud-Sync
;
; 用法: (需要最新版本 AHK v1.1.31+)
; 1. 到Everything官方网站下载并安装Everything
; https://www.voidtools.com/zh-cn/downloads/
; 2. 将本脚本保存为"Everything-F8.ahk"并复制到D:/Program/Everything文件夹中
; 3. 使用Maye Lite来设置 Everything-F8.ahk 的热键
;
; 升级更新历史:
; 版本1.0 2022年2月24日 新建 创建此AutoHotkey脚本并测试通过F4热键功能
;
; 由于AutoHotkey的Hotkey语句设置的热键必需在任务栏或者桌面进程激活时才有效,
; 所以请使用Maye Lite来设置 Everything 的热键
; https://www.autoahk.com/archives/43181
; 我的腾讯QQ电子邮箱地址是  595076941@.qqcom
; https://blog.arae.cc/post/25830.html
; https://github.com/25H/Maya/releases/
;
; 我的腾讯QQ电子邮箱地址是: 595076941@qq.com
;
;===========================================
;*/
;等待指定标题窗口出现
; WinWait,Everything ahk_class EVERYTHING ahk_exe Everything.exe
; 运行 Everything 并调整 Everything 的窗口位置
#SingleInstance,Ignore
loop,5
{
	DetectHiddenWindows,On
	Sleep,5
	IfWinExist,QQ595076941_Everything
		ExitApp
}
Gui, Show, Hide,QQ595076941_Everything

; 强制自身以 ansi + 管理员权限 运行。
runwith("admin","ansi")

#Persistent
; #NoTrayIcon
DetectHiddenWindows,On
SetTitleMatchMode,2
ActivateOrHideWindowHotkey_Everything()
return
ActivateOrHideWindowHotkey_Everything()
{
	IfWinActive,ahk_class EVERYTHING
	{
		WinMinimize,ahk_class EVERYTHING
		ExitApp
	}
	else
	{
		Run,D:\Prog\Everything\Everything.exe
		WinWaitActive,ahk_class EVERYTHING,,5
		; Send,#{Right}
		; WinMove,ahk_class 窗口类名,窗口文本,窗口左上角与屏幕上边沿的距离,窗口左上角与屏幕左边沿的距离,窗口左右宽度,窗口上下高度
		loop,3
		{
			WinMove,ahk_class EVERYTHING,,A_ScreenWidth/2,20,A_ScreenWidth/2-30,A_ScreenHeight-200
			WinMove,ahk_exe Everything.exe,,A_ScreenWidth/2,20,A_ScreenWidth/2-30,A_ScreenHeight-200
		}
		ExitApp
	}
}



; 强制自身进程以 管理员权限 或 普通权限 或 ANSI 或 U32 或 U64 版本运行。
; 例1: runwith("admin","u32") 强制自身以 u32 + 管理员权限 运行。
; 例2: runwith("","ansi")     强制自身以 ansi 版本运行(权限不变)。
; 例3: runwith("normal")      强制自身以 普通权限 运行(版本不变)。
RunWith(RunAsAdmin:="Default", ANSI_U32_U64:="Default")
{
	; 格式化预期的模式
	switch, RunAsAdmin
	{
		case "Normal","Standard","No","0":		RunAsAdmin:=0
		case "Admin","Yes","1":								RunAsAdmin:=1
		case "default":												RunAsAdmin:=A_IsAdmin
default:															RunAsAdmin:=A_IsAdmin
	}
switch, ANSI_U32_U64
{
	case "A32","ANSI","A":								ANSI_U32_U64:="AutoHotkeyA32.exe"
	case "U32","X32","32":								ANSI_U32_U64:="AutoHotkeyU32.exe"
	case "U64","X64","64":								ANSI_U32_U64:="AutoHotkeyU64.exe"
	case "default":												ANSI_U32_U64:="AutoHotkey.exe"
default:															ANSI_U32_U64:="AutoHotkey.exe"
	}
; 获取传递给 “.ahk” 的用户参数(不是 /restart 之类传递给 “.exe” 的开关参数)
for k, v in A_Args
{
	if (RunAsAdmin=1)
	{
		; 转义所有的引号与转义符号
		v:=StrReplace(v, "\", "\\")
		v:=StrReplace(v, """", "\""")
		; 无论参数中是否有空格,都给参数两边加上引号
		; Run       的内引号是 "
		ScriptParameters  .= (ScriptParameters="") ? """" v """" : A_Space """" v """"
	}
	else
	{
		; 转义所有的引号与转义符号
		; 注意要转义两次 Run 和 RunAs.exe
		v:=StrReplace(v, "\", "\\")
		v:=StrReplace(v, """", "\""")
		v:=StrReplace(v, "\", "\\")
		v:=StrReplace(v, """", "\""")
		; 无论参数中是否有空格,都给参数两边加上引号
		; RunAs.exe 的内引号是 \"
		ScriptParameters .= (ScriptParameters="") ? "\""" v "\""" : A_Space "\""" v "\"""
	}
}
; 判断当前 exe 是什么版本
if (!A_IsUnicode)
	RunningEXE:="AutoHotkeyA32.exe"
else if (A_PtrSize=4)
	RunningEXE:="AutoHotkeyU32.exe"
else if (A_PtrSize=8)
	RunningEXE:="AutoHotkeyU64.exe"
; 运行模式与预期相同,则直接返回。 ANSI_U32_U64="AutoHotkey.exe" 代表不对 ahk 版本做要求。
if (A_IsAdmin=RunAsAdmin and (ANSI_U32_U64="AutoHotkey.exe" or ANSI_U32_U64=RunningEXE))
	return
; 如果当前已经是使用 /restart 参数重启的进程,则报错避免反复重启导致死循环。
else if (RegExMatch(DllCall("GetCommandLine", "str"), " /restart(?!\S)"))
{
	预期权限:=(RunAsAdmin=1) ? "管理员权限" : "普通权限"
	当前权限:=(A_IsAdmin=1)  ? "管理员权限" : "普通权限"
	ErrorMessage=
	(LTrim
		预期使用: %ANSI_U32_U64%
		当前使用: %RunningEXE%
		预期权限: %预期权限%
		当前权限: %当前权限%
		程序即将退出。
	)
	MsgBox 0x40030, 运行状态与预期不一致, %ErrorMessage%
	ExitApp
}
else
{
	; 获取 AutoHotkey.exe 的路径
	SplitPath, A_AhkPath, , Dir
	if (RunAsAdmin=0)
	{
		; 强制普通权限运行
		switch, A_IsCompiled
		{
			; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
			; 工作目录不用单独指定,默认使用 A_WorkingDir 。
			case, "1": Run, RunAs.exe /trustlevel:0x20000 "\"%A_ScriptFullPath%\" /restart %ScriptParameters%",, Hide
default: Run, RunAs.exe /trustlevel:0x20000 "\"%Dir%\%ANSI_U32_U64%\" /restart \"%A_ScriptFullPath%\" %ScriptParameters%",, Hide
	}
}
else
{
	; 强制管理员权限运行
	switch, A_IsCompiled
	{
		; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
		; 工作目录不用单独指定,默认使用 A_WorkingDir 。
		case, "1": Run, *RunAs "%A_ScriptFullPath%" /restart %ScriptParameters%
default: Run, *RunAs "%Dir%\%ANSI_U32_U64%" /restart "%A_ScriptFullPath%" %ScriptParameters%
	}
}
ExitApp
}
}
; 所以请使用Maye Lite来设置 Everything 的热键
; https://www.autoahk.com/archives/43181
; 我的腾讯QQ电子邮箱地址是  595076941@.qqcom
; 此脚本到此行结束
;//////////////////////////////////////////////////

第3步:
编辑7-Zip的配置文件“030-Config.txt”
;//////////////////////////////////////////////////
; 文件名:D:\Prog\Everything\030-Config.txt
;!@Install@!UTF-8!
Title="Everything 版本 V1.4.1.1020 (x64)"
InstallPath="D:\\Prog\\Everything"
ExecuteFile="040-Setup.bat"
OverwriteMode="1"
;!@InstallEnd@!
;//////////////////////////////////////////////////
(
说明:
"Everything 版本 V1.4.1.1020 (x64)" 改成你自己喜欢的窗口标题
"D:\\Prog\\Everything"改成合适恰当的解压缩目标路径
"040-Setup.bat" 改成解压缩之后需要运行的文件
OverwriteMode="1" 表示跳过已有文件,默认全部替换,2 仅替换旧文件

有关7-Zip的配置文件“030-Config.txt”的各项参数的用法请参考7z-SFX-Builder的输出标签页
https://cn.bing.com/search?q=7z+SFX+Builder+2.3.1+汉化版
https://www.baidu.com/s?wd=7z+SFX+Builder+2.3.1+汉化版
https://www.sogou.com/sie?ie=utf8&query=7z+SFX+Builder+2.3.1+汉化版

把所有绿色免安装便携软件都集中统一分类保存到文件夹“D:\Prog\”之中
并通过Maye和AutoHotkey来集中统一管理和设置系统快捷键热键和热字串
https://www.voidtools.com/
https://www.autoahk.com/
https://www.autohotkey.com/
https://www.autohotkey.com/boards/viewforum.php?f=26
https://tieba.baidu.com/f?kw=autohotkey&ie=utf-8
https://www.lanzoux.com/b0bqwqjvg
https://blog.arae.cc/post/25830.html
https://github.com/25H/Maya


用批处理获取电脑CPU的序列号并用序列号作为SNA文件的文件名命名前缀
rem //////////////////////////////////////////////////
; 文件名:D:\Prog\Everything\Get-CPU-ID.bat
wmic CPU get ProcessorID
pause
rem //////////////////////////////////////////////////
SNA文件是电脑系统分区C盘的镜像文件由Drive-Snapshot-V1.49-CN软件磁盘快照克隆备份生成
)

第4步:
编辑文件"040-Setup.bat"
rem //////////////////////////////////////////////////
rem 文件名:D:\Prog\Everything\040-Setup.bat
rem 文件编码:ANSI
D:\Prog\Everything\Everything-F1.exe
rem //////////////////////////////////////////////////

第5步:
双击“050-BuildWinExe.bat”
用7-Zip  版本 22.01 的命令行程序创建自解压可执行安装包
https://sparanoid.com/lab/7z/

rem //////////////////////////////////////////////////
rem 文件名:D:\Prog\Everything\050-BuildWinExe.bat
rem 文件编码:ANSI
del test.7z
del 060-test-Everything.exe

rem 传递test文件夹目录绝对地址
rem set srcpath=%1%
echo %srcpath%
rem Pause
rem  将test文件夹内所有文件压缩到7z包中,不包含test目录
7z a test.7z "%~dp0*" -r -mx -mf=BCJ2
copy /b 7zSD_All.sfx + 030-config.txt + test.7z   060-test-Everything.exe
del test.7z
rem //////////////////////////////////////////////////

如有需要可以用 Resource Hacker 替换 7zSD_All.sfx 中的图标








以下是获取电脑CPU序列号的Delphi源代码

//////////////////////////////////////////////////
unit unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons;

type
TForm1 = Class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
BitBtn1: TBitBtn;
Label5: TLabel;
BitBtn2: TBitBtn;
edt1: TEdit;
lbl1: TLabel;
	procedure BitBtn1Click(Sender: TObject);
	procedure BitBtn2Click(Sender: TObject);
	procedure FormCreate(Sender: TObject);
	end;

	var
Form1: TForm;

	implementation

	{$R *.DFM}

		type
		TCPUID = array[1..4] of Longint;
		TVendor = array[0..11] of char;

		function GetCPUID: TCPUID; assembler; register;
		asm
		PUSH    EBX         {Save affected register}
		PUSH    EDI
		MOV     EDI,EAX     {@Resukt}
		MOV     EAX,1
		DW      $A20F       {CPUID Command}
		STOSD               {CPUID[1]}
		MOV     EAX,EBX
		STOSD               {CPUID[2]}
		MOV     EAX,ECX
		STOSD               {CPUID[3]}
		MOV     EAX,EDX
		STOSD               {CPUID[4]}
		POP     EDI         {Restore registers}
		POP     EBX
		end;

		function GetCPUVendor: TVendor; assembler; register;
		asm
		PUSH    EBX               {Save affected register}
		PUSH    EDI
		MOV     EDI,EAX           {@Result (TVendor)}
		MOV     EAX,0
		DW      $A20F             {CPUID Command}
		MOV     EAX,EBX
		XCHG          EBX,ECX     {save ECX result}
		MOV                   ECX,4
@1:
	STOSB
	SHR     EAX,8
	loop    @1
		MOV     EAX,EDX
	MOV                   ECX,4
@2:
	STOSB
	SHR     EAX,8
	loop    @2
		MOV     EAX,EBX
	MOV                   ECX,4
@3:
	STOSB
	SHR     EAX,8
	loop    @3
		POP     EDI              {Restore registers}
	POP     EBX
	end;

	procedure TForm1.BitBtn1Click(Sender: TObject);
	var
CPUID: TCPUID;
I: Integer;
S: TVendor;
	begin
	for I := Low(CPUID) to High(CPUID) do CPUID[I] := -1;
		CPUID := GetCPUID;
	Label1.Caption := 'CPUID[1] = ' + IntToHex(CPUID[1], 8);
	Label2.Caption := 'CPUID[2] = ' + IntToHex(CPUID[2], 8);
	Label3.Caption := 'CPUID[3] = ' + IntToHex(CPUID[3], 8);
	Label4.Caption := 'CPUID[4] = ' + IntToHex(CPUID[4], 8);
	S := GetCPUVendor;
	Label5.Caption := S;
	end;

	procedure TForm1.BitBtn2Click(Sender: TObject);
	begin
	Close;
	end;

	procedure TForm1.FormCreate(Sender: TObject);
	var
CPUID: TCPUID;
I: Integer;
S: TVendor;
	begin
	Label1.Hide;
	Label2.Hide;
	Label3.Hide;
	Label4.Hide;
	Label5.Hide;
	BitBtn1.Hide;
	BitBtn2.Hide;

	for I := Low(CPUID) to High(CPUID) do CPUID[I] := -1;
		CPUID := GetCPUID;
	Label1.Caption := 'CPUID[1] = ' + IntToHex(CPUID[1], 8);
	Label2.Caption := 'CPUID[2] = ' + IntToHex(CPUID[2], 8);
	Label3.Caption := 'CPUID[3] = ' + IntToHex(CPUID[3], 8);
	Label4.Caption := 'CPUID[4] = ' + IntToHex(CPUID[4], 8);
	S := GetCPUVendor;
	Label5.Caption := S;

	edt1.Text := IntToHex(CPUID[1], 5);
	form1.Caption := '';
	end;



	end.
	//////////////////////////////////////////////////

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

AHK包管理工具——PIA(package installer of autohotkey)

2022-9-9 9:43:17

其他

D:Prog -2022年9月10日

2022-9-11 17:22:35

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
有新私信 私信列表
搜索