Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: gal7
Дата сообщения: 28.11.2008 17:33
Хочу узнать трудно ли "сломать" скомпилированную программу Autoit с паролем - получить исходник или что-то там в ней отключить (какую-нибудь проверку)? Если легко ломается, может знаете как ее еще можно защищать от взлома?
Автор: CrazyNNM
Дата сообщения: 28.11.2008 20:26
хотелось бы вообще узнать как декомпилить программы автоит
ато я че-то пробовал exe2au3 причем из разных версий автоита, ничего не выходит
то говорит версия не подходит, то вообще это не на автоите написано......
пробую свои скрипты.....
Автор: promt
Дата сообщения: 28.11.2008 21:06
А можно по хендлу найти окно и закрыть его? Спасибо!
Автор: Zwook
Дата сообщения: 28.11.2008 21:18
Успешно сделал програмку в autoit которая помогает мне автоматизировать те вещи которые заимали у меня много времени в виндовс, чего только стоит стоит команда controlsend!! Думаю мои следущие вопросы посавят жирную точку на моем autoit-обрзовании.

№1 Мне нужно чтобы скрипт запускал файл, который лежит в той же папке, что и этот скомпелировный срипт. При этом, не указывать директоию! То есть, при перемещении скрипта автоматический изменялась бы директория, в ту где лежит этот скрипт. Как это сделать?

№2 Схожий вопрос, можно ли сделать так, чтобы скрипт сам себя выключал (То есть поностью выключился) и при этом занов запустился через X времени. Теоретический это можно было бы сделать поставив паузу в скипте, потом указать ему чтобы он запустил точно такой же скрипт и дальше exit. Можно ли сделать это иначе?

№3 Каким образом оптимально сделать GUI одного скрипта который бы запускал другие скрипты? Просто вставив туда GUICtrlCreateButton и указав на директорию нужны скриптов? Незню почеу, но что-то в этом способе мне не нравится! (Spider-Sense)

№4 А теперь вопрос на миллион, где можно найти подробный help про использоание .dll файлов для нахождением хендлов кнопок? Надеюсь вы меня поняли

Всем спасибо!
Автор: ViSiToR
Дата сообщения: 28.11.2008 21:55
gal7 18:33 28-11-2008
Цитата:
трудно ли "сломать" скомпилированную программу Autoit с паролем - получить исходник или что-то там в ней отключить (какую-нибудь проверку)?

Скажем так, тот, кому это сильно будет нужно, сможет это сделать


Цитата:
как ее еще можно защищать от взлома?

На 100% никак, ни одна программа от этого не защищена (тем более на AutoIt'е).
См эту тему (и можно ещё эту), там она измучена до конца(?).

CrazyNNM 21:26 28-11-2008
Цитата:
пробовал exe2au3 причем из разных версий автоита

Смотря из каких, скрипты из 3.2.5.1 ещё можно декомпилировать.

Добавлено:
promt 22:06 28-11-2008
Цитата:
можно по хендлу найти окно и закрыть его?

Хендлу чего, окна? - WinClose($hWnd).

Zwook 22:18 28-11-2008
Цитата:
№1 Мне нужно чтобы скрипт запускал файл, который лежит в той же папке, что и этот скомпелировный срипт. При этом, не указывать директоию! То есть, при перемещении скрипта автоматический изменялась бы директория, в ту где лежит этот скрипт. Как это сделать?


Так:


Код: Run(@ScriptDir & "\SomeFile.exe")
Автор: Spasibych
Дата сообщения: 29.11.2008 01:58
Подскажите, плиз, как возможно послать "^c" процессу запущенному Run, а не активному окошку?

Пример, что делаю:

Код: $pid = Run('ping -t 127.0.0.1', '', @SW_HIDE, $STDIN_CHILD & $STDOUT_CHILD)
Автор: ViSiToR
Дата сообщения: 29.11.2008 02:07
Spasibych 02:58 29-11-2008
Цитата:
чень нужно иметь возможность корректно послать сигнал завершения консольной проге

«^c» это и есть сигнал? а что если не один символ ^ посылать, а два:


Код: StdinWrite($pid, "^^c")
Автор: sproxy
Дата сообщения: 29.11.2008 02:29
Доброго времени суток.
Ребята, подскажите пожалуйста,
есть ли решение создания нормальных кнопко с иконками:
как с текстом, так и без текста.

Т.е. таких же кнопок как на главной панели в проводнике:
т.е. отображается иконка - наводишь курсор появляется
контур кнопки, и если нажать - будет видна нажатая кнопка?

Это как то возможно?

пока додумался только до стилей: $BS_ICON+$BS_FLAT....
Автор: ViSiToR
Дата сообщения: 29.11.2008 03:16
sproxy 03:29 29-11-2008
Цитата:
есть ли решение создания нормальных кнопко с иконками

Есть, решении есть несколько. Например создать кнопку из Lable'ов, для отражения контура выделения можно использовать библиотеку GUISetOnHover.
Но есть метод через API, он вроде попроще, но меньше возможностей (хотя...):


Код: #include <GUIConstants.au3>

Global Const $ILC_MASK = 0x0001
Global Const $ILC_COLOR32 = 0x0020

Global Const $BCM_FIRST = 0x1600
Global Const $BCM_SETIMAGELIST = $BCM_FIRST + 0x0002

Global Const $BUTTON_IMAGELIST_ALIGN_LEFT = 0
Global Const $BUTTON_IMAGELIST_ALIGN_RIGHT = 1
Global Const $BUTTON_IMAGELIST_ALIGN_TOP = 2
Global Const $BUTTON_IMAGELIST_ALIGN_BOTTOM = 3
Global Const $BUTTON_IMAGELIST_ALIGN_CENTER = 4 ; Doesn't draw text

$hGUI = GUICreate("Button With Icons + Text")

$btn1 = _GUICtrlCreateButton("Button1", 10, 10, 90, 25, -1, -1, "shell32.dll", 6, $BUTTON_IMAGELIST_ALIGN_LEFT)
$btn2 = _GUICtrlCreateButton("Button2", 10, 50, 90, 25, -1, -1, "shell32.dll", 21, $BUTTON_IMAGELIST_ALIGN_RIGHT)
$btn3 = _GUICtrlCreateButton("Button3", 10, 90, 50, 50, -1, -1, "shell32.dll", 32, $BUTTON_IMAGELIST_ALIGN_TOP)
$btn4 = _GUICtrlCreateButton("Button4", 10, 140, 50, 50, -1, -1, "shell32.dll", 14, $BUTTON_IMAGELIST_ALIGN_BOTTOM)

GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd

Exit

Func _GUICtrlCreateButton($sText,$iLeft,$iTop,$iWidth=-1,$iHeight=-1,$nStyle=-1,$nExStyle=-1,$sIconFile='', $nIconID=0, $nAlign=-1)
Local $nID = GUICtrlCreateButton($sText, $iLeft, $iTop, $iWidth, $iHeight, $nStyle, $nExStyle)

If $sIconFile = '' Then Return $nID

Local $hIL = ImageList_Create(16, 16, BitOr($ILC_MASK, $ILC_COLOR32), 0, 1)

Local $stIcon = DllStructCreate("int")
ExtractIconEx($sIconFile, $nIconID, DllStructGetPtr($stIcon), 0, 1)

ImageList_AddIcon($hIL, DllStructGetData($stIcon, 1))
DestroyIcon(DllStructGetData($stIcon, 1))

Local $stBIL = DllStructCreate("dword;int[4];uint")

DllStructSetData($stBIL, 1, $hIL)

DllStructSetData($stBIL, 2, 1, 1)
DllStructSetData($stBIL, 2, 1, 2)
DllStructSetData($stBIL, 2, 1, 3)
DllStructSetData($stBIL, 2, 1, 4)

DllStructSetData($stBIL, 3, $nAlign)

GUICtrlSendMsg($nID, $BCM_SETIMAGELIST, 0, DllStructGetPtr($stBIL))
Return $nID
EndFunc

Func ImageList_Create($nImageWidth, $nImageHeight, $nFlags, $nInitial, $nGrow)
Local $hImageList = DllCall('comctl32.dll', 'hwnd', 'ImageList_Create', _
'int', $nImageWidth, _
'int', $nImageHeight, _
'int', $nFlags, _
'int', $nInitial, _
'int', $nGrow)
Return $hImageList[0]
EndFunc

Func ImageList_AddIcon($hIml, $hIcon)
Local $nIndex = DllCall('comctl32.dll', 'int', 'ImageList_AddIcon', _
'hwnd', $hIml, _
'hwnd', $hIcon)
Return $nIndex[0]
EndFunc

Func ImageList_Destroy($hIml)
Local $bResult = DllCall('comctl32.dll', 'int', 'ImageList_Destroy', _
'hwnd', $hIml)
Return $bResult[0]
EndFunc

Func ExtractIconEx($sIconFile, $nIconID, $ptrIconLarge, $ptrIconSmall, $nIcons)
Local $nCount = DllCall('shell32.dll', 'int', 'ExtractIconEx', _
'str', $sIconFile, _
'int', $nIconID, _
'ptr', $ptrIconLarge, _
'ptr', $ptrIconSmall, _
'int', $nIcons)
Return $nCount[0]
EndFunc

Func DestroyIcon($hIcon)
Local $bResult = DllCall('user32.dll', 'int', 'DestroyIcon', _
'hwnd', $hIcon)
Return $bResult[0]
EndFunc
Автор: Maza_Faka
Дата сообщения: 29.11.2008 07:55
sproxy

Цитата:
есть ли решение создания нормальных кнопко с иконками

Смотри раздел GuiButton Management в справке.

Цитата:
наводишь курсор появляется
контур кнопки

Это Toolbar button.
Автор: Zwook
Дата сообщения: 29.11.2008 11:00

Цитата:
Так:


Код:Run(@ScriptDir & "\SomeFile.exe")


?


Да так


Цитата:
Через внешний обработчик комманд (cmd.exe) пойдёт?


Пойдет


Цитата:
Что именно не нравится? и для чего нужно подобное?


Хочу создать что-то вроде меню из котоого можно было бы удобно запускать и выключать нужные мне скрипты, я так понимаю если сделать скрипт в котором нескольо GuiCtrlCreateBtn и запустить через него другой(ие) скипты то во первых надо будет везде изменить Global ($) на Local ($)? Во вторых при использовании команды Exit оба скрипта вылетят? Ну и в третьих мне кажется, что ипользование такого метода может вызвать глюки(?) я не уверен.


Цитата:
Не совсем. Не обязательно использовать Dll для нахождения хендлов, тут всё зависит от того где это нужно, и при каких условиях.


Допустим мне нужно найти хендл кнопки программы которая включает/выключает сервисы и делает логи. Скажите каким методом лучше всего искать хендл? Это по сути обычная програма состоящая из окна и кнопок, ничего особенного.



#Edit:

Вот ещё один очень важный вопрос. У меня в скрипте несколько inputbox которые изменяют переменные. Как мне сдеать так, чтобы после первого запуска скрипта и ввода данных в inputbox'ы эти данные сохранялись к примеру в .ini файле и при последующим запуске скрипта брались данные оттуда?
Прикинул, что можно сделать If (@ScriptDir & "\SomeFile.ini") Then Брать оттуда данные. Вот только непонятно как эти данные туда поместить чтобы они читалсь.
Автор: Maza_Faka
Дата сообщения: 29.11.2008 12:17
Zwook

Цитата:
Допустим мне нужно найти хендл кнопки программы

ControlGetHandle()
Автор: Zwook
Дата сообщения: 29.11.2008 12:24

Цитата:
ControlGetHandle()


Ну так вот чтобы применить controlgethandle мне надо знать что искать.. Вот к примеру

Код: Run("notepad.exe")
$handle = ControlGetHandle("[CLASS:Notepad]", "", "Edit1")
Автор: sproxy
Дата сообщения: 29.11.2008 12:48
Maza_Faka, подскажи пожалуйста, где именно в справке раздел GuiButton Management, не нашел...

"Это Toolbar button" - ты имеешь ввиду определение такой кнопки?
или же такую панель можно создать?

Не скачивается:
AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf)
может кто нибуть выложит где нить?


ViSiToR, Maza_Faka, спасибо.
Автор: U235
Дата сообщения: 29.11.2008 12:51
Zwook

Цитата:
Как они нашли Edit1 ?

Например, программой AutoIt Window Info из дистрибутива AutoIt.
Автор: Zwook
Дата сообщения: 29.11.2008 13:08

Цитата:
Например, программой AutoIt Window Info из дистрибутива AutoIt.



Ммм не понимаю как она работает, на одну и ту же кнопку пишет 3 разных хендла причем О_о есть к ней хелп?
Автор: Spasibych
Дата сообщения: 29.11.2008 13:14
ViSiToR
Попробовал. Пока никак не выходит.
В хэлпе предлагается закрывать поток

Код: StdinWrite($pid)
Автор: ViSiToR
Дата сообщения: 29.11.2008 14:39
Zwook 12:00 29-11-2008
Цитата:
если сделать скрипт в котором нескольо GuiCtrlCreateBtn и запустить через него другой(ие) скипты то во первых надо будет везде изменить Global ($) на Local ($)

Это уже как в скрипте задумано, я то не знаю что там творится


Цитата:
при использовании команды Exit оба скрипта вылетят?

Почему? Запущеный скрипт это другой процесс


Цитата:
мне кажется, что ипользование такого метода может вызвать глюки(?) я не уверен

Смотря что конкретно делать, и главное, как это делать

P.S
Метод «Проб и ошибок» во многом мне помог дойти до истины


Цитата:
Как мне сдеать так, чтобы после первого запуска скрипта и ввода данных в inputbox'ы эти данные сохранялись к примеру в .ini файле и при последующим запуске скрипта брались данные оттуда?

Вот пример сохранения данных текущего сеанса GUI:


Код: #include <GuiConstants.au3>
#include <WindowsConstants.au3>

Global $ConfigFile = StringTrimRight(@ScriptFullPath, 3) & "ini"

$GUI = GUICreate("GUI Restore Position", 300, 200, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX))
_GUIRestorePositions($GUI, $ConfigFile)

GUISetState(@SW_SHOW, $GUI)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_GUISavePositions($GUI, $ConfigFile)
Exit
EndSwitch
WEnd

Func
_GUISavePositions($hGUI, $sConfigFile, $sSectName="Window Positions")
Local $aGUI_Pos = WinGetPos($hGUI)
If @error Then Return 0

IniWrite($sConfigFile, $sSectName, "Left", $aGUI_Pos[0])
IniWrite($sConfigFile, $sSectName, "Top", $aGUI_Pos[1])
IniWrite($sConfigFile, $sSectName, "Width", $aGUI_Pos[2])
IniWrite($sConfigFile, $sSectName, "Height", $aGUI_Pos[3])

Return 1
EndFunc

Func
_GUIRestorePositions($hGUI, $sConfigFile, $sSectName="Window Positions", $iDefWidth=300, $iDefHeight=200)
Local $iGUI_Left = IniRead($sConfigFile, $sSectName, "Left", -1)
Local $iGUI_Top = IniRead($sConfigFile, $sSectName, "Top", -1)
Local $iGUI_Width = IniRead($sConfigFile, $sSectName, "Width", $iDefWidth)
Local $iGUI_Height = IniRead($sConfigFile, $sSectName, "Height", $iDefHeight)

If $iGUI_Left = -1 Then $iGUI_Left = (@DesktopWidth / 2) - ($iGUI_Width / 2)
If $iGUI_Top = -1 Then $iGUI_Top = (@DesktopHeight / 2) - ($iGUI_Height / 2)

Return WinMove($hGUI, "", $iGUI_Left, $iGUI_Top, $iGUI_Width, $iGUI_Height)
EndFunc
Автор: Maza_Faka
Дата сообщения: 29.11.2008 14:48
Zwook

Цитата:
Как они нашли Edit1 ?



sproxy

Цитата:
где именно в справке раздел GuiButton Management

Online документация Ищи по названию _GuiCtrlButton_


Цитата:
Не скачивается:
AutoIt v3: Your Quick Guide (652 КБ)

Перезалил.
Автор: Nikkorot
Дата сообщения: 29.11.2008 16:44
Добрый вечер господа!
Подскажите пожалуйста,в шапке есть скрипт,который выводит список процессов с дополнительной инфой. Не могу разобраться как там в примере приводится получение информации об одном процессе, по какому параметру ?
Автор: ViSiToR
Дата сообщения: 29.11.2008 19:59
Nikkorot 17:44 29-11-2008
Цитата:
как там в примере приводится получение информации об одном процессе, по какому параметру ?

В чём состоит задача (проблема)? Там просто получается список всех процессов, и их информация (через API-вызовы).
Автор: Nikkorot
Дата сообщения: 30.11.2008 07:16
ViSiToR

Там вторым вызовом MsgBox в заголовке приводится пример вызова выборочного процесса, по каким параметрам это делается ?
Автор: ViSiToR
Дата сообщения: 30.11.2008 11:12
Nikkorot 08:16 30-11-2008
Цитата:
в заголовке приводится пример вызова выборочного процесса, по каким параметрам это делается ?

По имени ресурса файла. Т.е строка заложенная в exe'шнике, к примеру «Производитель» или «Описание». В данном случае возвращаются все процессы скомпилированных скриптов AutoIt'а, т.к в ресурсах (по умолчанию) они имеют метку «CompiledScript».
Автор: Nikkorot
Дата сообщения: 30.11.2008 11:48
А как это можно посмотреть ? Хотелось бы сделать проверку наличия определенного запущенного процесса по имени, и пути, откуда он запущен. В принципе можно это сделать приведенной сдесь функцией по $Pid, но хотелось бы отсдеживать ещё и путь, откуда запущен процесс.
Автор: ViSiToR
Дата сообщения: 30.11.2008 12:08
Nikkorot 12:48 30-11-2008
Цитата:
Хотелось бы сделать проверку наличия определенного запущенного процесса по имени, и пути, откуда он запущен



Код: $Path = _ProcessGetPath("AutoIt3.exe")
ConsoleWrite($Path)

;===============================================================================
;
; Function Name: _ProcessGetPath()
; Description: Get the executable path of certain process.
;
; Parameter(s): $vProcess - PID or name of a process.
;
; Requirement(s): AutoIt v3.2.8.1 or higher.
; Kernel32.dll (included with Windows)
; Psapi.dll (included with most Windows versions)
;
; Return Value(s): On Success - Returns full path to the executed process.
; On Failure - Returns -1 and sets @Error to:
; 1 - Given process not exists.
; 2 - Error to call Kernel32.dll.
; 3 - Error to open Psapi.dll.
; 4 - Unable to locate path of executed process,
; (or can be other error related to DllCall).
;
; Author(s): G.Sandler (a.k.a CreatoR) - CreatoR's Lab (http://creator-lab.ucoz.ru)
;
;===============================================================================

Func _ProcessGetPath($vProcess)
Local $iPID = ProcessExists($vProcess)
If Not $iPID Then Return SetError(1, 0, -1)

Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
If Not IsArray($aProc) Or Not $aProc[0] Then Return SetError(2, 0, -1)

Local $vStruct = DllStructCreate('int[1024]')

Local $hPsapi_Dll = DllOpen('Psapi.dll')
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(3, 0, '')

DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _
'hwnd', $aProc[0], _
'ptr', DllStructGetPtr($vStruct), _
'int', DllStructGetSize($vStruct), _
'int_ptr', 0)
Local $aRet = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _
'hwnd', $aProc[0], _
'int', DllStructGetData($vStruct, 1), _
'str', '', _
'int', 2048)

DllClose($hPsapi_Dll)

If Not IsArray($aRet) Or StringLen($aRet[3]) = 0 Then Return SetError(4, 0, '')
Return $aRet[3]
EndFunc
Автор: Nikkorot
Дата сообщения: 30.11.2008 12:18
Хм., спасибо большое, пройду пробовать.
Автор: Zwook
Дата сообщения: 30.11.2008 13:50
А теперь вопрос на который я реально нигде не смог найти ответа...

Можно ли сделать так, чтобы PixelSearch работал по заданой области, но при этом, если был ранее найден пиксель в этой области, то вокруг этого пикселя (к примеру на растоянии 25х25 от ранее найденного пикселя) не выполнялся поиск пикселя?
Это может быть как в том же самом цикле и можно это даже сделать в отдельной функции, вот только непонятно как это сделать.
Автор: vwr
Дата сообщения: 01.12.2008 15:03
для класса TPDocumentDbGrid можно ли запросить количество записей?
Автор: sproxy
Дата сообщения: 01.12.2008 15:15
Доброго времени....

Ребята, а не знаите ли как переименовать название ключа?

к примеру был HKEY_LOCAL_MACHINE\SOFTWARE\my_key
переименовать HKEY_LOCAL_MACHINE\SOFTWARE\my_key2

а то, имхо, схема: создать нужный - перекопировать все из старого - удалить старый,
уж очень не оригенальная.
Автор: Johny_x3mal
Дата сообщения: 01.12.2008 15:21
Доброго времени суток.
Мне бы хотелось сделать скрипт, который нажимал бы комбинацию кнопок по мере их появления. Почти разобрался, застрял на нажатии кнопок ). Т.е. варианты ответов на вопрос Да Нет Отмена, везде подчеркнута первая буква, т.е. можно нажать ALT+Буква, симулирую комбинацию send ({"!Н"}) и ничего...
Помогите разобраться, плиз.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.