例子:几个API函数示例

优质
小牛编辑
114浏览
2023-12-01
OutFile "常用API函数集.EXE"
Name "常用API函数集"
Section
;获得安装程序所在目录
System::Call 'kernel32::GetCurrentDirectory(i 1024,t .R1)'
MessageBox MB_OK '安装程序所在目录:$R1'

;获得当前安装程序进程PID
System::Call 'kernel32::GetCurrentProcessId()i .R0'
MessageBox MB_OK '安装程序进程PID:$R0'

;获得磁盘卷标
StrCpy $R0 "C:\"
System::Call 'kernel32::GetVolumeInformationA(t R0,t .R1,i 100,i .R3,i .R4,i .R5,t .R6,i 100)'
MessageBox MB_OK '盘符:$R0$\n卷标:$R1$\n文件格式:$R6'

;设置磁盘卷标
StrCpy $R0 "C:\"    ;盘符
StrCpy $R1 "系统"    ;卷标
System::Call 'kernel32::SetVolumeLabelA(t R0,t R1)'

;对比两个文件的时间,如两个时间相等,就返回0;如R0小于R1,返回-1;如R1小于R0,返回1
StrCpy $R0 "C:\boot.ini"
StrCpy $R1 "C:\AUTOEXEC.BAT"
System::Call 'kernel32::CompareFileTime(t R0,t R1) i.R2'
MessageBox MB_OK '文件$R0与$R1时间比较结果$R2'

;获取分区数目,结果显示是十进制,转换成二进制后
;二进制位标志着存在哪些驱动器。其中,位0设为1表示驱动器A:存在于系统中;
;位1设为1表示存在B:驱动器;以次类推
System::Call 'kernel32::GetLogicalDrives()i.R1'
MessageBox MB_OK '分区数目对应数:$R1'


;移动文件堆栈模式
Push "D:\1.txt" ;目标文件
Push "C:\1.txt" ;来源文件
System::Call "Kernel32::MoveFileExA(t s,t s,i 2)"

;移动文件变量模式
StrCpy $R0 "C:\A\1.txt"    ;来源文件
StrCpy $R1 "C:\1.txt"    ;目标文件
System::Call 'Kernel32::MoveFileA(t R1,t R0)'

;设置文件属性
StrCpy $R0 "C:\1.EXE"    ;文件
StrCpy $R1 0x20         ;属性
System::Call 'kernel32::SetFileAttributesA(t R0,i 0x100)'
;属性表
;0x20   FILE_ATTRIBUTE_ARCHIVE,存档
;0x2    FILE_ATTRIBUTE_HIDDEN,隐藏
;0x80    FILE_ATTRIBUTE_NORMAL,正常
;0x2000 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,不索引
;0x1000 FILE_ATTRIBUTE_OFFLINE,离线
;0x1    FILE_ATTRIBUTE_READONLY,只读
;0x4    FILE_ATTRIBUTE_SYSTEM,系统
;0x100  FILE_ATTRIBUTE_TEMPORARY,;临时属性(一般无效)
SectionEnd