[архив - Часть 2] AutoIt скрипты

Ответить
 • Просмотры: 15
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Angelus


Цитата:



Я хочу просто открыть провадник в какойто папке
[архив - Часть 2] AutoIt скрипты




вот пример:

Код:

Код: Выделить всё

$sPathSelect = "C:\Windows\System32"
Run ("explorer.exe "&$sPathSelect, @SystemDir)

есть возможность даже выбрать папку/файл:

Код:

Код: Выделить всё

$sPathSelect = "C:\Windows\System32"
Run ("explorer.exe /e, /select, "&$sPathSelect, @SystemDir)

FYI:
Настройка параметров отображения проводника в Windows XP
Аватара пользователя
amel27

Re: [архив - Часть 2] AutoIt скрипты

Сообщение amel27 »

amel27,


Цитата:



хотя можно попытаться порулить политикой питания, на ентот счет есть свои API и, к примеру, менять эти настройки на время блокировки



О, это думаю будет проще/надёжнее, а как туда подрулить? Изображение , т.к пересмотрев страничку по ссылке что ты дал, я так и не понял как на AutoIt это дело перевести...




Цитата:



вот вариант для версии 3.2.8.1



Гинеально! Изображение Оно и вправду работает, спасибо!

Может на оф. форуме выложить, пусть поправят в оригинале?




Цитата:



обнаружил что, в 10-ке алгоритм более продуманный в плане производительности.



В UDF'ах? или сам движек AutoIt'а?



Angelus,


Цитата:



просто открыть провадник в какойто папке



Можно просто через ShellExecute(@SystemDir).
Аватара пользователя
amel27

Re: [архив - Часть 2] AutoIt скрипты

Сообщение amel27 »

Creat0R


Цитата:



а как туда подрулить?
[архив - Часть 2] AutoIt скрипты




хм, у меня этот способ как-то странно работает... отключаются клавиши вроде сразу после применения политики, а вот включаться обратно не хотят - требуется перезагрузка компа... помучаю еще чуть Изображение


Цитата:



Может на оф. форуме выложить, пусть поправят в оригинале?
[архив - Часть 2] AutoIt скрипты




да я не против, ткни куда выложить... только вот непонятно под какую версию делать UDF - новую или старую?... с другой стороны какой смысл править статус бар, если есть куча других несовместимых с иникодом GUI-функций?


Цитата:



В UDF'ах? или сам движек AutoIt'а?
[архив - Часть 2] AutoIt скрипты




в старом UDF был единый алгоритм для "своих" и "чужих" окон, в новом варианте "свои" GUI-окна пустили по короткому алгоритму
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

amel27,

Спасибо, но функция всегда возвращает 0 Изображение , у меня на компе установлен Flash Player.

Объекта SWCtl.SWCtl у меня нет, возможно это не стандартный объект...



Но вот piccaso вроде
нашёл решение
, у меня, где есть флэш (для IExplorer), возвращает 9, на компе без флэша пока нет возможности проверить:





Код:

Код: Выделить всё

Global $oErr = ObjEvent("AutoIt.Error","_ComError")
ConsoleWrite(_FlashMajorVersion()  & @CRLF)
Func _FlashMajorVersion()
    Local $oSwf,$sVersion
    $oSwf = ObjCreate("ShockwaveFlash.ShockwaveFlash")
    if @error Then Return 0 ; No flash at all
    $oSwf.AllowScriptAccess = "always"
    $sVersion = $oSwf.GetVariable("$version")
    if @error Then
       $oSwf = ObjCreate("ShockwaveFlash.ShockwaveFlash.3")
       if @error Then
         $oSwf = ObjCreate("ShockwaveFlash.ShockwaveFlash.2")
         if @error then return 0
         Return 2
       EndIf
       Return 3
    EndIf
    $sVersion = StringTrimLeft($sVersion,3)
    $sVersion = StringLeft($sVersion,StringInStr($sVersion,",")-1)
    Return Number($sVersion)
EndFunc
Func _ComError()
   ; Just set @error, the script will handle it...
   Local $iErr = $oErr.number
   if $iErr = 0 Then $iErr = -1
   SetError($iErr)
EndFunc


Цитата:



на базе скрипта-кейлоггера получилось вот что



Изображение Получилось то что надо!!! я правда поменял концепцию примера, во-первых потому то ещё не ставил последнюю версию, а во-вторых потому что мне нужно иметь возможность включать/выключать клавиатуру по запросу (не при выходе из скрипта)...





Код:

Код: Выделить всё

#include <DllCallBack.au3>
Global $hWinHook
$CallBackProc = TogglePlugKeyBoard()
MsgBox(4096, "", "Клавиатура заблокирована, нажмите OK для разблокирования.")
TogglePlugKeyBoard($CallBackProc)
MsgBox(4096, "", "Клавиатура разблокирована!")
Exit
Func TogglePlugKeyBoard($hCallProc=0)
    If IsArray($hWinHook) Then
        DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hWinHook[0])
        _DllCallBack_Free($hCallProc)
        Return 0
    EndIf
    Local Const $WH_KEYBOARD_LL = 13
    Local $hKeyProc = _DllCallBack("_KeyProc", "int;ptr;ptr")
    Local $hMod = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
    $hWinHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", _
        "int", $WH_KEYBOARD_LL, _
        "ptr", $hKeyProc, _
        "hwnd", $hMod[0], _
        "dword", 0)
    Return $hKeyProc
EndFunc
Func _KeyProc($nCode, $wParam, $lParam)
    If $nCode < 0 Then
        Local $iRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hWinHook[0], _
            "int", $nCode, _
            "ptr", $wParam, _
            "ptr", $lParam)
        Return $iRet[0]
    EndIf
    Return 1
EndFunc

Но это мелочи, главное что оно блокирует все(?) клавишы, на любой клавиатуре Изображение



P.S

Кстати, функция OnAutoItExit вызывается по умолчанию, её не обязательно вызывать ( OnAutoItExit() ).
Аватара пользователя
amel27

Re: [архив - Часть 2] AutoIt скрипты

Сообщение amel27 »

видимо моя проблема так и не решится Изображение(
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

amel27,


Цитата:



у меня после установки плеера объект появился



И ещё у многих... видимо это что-то специфичное/системно-зависимое/условное Изображение



Я на днях (максимум в субботу) проверю скрипт от piccaso, мне кажется что он сработает (вернёт 0 или ошибку).



По поводу примера для клавы... есть подозрение что это тот же BlockInput, только для клавиатуры, т.к Ctrl Alt Del всё же работает (клаву не включает, но вызывает Диспетчер задач)... нет, я конечно не хочу блокировать и эти клавиши, но просто интересно, действительно ли блокируются все клавиши кроме этих, как бы это проверить точно?
Аватара пользователя
amel27

Re: [архив - Часть 2] AutoIt скрипты

Сообщение amel27 »

Maza Faka

пролистай назад, требуется автоматизация задач:



- регистрация на сайте (линк дан);

- заливка на сайт файлов.



Creat0R


Цитата:



я до сих пор не понял, для чего функция _GUICtrlStatusBarSetUnicode()? что она делает?
[архив - Часть 2] AutoIt скрипты




Судя по немногочисленным
примерам
переключает контрол в юникодовый режим, только я плохо представляю как можно передать юникодовый текст ANSI-сообщением... и тем более в каком он должен быть формате: UTF-8 или UTF-16?.. И еще настораживает тот факт, что в тырнете по сообщениям типа SB_SETUNICODEFORMAT инфа практически отсутствует... ИМХО все же перед тем как постить свой вариант нужно определиться чем не устраивает предложенный разработчиками способ...


Цитата:



предложить чтобы добавили дополнительный параметр $iUFlag
[архив - Часть 2] AutoIt скрипты




кроме прочего это будет идти в разрез с ихней кодировкой форматов


Цитата:



может всё же возможно определить не является ли строка юникодной?
[архив - Часть 2] AutoIt скрипты




можно проверить на соответствие строки
требованиям формата
, к примеру для UTF-8:

Код:

Код: Выделить всё

Func _StringIsUTF8Format($string)
    Local $asc, $i, $j, $len = StringLen($string), $ext = $len
    For $i=1 To $len
        $asc = Asc(StringMid($string, $i, 1))
        If Not(BitAnd($asc,0x80)) Then
            $ext=0
        ElseIf Not(BitXOR(BitAnd($asc,0xE0),0xC0)) Then
            $ext=1
        ElseIf Not(BitXOR(BitAnd($asc,0xF0),0xE0)) Then
            $ext=2
        ElseIf Not(BitXOR(BitAnd($asc,0xF8),0xF0)) Then
            $ext=3
        EndIf
        If $i+$ext>$len Then Return False
        For $j = $i+1 To $i+$ext
            $asc = Asc(StringMid($string, $j, 1))
            If BitXOR(BitAnd($asc,0xC0),0x80) Then Return False
        Next
        $i+=$ext
    Next
    Return True
EndFunc
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

amel27,


Цитата:



эта комбинация неотключаемая aka "in design"



Я как бы знал это, но мне не нужно их отключать, а просто убедиться что всё остальное действительно отключено... у тебя случайно на клаве нет лишних кнопочек? Изображение например Power/Sleep которая обычно делает то, что на ней написано Изображение




Цитата:



подправил штатную _GUICtrlStatusBar_SetText() для случая юникода...



Эх, не дано мне пока этим воспользоваться, я не ставил ещё последнюю версию, боюсь Изображение - у меня много скриптов, всё мгновенно поламется, желание сразу пропадёт что либо там менять Изображение .



Но всё ровно конечно спасибо, когда обновлюсь (не скоро видимо) оно мне пригодится.
Аватара пользователя
amel27

Re: [архив - Часть 2] AutoIt скрипты

Сообщение amel27 »

HORRIBLE


Цитата:



Как написать, что я зажал кнопку SHIFT ?





Код:

Код: Выделить всё

Send("{+ Down}")


Цитата:



INSTANCE:2 - что это такое и откуда это берется?



Это вроде порядкового номера кнопки, если кнопок несколько, то у каждой свой INSTANCE.



В справке всё это обьясняется и очень подробно!
Аватара пользователя
SvetlanaK

Re: [архив - Часть 2] AutoIt скрипты

Сообщение SvetlanaK »

Цитата Maza Faka:



Send("{+ Down}")
[архив - Часть 2] AutoIt скрипты




не так, Shift+Down это будет: Send("+{Down}")




Цитата HORRIBLE:



есть команда ControlClick("Adobe Acrobat 8 Professional", "", "[CLASS:Button; TEXT:Accept; INSTANCE:2]")

[...] что это такое
[архив - Часть 2] AutoIt скрипты




то же самое что ControlClick("Adobe Acrobat 8 Professional", "", "Button2")



Creat0R

вроде разобрался как управлять кнопками питания, вот UDF и пример:

Код:

Код: Выделить всё

Global Const $PowerActionNone = 0
Global Const $PowerActionReserved = 1
Global Const $PowerActionSleep = 2
Global Const $PowerActionHibernate = 3
Global Const $PowerActionShutdown = 4
Global Const $PowerActionShutdownReset = 5
Global Const $PowerActionShutdownOff = 6
Global Const $PowerActionWarmEject = 7
Dim $aOFF[3]=[0,0,0]
$aBAK = PowerKeysCallState($aOFF) ; читаем/записываем состояние клавиш
MsgBox(0,'','Клавиши питания заблокированы!')
PowerKeysCallState($aBAK) ; восстанавливаем состояние клавиш
MsgBox(0,'','Состояние клавиш восстановлено!')
; $aKeys[0] - Power Key Action
; $aKeys[1] - Sleep Key Action
; $aKeys[2] - NoteBook Close Action
Func PowerKeysCallState($aKeys = 0)
    Local Const $SysPwrPolLen = 232 ; size of SYSTEM_POWER_POLICY structure
    Local $buf = DllStructCreate("byte["&$SysPwrPolLen&"]")
    Local $tmp = DllStructCreate("long;int;long[2];int;long[2];int;long[2]", DllStructGetPtr($buf))
    ; Чтение текущей системной политики питания
    Local $ret = DllCall("PowrProf.dll", "int", "CallNtPowerInformation", "int", 0, _
        "ptr", 0, "int", 0, "ptr", DllStructGetPtr($buf), "int", DllStructGetSize($buf))
    If Not(IsArray($ret)) Then SetError(1, @error) ; ошибка DLL
    If $ret[0] Then Return SetError(2, $ret[0])    ; ошибка чтения политики
    ; Сохранение текущей конфигурации клавиш в выходном массиве
    Local $i, $res[3]
    For $i=1 To 3
        $res[$i-1] = DllStructGetData($tmp,$i*2)
    Next
    ; Сохранение требуемой конфигурации в структуре данных политики
    If UBound($aKeys,1)=3 Then ; проверка типа данных
        For $i=1 To 3
            If BitShift($aKeys[$i-1],3)=0 Then ; проверка допустимого значения
                DllStructSetData($tmp, $i*2, $aKeys[$i-1])
                If $aKeys[$i-1]=0 Then DllStructSetData($tmp,$i*2+1,BitOR (DllStructGetData($tmp,$i*2+1,2),0x80000000),2)
                If $aKeys[$i-1]>0 Then DllStructSetData($tmp,$i*2+1,BitAND(DllStructGetData($tmp,$i*2+1,2),0x7FFFFFFF),2)
            EndIf
        Next
        ; Применение новой политики
        $ret = DllCall("PowrProf.dll", "int", "CallNtPowerInformation", "int", 0, _
            "ptr", DllStructGetPtr($buf), "int", $SysPwrPolLen, "ptr", 0, "int", 0)
        If Not(IsArray($ret)) Then SetError(1, @error) ; ошибка DLL
        If $ret[0] Then Return SetError(3, $ret[0])    ; ошибка записи политики
    EndIf
    Return $res
EndFunc
Ответить

Вернуться в «AutoIt»