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

» AutoIT

Автор: gal7
Дата сообщения: 24.09.2008 18:01
Ёлки...
А я все смотрю в русской справке. Сейчас глянул в английской-куча всего ещё. Спасибо!
Да... надо отучатся от привычного хелпа.
Автор: 4kusnik
Дата сообщения: 24.09.2008 18:47
Подскажите пожалуйста почему у меня не срабатывают скрипты

Код: DirGetSize ("C:\Windows")
Автор: ViSiToR
Дата сообщения: 24.09.2008 19:28
4kusnik
19:47 24-09-2008
Цитата:
почему у меня не срабатывают скрипты

Вам виднее, что ожидается от этих скриптов? И что происходит на самом деле?
Автор: 4kusnik
Дата сообщения: 24.09.2008 19:32

Цитата:
Вам виднее, что ожидается от этих скриптов? И что происходит на самом деле?

Ну судя по описанию первый скрипт должен выдать размер директории C:\Windows, а второй переместить директорию F:\OldFolder в H:\New Folder. На деле же не выполняется ни то ни другое.
Автор: ViSiToR
Дата сообщения: 24.09.2008 20:25
4kusnik
20:32 24-09-2008
Цитата:
судя по описанию первый скрипт должен выдать размер директории C:\Windows

Где это описание? функция DirGetSize() возвращает размер, она не выводит его на экран


Код:
$iSize = DirGetSize("C:\Windows", 0)
MsgBox(64, "", _GetDisplaySize($iSize))

Func _GetDisplaySize($iSize, $iPlaces = 2)
If $iSize <= 0 Then Return '0 Bytes'
Local $aBytes[5] = [' Bytes', ' KB', ' MB', ' GB', ' TB']

For $i = 4 To 1 Step -1
If $iSize >= 1024 ^ $i Then
Return
Round($iSize / 1024 ^ $i, $iPlaces) & $aBytes[$i]
EndIf
Next

Return
$iSize & ' Bytes'
EndFunc
Автор: 4kusnik
Дата сообщения: 24.09.2008 22:01

Цитата:
Где это описание?

Возможно я неправильно понял объяснение команды. А можно узнать куда она ее возвращает?

И еще вопрос для "одаренных", для чего перед функцией использовать еще и переменную, как в данном случае перед функцией DirGetSize переменную $iSize?
Автор: ViSiToR
Дата сообщения: 24.09.2008 23:59
4kusnik 23:01 24-09-2008
Цитата:
можно узнать куда она ее возвращает?

Наружу, куда укажите ...


Цитата:
для чего перед функцией использовать еще и переменную

Как раз для того чтобы возвращаемое значение с функции сохранить
Автор: Tipulatoid
Дата сообщения: 25.09.2008 16:10
Можно ли сделать input с прикрученным к нему updown, который бы изменял значения от 0 до 1 с шагом 0.1?
Автор: gal7
Дата сообщения: 25.09.2008 20:25
Нужно в цикле завершать процессы IE (появился-убрать), но почему-то функция ProcessList() не срабатывает. Точнее например если запустить сначала IE, а затем скрипт, то первый раз убирается, а если потом запустить, то не убирается(нет в возвращаемом листе). Еще заметил, что если открыть при этом диспетчер задач, то процесс IE появляется и скрипт срабатывает(в момент открывания). Почему так происходит и можно ли что-то сделать ?
Автор: timsky
Дата сообщения: 25.09.2008 22:11
gal7

Цитата:
While 1
If ProcessExists ('iexplore.exe') Then ProcessClose ('iexplore.exe')
Sleep (100)
Wend


4kusnik
Грубо говоря, в программировании все строется на этом.
Выполняется ф-я, а результат дожен куда-то сохраняться/подставляться/присваиваться какой-то переменной. Это не искуственный интеллект. Ты сам должен продумать, как должна работать программа.

DirGetSize ("C:\Windows")

Цитата:
Ну судя по описанию первый скрипт должен выдать размер директории C:\Windows

Нихрена ты не понял из описания Эта ф-я только опредетяет размер папки, но о "выдаче" этой инфы ни слова. Вот что тебе ответили добрые люди:

$iSize = DirGetSize("C:\Windows", 0)

Что имеем здесь. Выполняется ф-я DirGetSize(). В скобках параметры ее выполнения, т.е. Папка C:\Windows, флаг - 0, т.е. тупо определить размер этой папки без всяких извращений. Ф-я отработала и представь что теперь вместо DirGetSize... подставляется размер папки в байтах: $iSize = 1560256 например. Т.е. переменная $iSize стала равна 1560256.
Теперь осталось только вывести на экран сохраненную в переменной инфу либо вышеуказанным навороченным способом, либо таким простейшим:
MsgBox (64,'Папка Windows весит','дохрена: ' & $iSize & ' байт')

Автор: ViSiToR
Дата сообщения: 25.09.2008 23:26
Tipulatoid 17:10 25-09-2008
Цитата:
Можно ли сделать input с прикрученным к нему updown, который бы изменял значения от 0 до 1 с шагом 0.1?

Нужно проверять инпут при событии UpDown...


Код: #include <GuiConstantsEx.au3>
#include <EditConstants.au3>

Global $Last_Set_Value = 0

$GUI = GUICreate("Test Script", 300, 200)

$Input = GUICtrlCreateInput(0, 20, 40, 80, 20, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY))
$UpDown = GUICtrlCreateUpdown($Input)
GUICtrlSetBkColor($Input, 0xFFFFFF)

GUISetState(@SW_SHOW, $GUI)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case
$UpDown
Local $Input_Value = Number(GUICtrlRead($Input))

If $Input_Value > $Last_Set_Value Then
$Last_Set_Value += 0.1
ElseIf $Input_Value < $Last_Set_Value Then
$Last_Set_Value -= 0.1
EndIf

GUICtrlSetData($Input, $Last_Set_Value)
EndSwitch
WEnd
Автор: gal7
Дата сообщения: 26.09.2008 08:55
Ну да, по-сути так я и делал. Сначала все нормально завершает, а потом если опять запустить IE, то его не видит. Автоитом это уже не исправить?
Автор: Hackproof
Дата сообщения: 26.09.2008 09:09
В продолжение проблем с сетью:
Всё-таки при строке TCPClose($socketmon) соединение остается висеть в закрывающемся состоянии, а при TCPClose($check) оно закрывается сразу. Забавно...
Автор: NIKZZZZ
Дата сообщения: 26.09.2008 09:42
Есть такая задача.
Скрипт стоит в AutoRun.
Нужно, чтобы он не выполнялся , если удерживается определенная комбинация нажатых клавиш. (проверка , и если да - завершение его работы)
И более общая задача, перехватить нажатие клавиш, подобно keylogger ?



Автор: Tipulatoid
Дата сообщения: 26.09.2008 10:01
ViSiToR
Спасибо. Спросил на офф. форуме, поправили так
Код: #include <GuiConstantsEx.au3>
#include <EditConstants.au3>
#include <UpDownConstants.au3>

Global $Last_Set_Value = 0

$GUI = GUICreate("Test Script", 300, 200)

; UP/Down control locks up at 1000 (100) without $UDS_NOTHOUSANDS style and GUICtrlSetLimit()
$Input = GUICtrlCreateInput(0, 20, 40, 80, 20, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY))
; $UDS_NOTHOUSANDS Prevents insertion of a thousands separator between every three decimal positions.
; $UDS_ARROWKEYS up-down control processes the UP and DOWN ARROW keys.
$UpDown = GUICtrlCreateUpdown($Input, BitOR($UDS_NOTHOUSANDS, $UDS_ARROWKEYS))
GUICtrlSetLimit($UpDown, 1000, -1000) ; set up/down range (MAX 32767, MIN -32768)
GUICtrlSetBkColor($Input, 0xFFFFFF)

GUISetState(@SW_SHOW, $GUI)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $UpDown
If Mod(GUICtrlRead($Input), 10) = 0 Then
GUICtrlSetData($Input, GUICtrlRead($Input)/10&".0")
Else
GUICtrlSetData($Input, GUICtrlRead($Input)/10)
EndIf
EndSwitch
WEnd
Автор: Maza Faka
Дата сообщения: 26.09.2008 12:37
gal7

Цитата:
Сначала все нормально завершает, а потом если опять запустить IE, то его не видит. Автоитом это уже не исправить?

Покажи код.

NIKZZZZ

Цитата:
Скрипт стоит в AutoRun

Не понял


Цитата:
И более общая задача, перехватить нажатие клавиш, подобно keylogger ?

Пример с офф. форума, вроде бы уже было...

Код: Global Const $WH_KEYBOARD_LL = 13
Global $hHook, $pStub_KeyProc

Global $pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")

Global $hmod = DllCall("kernel32.dll","hwnd","GetModuleHandle","ptr",0)
Global $hHook = DllCall("user32.dll","hwnd","SetWindowsHookEx","int", _
$WH_KEYBOARD_LL,"ptr",DllCallbackGetPtr($pStub_KeyProc),"hwnd",$hmod[0],"dword",0)
Global $buffer = ""

MsgBox(4096,"","Type anything anywhere and it will appear in the top left corner of the screen.")

While 1
Sleep(10)
WEnd

Func
EvaluateKey($keycode)
If (($keycode > 22) And ($keycode < 91)) _
Or (($keycode > 47) And ($keycode < 58)) Then
$buffer &= Chr($keycode)
ToolTip($buffer,0,0)
ElseIf ($keycode > 159) And ($keycode < 164) Then
Return
EndIf
EndFunc

Func
_KeyProc($nCode, $wParam, $lParam)
Local $ret,$KEYHOOKSTRUCT
If $nCode < 0 Then
$ret = DllCall("user32.dll","long","CallNextHookEx","hwnd",$hHook[0], _
"int",$nCode,"ptr",$wParam,"ptr",$lParam)
Return $ret[0]
EndIf
If $wparam = 256 Then
$KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr",$lParam)
EvaluateKey(DllStructGetData($KEYHOOKSTRUCT,1))
EndIf
$ret = DllCall("user32.dll","long","CallNextHookEx","hwnd",$hHook[0], _
"int",$nCode,"ptr",$wParam,"ptr",$lParam)
Return $ret[0]
EndFunc

Func OnAutoItExit()
DllCall("user32.dll","int","UnhookWindowsHookEx","hwnd",$hHook[0])
DllCallbackFree($pStub_KeyProc)
EndFunc
Автор: ViSiToR
Дата сообщения: 26.09.2008 12:47
NIKZZZZ 10:42 26-09-2008
Цитата:
Нужно, чтобы он не выполнялся , если удерживается определенная комбинация нажатых клавиш

Обычно проверяется через _IsPressed.


Цитата:
перехватить нажатие клавиш, подобно keylogger ?

Я кажется приводил уже пример, найти не удалось, но вот ссылка на пример с офф. форума.
Автор: BIOS999
Дата сообщения: 26.09.2008 17:50
Всем привет
Помогите пожалуйста:
Каким образом можно считать параметры железа.
Заранее спасибо.
Автор: Hackproof
Дата сообщения: 26.09.2008 18:31
Какие параметры, и какого железа? Некоторые полезные фишки есть в разделе System Info Macros, типа @ProcessorArch.

Долго курил мануал, так и не нашёл нужного.
Можно ли сделать вот такую всплывающую подсказку на элементе формы, при каком-нибудь событии? Чтобы ее можно было создать в любое время в любом месте НЕ по наведению мышкой, как GuiCtrlSetTip, а именно по ходу программы, примерно вот так.
Автор: gal7
Дата сообщения: 26.09.2008 18:41
Я использовал ProcessList () и потом проверял каждый процесс на соответствие искомому, так не находил. ProcessExists () срабатывает как надо, ничего не остается, буду пользоваться им. Я просто подумал, что он будет тоже самое делать, только много раз(много процессов ищется), поэтому и решил использовать ProcessList () один раз, а потом разбирать то, что она возвратит.
Автор: ViSiToR
Дата сообщения: 26.09.2008 20:25
BIOS999 18:50 26-09-2008
Цитата:
Каким образом можно считать параметры железа

Смотря какие параметры, что именно интересует?

Hackproof 19:31 26-09-2008
Цитата:
Чтобы ее можно было создать в любое время в любом месте НЕ по наведению мышкой, как GuiCtrlSetTip, а именно по ходу программы, примерно вот так

Вот нечто похожее, правда минус в том что нет кнопки закрытия у этой подсказки, но думаю и это реально сделать:


Код: #include <GuiConstants.au3>

$GUI = GUICreate("Test Script", 300, 200)

$Button = GUICtrlCreateButton("Button", 90, 90, 60, 20)

GUISetState(@SW_SHOW, $GUI)

Sleep(1000)
_ToolTip_OnControl($GUI, $Button, "My ToolTip", "Some Title", 1, 5, 2)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd

Func
_ToolTip_OnControl($hWnd, $nCtrl, $sText, $sTitle="", $iIcon=0, $iOptions=0, $iTimeOut=0)
If Not IsDeclared("hWnd") Then
AdlibDisable()
ToolTip("")
Return
EndIf

Local
$aCtrlPos = ControlGetPos($hWnd, "", $nCtrl)
If @error Then Return SetError(1, 0, 0)

Local $stPoint = DllStructCreate("int;int")

DllStructSetData($stPoint, 1, $aCtrlPos[0])
DllStructSetData($stPoint, 2, $aCtrlPos[1])

DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))

ToolTip($sText, DllStructGetData($stPoint, 1) + 25, DllStructGetData($stPoint, 2) + 10, $sTitle, $iIcon, $iOptions)

If $iTimeOut > 0 Then AdlibEnable("_ToolTip_OnControl", $iTimeOut * 1000)
EndFunc
Автор: Hackproof
Дата сообщения: 26.09.2008 21:00
Закрытие не принципиально, а вот наличие таймаута, значков и вызов одной строкой - это вообще восторг.
Автор: Rage Hunter
Дата сообщения: 27.09.2008 02:45
Здравствуйте!
Помогите пожалуйста!

Есть физический сервер на нем установлены сервера игровые, некоторые из них вылетают, показывая окно с ошибкой. В этом окне одна кнопка - это "OK", при нажатии на которую сервер перезапускается. Суть в том что мы пока не можем устранить данную ошибку и хотелось бы просто сделать так чтобы это окно само, автоматически закрывалось. Пробовал использую AutoIt v3 написать что то путевое но не получается, последнее на чем я остановился это


Код: Func ErrorClosed()
If WinExists("srcds.exe - Application Error") Then
If Not WinActive("srcds.exe - Application Error","") Then WinActivate("srcds.exe - Application Error","")
EndIf
If WinActive("srcds.exe - Application Error","") Then ControlClick("srcds.exe - Application Error","","Button1")
EndFunc

Sleep ("5000")
ErrorClosed()
Sleep ("5000")
ErrorClosed()
Sleep ("5000")
ErrorClosed()
Sleep ("5000")
ErrorClosed()
Sleep ("5000")
ErrorClosed()
Sleep ("5000")
ErrorClosed()
Sleep ("5000")
ErrorClosed()
....................

Автор: ViSiToR
Дата сообщения: 27.09.2008 03:58
Rage Hunter 03:45 27-09-2008
Цитата:
он работает, но тока на компе, на физ сервере почему-то не хочет правильно работать

А если просто закрывать окно?


Код: While 1
If WinExists("srcds.exe - Application Error") Then WinClose("srcds.exe - Application Error")
Sleep(100)
WEnd
Автор: Maza Faka
Дата сообщения: 27.09.2008 09:36
ViSiToR

Цитата:
минус в том что нет кнопки закрытия у этой подсказки

Hackproof

Цитата:
Закрытие не принципиально


Ещё один вариант:

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

$GUI = GUICreate("Test Script", 300, 200)

$hIcon = GUICtrlCreateIcon("shell32.dll", -2, 120, 20)

$Button = GUICtrlCreateButton("Show hint", 100, 120, 75, 25)

GUISetState(@SW_SHOW, $GUI)

Sleep(1000)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case
$Button
_ToolTip_OnControl($GUI, $hIcon, "My ToolTip", "Some Title", 1, 5)
EndSwitch
WEnd

Func
_ToolTip_OnControl($hWnd, $nCtrl, $sText, $sTitle = "", $iIcon = 0, $iOptions = 0)
Local $aCtrlPos = ControlGetPos($hWnd, "", $nCtrl)
If @error Then Return SetError(1, 0, 0)

Local $stPoint = DllStructCreate("int;int")

DllStructSetData($stPoint, 1, $aCtrlPos[0])
DllStructSetData($stPoint, 2, $aCtrlPos[1])

DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))

ToolTip($sText, DllStructGetData($stPoint, 1) + 25, DllStructGetData($stPoint, 2) + 10, $sTitle, $iIcon, $iOptions)

Local $hToolTip = WinGetHandle("My ToolTip")
If @error Then Return

$sTemp = _WinAPI_GetWindowLong($hToolTip, $GWL_STYLE)

_WinAPI_SetWindowLong($hToolTip, $GWL_STYLE, BitOR($sTemp, 0x00000080))

ToolTip($sText, DllStructGetData($stPoint, 1) + 25, DllStructGetData($stPoint, 2) + 10, $sTitle, $iIcon, $iOptions)
EndFunc
Автор: NIKZZZZ
Дата сообщения: 27.09.2008 11:40
Maza Faka

Цитата:
Скрипт стоит в AutoRun
Не понял

Имеется ввиду автозагрузка Windows.
Скрипт перехвата клавиатуры прекрасно работает. Идея состояло в том, чтобы заблокировать скрипт с возможностью его разблокирования.
ViSiToR

Цитата:
_IsPressed.

Тяжело стало что-то искать в хелпе, слишком много всего, Misc Management я и прозевал

Теперь другой вопрос, можно ли получить прямой доступ к диску на запись? Нужно модифицировать загрузочный сектор флэшки. Читается он нормально, если использовать в FileOpen() UNC путь. А вот как записать его обратно?



Автор: BIOS999
Дата сообщения: 27.09.2008 18:03
Я хочу прмвязать мою прогу к конкретному железу.
Поэтому я хочу узнать индивидуальные параметры какого-нибудь железа.
Например серийник материнской платы
Автор: Hackproof
Дата сообщения: 27.09.2008 19:16
Maza Faka - уж очень страшно выглядит, боюсь придется коммент добавлять "Писал не я, как работает - не знаю, трогать боюсь". Мне как-то спокойней, когда я понимаю весь код. В первом примере я вроде как разобрался - создается ToolTip, который я пропустил в мануале, а функция вычисляет координаты для него...

И еще, для окончательного просветления: local - это объявление переменной только для текущей функции, а global - для всей программы?
Автор: Tipulatoid
Дата сообщения: 28.09.2008 02:04
Hackproof

Цитата:
И еще, для окончательного просветления: local - это объявление переменной только для текущей функции, а global - для всей программы?

Да. Цитата из русской справки (есть и такая)

Цитата:
Отличие описаний (Dim/Local/Global) связано с областью (scope) реализации и видимости:
Dim = локальная область видимости, если эта переменная ранее не объявлялясь в качестве глобальной. В последнем случае - глобальная переменная!
Global = принудительно глобальная переменная
Local = принудительно локальная переменная в локальной/функциональной области видимости

Для явного указания области видимости переменной/константы/массива вместо Dim следует использовать Local или Global variable/constant/array.
Автор: Maza Faka
Дата сообщения: 28.09.2008 06:44
Hackproof

Цитата:
уж очень страшно выглядит, боюсь придется коммент добавлять "Писал не я, как работает - не знаю, трогать боюсь"

Пройдёт со временем Кстати, в первом примере используется понятный тебе код с добавлением кнопки закрытия ToolTip-а.


Цитата:
И еще, для окончательного просветления: local - это объявление переменной только для текущей функции, а global - для всей программы?

Угу.

BIOS999

Цитата:
Например серийник материнской платы

Проги обычно к HDD привязывают

Код: $strComputer = "."

$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_PhysicalMedia")

For $objItem In $colItems
MsgBox(0, "HDD serial number", $objItem.SerialNumber)
Next

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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