|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Склеивание с exe файлами. |
|
|
[решено] Склеивание с exe файлами.
|
Новый участник Сообщения: 33 |
Профиль | Отправить PM | Цитировать Как склеиться с определенным файлом? Нужно чтоб перед запуском выполнялся скрипт и отработки скрипта выполнялось приложение, или завершалось, зависит от действий пользователя. (Нужно поставить окошко с паролем перед запуском и если пароль верный то приложение запускалось, а если нет то убивалось.
|
|
Отправлено: 21:20, 20-03-2009 |
D_Master
Сообщения: n/a |
leprecon, зачем склеивать?
#NoTrayIcon #include <GUIConstants.au3> $Form1 = GUICreate("Введите пароль", 339, 55) $Label1 = GUICtrlCreateLabel("Введите пароль:", 16, 16, 88, 17) $password = GUICtrlCreateInput("", 112, 14, 121, 21) $test = GUICtrlCreateButton("Проверить", 248, 13, 75, 25, 0) GUISetState(@SW_SHOW) ;пароль: $passw = "password" While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $test $pass = GUICtrlRead($password) If $pass == $passw Then MsgBox(64, "Успешно!", "Пароль введен верно!" & @CRLF & "Запускаем Notepad.") Run(@WindowsDir & "\notepad.exe") Else MsgBox(16, "Ошибка!", "Введен неверный пароль!") EndIf EndSwitch WEnd |
Отправлено: 21:30, 20-03-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Я тоже так думал, но это спасет только от неграмотных пользователей. Более менее разбирающиеся полезут в папку с программой и попытаются запуститься с самого exe-шника. ( ну я бы поступил так )
|
Отправлено: 21:52, 20-03-2009 | #3 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать вариант:
#include <Array.au3> #region: - Option Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) #endregion HotKeySet('{ESC}', '_Pro_Exit') Global $sPass = '123' Global $iAuth = 0 Local $sProcessName = 'notepad.exe' Local $sProcessPid, $aAutoItProcList, $i While 1 $sProcessPid = ProcessExists($sProcessName) If $sProcessPid <> 0 Then $iAuth = 0 If IsArray($aAutoItProcList) Then For $i=1 To $aAutoItProcList[0][0] If $sProcessPid == $aAutoItProcList[$i][1] Then $iAuth = 1 ExitLoop EndIf Next EndIf If $iAuth = 0 Then $aAutoItProcList = _ProcessListEx($sProcessName) Else $iAuth = 0 EndIf Sleep(10) WEnd Func _Pro_Exit() Exit EndFunc ;=============================================================================== ; ; Function Name: _ProcessListEx() ; ; Function Description: Gets Process List with extended info, plus can retrieve only a processes with specific resources strings. ; ; Parameter(s): $sResourceName [Optional] - Resource name of the process filename, i.e. "CompiledScript". ; $sInResString [Optional] - String to check in the resource name. ; $iWholeWord [Optional] - Defines if the $sInResString will be compared as whole string (default is 1). ; ; Requirement(s): None. ; ; Return Value(s): On Success - Return 2-dimentional array, where: ; $aRet_List[0][0] = Total processes (array elements). ; $aRet_List[N][0] = Process Name. ; $aRet_List[N][1] = PID (Process ID). ; $aRet_List[N][2] = Process File Path. ; On Failure - Return '' (empty string) and set @error to: ; 1 - Unable to Open Kernel32.dll. ; 2 - Unable to Open Psapi.dll. ; 3 - No Processes Found. ; ; Author(s): G.Sandler (a.k.a MrCreatoR) - CreatoR's Lab (http://creator-lab.ucoz.ru) ; ;===================================================================== Func _ProcessListEx($sResourceName="", $sInResString="", $iWholeWord=1) Local $aProcList = ProcessList() Local $hKernel32_Dll = DllOpen('Kernel32.dll'), $hPsapi_Dll = DllOpen('Psapi.dll') Local $aOpenProc, $aProcPath, $sFileVersion, $aRet_List[1][1] If $hKernel32_Dll == -1 Then Return SetError(1, 0, '') If $hPsapi_Dll == -1 Then $hPsapi_Dll = DllOpen(@SystemDir & '\Psapi.dll') If $hPsapi_Dll == -1 Then $hPsapi_Dll = DllOpen(@WindowsDir & '\Psapi.dll') If $hPsapi_Dll == -1 Then Return SetError(2, 0, '') Local $vStruct = DllStructCreate('int[1024]') Local $pStructPtr = DllStructGetPtr($vStruct) Local $iStructSize = DllStructGetSize($vStruct) For $i = 1 To UBound($aProcList)-1 $aOpenProc = DllCall($hKernel32_Dll, 'hwnd', 'OpenProcess', _ 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $aProcList[$i][1]) If Not IsArray($aOpenProc) Or Not $aOpenProc[0] Then ContinueLoop DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _ 'hwnd', $aOpenProc[0], _ 'ptr', $pStructPtr, _ 'int', $iStructSize, _ 'int*', 0) $aProcPath = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _ 'hwnd', $aOpenProc[0], _ 'int', DllStructGetData($vStruct, 1), _ 'str', '', _ 'int', 2048) DllCall($hKernel32_Dll, 'int', 'CloseHandle', 'int', $aOpenProc[0]) If Not IsArray($aProcPath) Or StringLen($aProcPath[3]) == 0 Then ContinueLoop $sFileVersion = FileGetVersion($aProcPath[3], $sResourceName) If $aProcList[$i][0] == $sResourceName Then If $sResourceName == "" Or $sFileVersion == $sInResString Or _ ($iWholeWord == 0 And StringInStr($sFileVersion, $sInResString)) Then If NOT _Check_Win($aProcList[$i][1]) Then ContinueLoop $aRet_List[0][0] += 1 ReDim $aRet_List[$aRet_List[0][0]+1][3] $aRet_List[$aRet_List[0][0]][0] = $aProcList[$i][0] ;Process Name $aRet_List[$aRet_List[0][0]][1] = $aProcList[$i][1] ;PID (Process ID) $aRet_List[$aRet_List[0][0]][2] = $aProcPath[3] ;Process File Path EndIf EndIf Next DllClose($hKernel32_Dll) DllClose($hPsapi_Dll) If $aRet_List[0][0] < 1 Then $iAuth = 0 Return SetError(3, 0, '') EndIf If $iAuth == 0 Then _Check_Pass($aRet_List) Return $aRet_List EndFunc Func _Check_Win($iPID) Local $hHWD = _ProcessGetWindow($iPID, 1) If StringInStr(WinGetTitle($hHWD), ' - Блокнот') Then If $iAuth == 0 Then WinSetState($hHWD, '', @SW_HIDE) EndIf Return 1 EndIf Return 0 EndFunc Func _Check_Pass($aRet_List) Local $sInputPass, $i, $hHWD $sInputPass = InputBox('Права доступа', 'Введите пароль доступа к Notepad', '', '*', 150, 150) If $sInputPass == $sPass Then ;~ $iAuth = 1 For $i=1 To $aRet_List[0][0] $hHWD = _ProcessGetWindow($aRet_List[$i][1], 1) WinSetState($hHWD, '', @SW_SHOW) WinActivate($hHWD) Next Else ;~ $iAuth = 0 For $i=1 To $aRet_List[0][0] ProcessClose($aRet_List[$i][1]) Next EndIf EndFunc Func _ProcessGetWindow($iPID, $iRet=-1) Local $aWinList = WinList() Local $aRet[2] If IsString($iPID) Then $iPID = ProcessExists($iPID) For $i = 1 To UBound($aWinList)-1 If WinGetProcess($aWinList[$i][1]) = $iPID Then $aRet[0] = $aWinList[$i][0] ;Title $aRet[1] = $aWinList[$i][1] ;WinHandle If $iRet = 0 Then Return $aRet[0] If $iRet = 1 Then Return $aRet[1] Return $aRet EndIf Next Return SetError(1, 0, $aRet) EndFunc |
------- Отправлено: 21:55, 20-03-2009 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать имхо FileInstall как раз для таких случаев - при компиляции скрипт "всасывает" файл проги в себя, при запуске - скрипт проверяет пароль, при успехе извлекает файл в нужное место и запускает, при закрытии проги удаляет файл
;#NoTrayIcon $sPassw = "qwerty" $sInput = InputBox("Проверка прав доступа", "Введите пароль:", "", "*") If Not($sPassw==$sInput) Then Exit MsgBox(16, "Ошибка", "Пароль неверен!") FileInstall("C:\Program Files\MyProgram\MyExe.exe", "C:\Program Files\MyProgram\MyExe.exe", 1) $iPID = Run("C:\Program Files\MyProgram\MyExe.exe", "C:\Program Files\MyProgram") If $iPID=0 Then Exit(1) Sleep(500) ProcessWaitClose($iPID) Sleep(500) FileDelete("C:\Program Files\MyProgram\MyExe.exe") |
|
Отправлено: 06:10, 21-03-2009 | #5 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать А если скрипт уже откомпилирован? Засосать его внутрь себя уже не получится?
|
Отправлено: 12:09, 21-03-2009 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать leprecon, нет - упаковка и включение в EXE происходит только в процессе компиляции
|
Отправлено: 13:56, 21-03-2009 | #7 |
Пользователь Сообщения: 65
|
Профиль | Отправить PM | Цитировать Цитата amel27:
|
|
Отправлено: 14:15, 27-07-2009 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Str_ani_ck:
|
|
Отправлено: 15:12, 27-07-2009 | #9 |
Пользователь Сообщения: 65
|
Профиль | Отправить PM | Цитировать Цитата amel27:
Суть ни в этом надо их распаковывать или нет, а втом можно всосать папку с файлами или нет??? Если можно, то напишите примерчик по жалуйста |
|
Отправлено: 15:24, 27-07-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Склеивание видеофайлов | Parovozik | Программное обеспечение Windows | 25 | 30-03-2012 19:02 | |
[решено] Интересует куда делись Regedit.exe | NTSD.exe | NETSETUP.exe | TELNET.exe | Ricardo | Проект WinStyle | 11 | 30-07-2009 23:36 | |
где найти файлы ntkrnlmp.exe ntkrnlpa.exe ntkrpamp.exe ntoskrnl.exe | krazy | Автоматическая установка Windows 2000/XP/2003 | 4 | 20-11-2008 15:20 | |
Склеивание 2 *.EXE в один? | V I R U S | Программное обеспечение Windows | 7 | 16-10-2006 02:06 |
|