2013. 1. 7. 22:45
네오스 패커를 사용하다 보니 폴더나 파일 카피가 안되서 응용한 압축 방식 입니다..
레지 등록, 삭제..
폴더 복사 및 파일 복사 등등....
작은 용량이나 대용량이 아니라면 ...
압축이 풀리는 시간이 있어서 런쳐 형식보다는 프로그램이 실행하는대
시간이 좀 걸립니다..
그럼에도 불구하고 단일 파일이 필요할때 사용....
Temp폴더에 압축이 풀린 상태..
SolveigMM Video Splitter가 2개가 됍니다..
7za.exe SolveigMM Video .au3 SolveigMM_Video 예문_.au3
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
if _Singleton(@ScriptName,1) = 0 Then ;---]
MsgBox(0, 'ERROR', '이미 프로그램이 실행중입니다.' ,1) ; ]
Exit ; ]
EndIf ; ] 붕복 실행 (아래 Func _Singleton 이하 포함)
$i = 1
while $i
$temp = @tempdir & "\SolveigMM Video Splitter" ;Temp폴더에 SolveigMM Video Splitter를 만듭니다.
$i = FileExists($temp) ; $temp 는 압축이 풀린곳의 경로 패치 입니다.
WEnd
$unzip = $temp & "\7za.exe" ; $temp 경로에서 7za.exe를 실행해서 압축을 풉니다..
$zip = $temp & "\SolveigMM Video Splitter.7z" ; 압축한 파일 이름.
$insreg = $temp & "\SolveigMM Video Splitter\ins.reg" ;압축 파일이 풀린 폴더의 등록 ins.reg 경로
$delreg = $temp & "\SolveigMM Video Splitter\del.reg" ;압축 파일이 풀린 폴더의 삭제 del.reg 경로
$run = $temp & "\SolveigMM Video Splitter\SMMVSplitter.exe" ; 실행 파일 경로
DirCreate($temp) ;위에서 정한 SolveigMM Video Splitter 폴더를 만듭니다..
FileSetAttrib(@TempDir & "\SolveigMM Video Splitter", "+S+H") ; 폴더를 숨김니다.
FileInstall("7za.exe",$unzip,0) ;au3파일이 위치한 곳에 7za.exe 과 압축파일이 같이 있어야 함니다.
FileInstall("SolveigMM Video Splitter.7z",$zip,0)
RunWait( '"' & $unzip & '" x -t7z "' & $zip & '" -o"' & $temp & '"',"",@SW_HIDE) ;압축을 숨김 상태에서 풉니다.
if FileExists($insreg) then ; ins.reg가 있다면
RunWait('regedit /s ins.reg',$temp) ; 레지 등록 경로가 패치되어 있기 때문에 ins.reg 이름만 적습니다.
endif
DirCreate(@HomeDrive & "\SolveigMM Video Splitter") ; C:드라이브에 폴더를 만듭니다(위치는 바꾸시면 됍니다)
DirCopy($temp & "\SolveigMM Video Splitter\Solveig Multimedia", @HomeDrive & "\SolveigMM Video Splitter\Solveig Multimedia")
FileCopy($temp & "\SolveigMM Video Splitter\Solveig Multimedia\aaa.dll", @HomeDrive & "\aaa.dll") ;파일 복사
RunWait($run,$temp) ; 위의 폴더를 복사하고 경로 패치한 SMMVSplitter.exe를 실행 합니다.
if FileExists($delreg) then ; del.reg가 있다면
RunWait('regedit /s del.reg',$temp) ;레지 삭제
endif
while FileExists($temp)
DirRemove($temp,1) ; 압축이 풀린 모든 파일 삭제.
DirRemove(@HomeDrive & "\SolveigMM Video Splitter" ,1) ; 생성된 폴더 삭제.
DirRemove(@AppDataDir & "\Solveig Multimedia" ,1)
FileDelete(@HomeDrive & "\aaa.dll")
Wend
Func _Singleton($sOccurenceName, $iFlag = 0)
Local Const $ERROR_ALREADY_EXISTS = 183
Local Const $SECURITY_DESCRIPTOR_REVISION = 1
Local $handle, $lastError, $pSecurityAttributes = 0
If BitAND($iFlag, 2) Then
Local $structSecurityDescriptor = DllStructCreate("dword[5]")
Local $pSecurityDescriptor = DllStructGetPtr($structSecurityDescriptor)
Local $aRet = DllCall("advapi32.dll", "int", "InitializeSecurityDescriptor", _
"ptr", $pSecurityDescriptor, "dword", $SECURITY_DESCRIPTOR_REVISION)
If Not @error And $aRet[0] Then
$aRet = DllCall("advapi32.dll", "int", "SetSecurityDescriptorDacl", _
"ptr", $pSecurityDescriptor, "int", 1, "ptr", 0, "int", 0)
If Not @error And $aRet[0] Then
Local $structSecurityAttributes = DllStructCreate("dword;ptr;int")
DllStructSetData($structSecurityAttributes, 1, DllStructGetSize($structSecurityAttributes))
DllStructSetData($structSecurityAttributes, 2, $pSecurityDescriptor)
DllStructSetData($structSecurityAttributes, 3, 0)
$pSecurityAttributes = DllStructGetPtr($structSecurityAttributes)
EndIf
EndIf
EndIf
$handle = DllCall("kernel32.dll", "int", "CreateMutex", "ptr", $pSecurityAttributes, "long", 1, "str", $sOccurenceName)
$lastError = DllCall("kernel32.dll", "int", "GetLastError")
If $lastError[0] = $ERROR_ALREADY_EXISTS Then
If BitAND($iFlag, 1) Then
Return SetError($lastError[0], $lastError[0], 0)
Else
Exit -1
EndIf
EndIf
Return $handle[0]
EndFunc
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
if _Singleton(@ScriptName,1) = 0 Then ;---]
MsgBox(0, 'ERROR', '이미 프로그램이 실행중입니다.' ,1) ; ]
Exit ; ]
EndIf ; ] 붕복 실행 (아래 Func _Singleton 이하 포함)
$i = 1
while $i
$temp = @tempdir & "\SolveigMM Video Splitter" ;Temp폴더에 SolveigMM Video Splitter를 만듭니다.
$i = FileExists($temp) ; $temp 는 압축이 풀린곳의 경로 패치 입니다.
WEnd
$unzip = $temp & "\7za.exe" ; $temp 경로에서 7za.exe를 실행해서 압축을 풉니다..
$zip = $temp & "\SolveigMM Video Splitter.7z" ; 압축한 파일 이름.
$insreg = $temp & "\SolveigMM Video Splitter\ins.reg" ;압축 파일이 풀린 폴더의 등록 ins.reg 경로
$delreg = $temp & "\SolveigMM Video Splitter\del.reg" ;압축 파일이 풀린 폴더의 삭제 del.reg 경로
$run = $temp & "\SolveigMM Video Splitter\SMMVSplitter.exe" ; 실행 파일 경로
DirCreate($temp) ;위에서 정한 SolveigMM Video Splitter 폴더를 만듭니다..
FileSetAttrib(@TempDir & "\SolveigMM Video Splitter", "+S+H") ; 폴더를 숨김니다.
FileInstall("7za.exe",$unzip,0) ;au3파일이 위치한 곳에 7za.exe 과 압축파일이 같이 있어야 함니다.
FileInstall("SolveigMM Video Splitter.7z",$zip,0)
RunWait( '"' & $unzip & '" x -t7z "' & $zip & '" -o"' & $temp & '"',"",@SW_HIDE) ;압축을 숨김 상태에서 풉니다.
if FileExists($insreg) then ; ins.reg가 있다면
RunWait('regedit /s ins.reg',$temp) ; 레지 등록 경로가 패치되어 있기 때문에 ins.reg 이름만 적습니다.
endif
DirCreate(@HomeDrive & "\SolveigMM Video Splitter") ; C:드라이브에 폴더를 만듭니다(위치는 바꾸시면 됍니다)
DirCopy($temp & "\SolveigMM Video Splitter\Solveig Multimedia", @HomeDrive & "\SolveigMM Video Splitter\Solveig Multimedia")
FileCopy($temp & "\SolveigMM Video Splitter\Solveig Multimedia\aaa.dll", @HomeDrive & "\aaa.dll") ;파일 복사
RunWait($run,$temp) ; 위의 폴더를 복사하고 경로 패치한 SMMVSplitter.exe를 실행 합니다.
if FileExists($delreg) then ; del.reg가 있다면
RunWait('regedit /s del.reg',$temp) ;레지 삭제
endif
while FileExists($temp)
DirRemove($temp,1) ; 압축이 풀린 모든 파일 삭제.
DirRemove(@HomeDrive & "\SolveigMM Video Splitter" ,1) ; 생성된 폴더 삭제.
DirRemove(@AppDataDir & "\Solveig Multimedia" ,1)
FileDelete(@HomeDrive & "\aaa.dll")
Wend
Func _Singleton($sOccurenceName, $iFlag = 0)
Local Const $ERROR_ALREADY_EXISTS = 183
Local Const $SECURITY_DESCRIPTOR_REVISION = 1
Local $handle, $lastError, $pSecurityAttributes = 0
If BitAND($iFlag, 2) Then
Local $structSecurityDescriptor = DllStructCreate("dword[5]")
Local $pSecurityDescriptor = DllStructGetPtr($structSecurityDescriptor)
Local $aRet = DllCall("advapi32.dll", "int", "InitializeSecurityDescriptor", _
"ptr", $pSecurityDescriptor, "dword", $SECURITY_DESCRIPTOR_REVISION)
If Not @error And $aRet[0] Then
$aRet = DllCall("advapi32.dll", "int", "SetSecurityDescriptorDacl", _
"ptr", $pSecurityDescriptor, "int", 1, "ptr", 0, "int", 0)
If Not @error And $aRet[0] Then
Local $structSecurityAttributes = DllStructCreate("dword;ptr;int")
DllStructSetData($structSecurityAttributes, 1, DllStructGetSize($structSecurityAttributes))
DllStructSetData($structSecurityAttributes, 2, $pSecurityDescriptor)
DllStructSetData($structSecurityAttributes, 3, 0)
$pSecurityAttributes = DllStructGetPtr($structSecurityAttributes)
EndIf
EndIf
EndIf
$handle = DllCall("kernel32.dll", "int", "CreateMutex", "ptr", $pSecurityAttributes, "long", 1, "str", $sOccurenceName)
$lastError = DllCall("kernel32.dll", "int", "GetLastError")
If $lastError[0] = $ERROR_ALREADY_EXISTS Then
If BitAND($iFlag, 1) Then
Return SetError($lastError[0], $lastError[0], 0)
Else
Exit -1
EndIf
EndIf
Return $handle[0]
EndFunc
'도움말들.... > 오토잇' 카테고리의 다른 글
특정 폴더의 파일만 삭제..(민정님) (8) | 2013.01.18 |
---|---|
7zip 폴더 압축을 이용한 단일 프로그램 만들기 (下).. (1) | 2013.01.08 |
음악 파일 이동 - 벌꿀 바나나님 (7) | 2012.12.30 |
Torrent3.2 -벌꿀 바나나님.. (7) | 2012.12.29 |
2차 - Photoshop CS6 (x86) 한/영 (2) | 2012.12.28 |