Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Склеивание с exe файлами.

Ответить
Настройки темы
[решено] Склеивание с exe файлами.

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Я тоже так думал, но это спасет только от неграмотных пользователей. Более менее разбирающиеся полезут в папку с программой и попытаются запуститься с самого exe-шника. ( ну я бы поступил так )

Отправлено: 21:52, 20-03-2009 | #3


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить 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
Благодарности: 1563

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


А если скрипт уже откомпилирован? Засосать его внутрь себя уже не получится?

Отправлено: 12:09, 21-03-2009 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


leprecon, нет - упаковка и включение в EXE происходит только в процессе компиляции

Отправлено: 13:56, 21-03-2009 | #7


Пользователь


Сообщения: 65
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата amel27:
leprecon, нет - упаковка и включение в EXE происходит только в процессе компиляции »
А как зделать чтобы скрипт в себя всосал папку с файлами? Только распаковывать их никуда не нужно?

Отправлено: 14:15, 27-07-2009 | #8


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Str_ani_ck:
Только распаковывать их никуда не нужно? »
а зачем тогда "всасывать"?
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:12, 27-07-2009 | #9


Пользователь


Сообщения: 65
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата amel27:
а зачем тогда "всасывать"? »
Так можно или нет????

Суть ни в этом надо их распаковывать или нет, а втом можно всосать папку с файлами или нет???
Если можно, то напишите примерчик по жалуйста

Отправлено: 15:24, 27-07-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Склеивание с exe файлами.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Склеивание видеофайлов 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




 
Переход