[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

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

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение DENoszone »

Прошу помощи

Есть код



Код:

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

Dim $mass[1], $x=0,$Stop = 0
Do
    $mass[$x] = FileReadLine ("denylist.txt",$x+1)
    If @error=-1 Then
        $Stop=1
        ReDim $Mass[$x]
    Else
        $x = $x+1
        ReDim $Mass[$x+1]
    EndIf
Until $Stop=1
Do
    $var = WinList()
    For $x=0 To UBound ($mass)-1
            For $i = 1 to $var[0][0]
                If $var[$i][0]  "" AND IsVisible($var[$i][1]) Then
                    if StringInStr($var[$i][0], $mass[$x])0 Then
                        beep(1000,250)
                        MsgBox (16,"Сообщение для " & @UserName,$mass[$x] & " - НЕТ ДОСТУПА!",7)
                        $GWP = WinGetProcess ($var[$i][0]) ;Получаем имя процесса по имени окна
                        if WinGetProcess("explorer.exe") Then ;Если процесс explorer.exe тогда просто закроем окно(если открыта папка, а то как-то некрасиво ))) )
                            WinClose ($var[$i][0])
                            Else
                        ProcessClose($GWP); Киляем полученный процесс
                        EndIf
                    EndIf
                EndIf
            Next
    Next
    Sleep(1000)
Until $i=1
Func IsVisible($handle)
  If BitAnd( WinGetState($handle), 2 ) Then
    Return 1
  Else
    Return 0
  EndIf
EndFunc

[/b]Смысл скрипта в том, что он висит в памяти компьютера и блокирует окна в которых содержатся запрещенные слова



Последние содержатся в denylist.txt

icq

qip

и т.д.



Все работает, но скрипт сильно напрягает процессор

вопрос как разгрузить процессор?
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

babaytugur,


Цитата babaytugur:



как разгрузить процессор?
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Хм, проверять только при изменении списка? Я бы немного подругому сделал:





Код:

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

#include 
HotKeySet("^q", "QuitApp")
Dim $aDenyList, $aWinList, $aOld_WinList
;Читаем в массив файл denylist.txt
_FileReadToArray("denylist.txt", $aDenyList)
While 1
    $aWinList = WinList()
    ;Проверяем окна только если есть изменения в списке (с момента последней проверки)
    If Not _Array2DIsIdentical($aWinList, $aOld_WinList) Then
        $aOld_WinList = $aWinList
        For $i = 1 To UBound($aWinList)-1
            For $j = 1 To UBound($aDenyList)-1
                If _WinIsVisible($aWinList[$i][1]) And StringInStr($aWinList[$i][0], $aDenyList[$j]) Then
                    Beep(1000, 250)
                    _MsgBox(16, "Сообщение для " & @UserName, $aDenyList[$j] & " - НЕТ ДОСТУПА!", $aWinList[$i][1])
                    $iWinProcess = WinGetProcess($aWinList[$i][1])
                    If WinGetTitle("[CLASS:CabinetWClass;TITLE:" & $aWinList[$i][0] & "]") = $aWinList[$i][0] Then
                        WinClose($aWinList[$i][1])
                    Else
                        ProcessClose($iWinProcess)
                    EndIf
                EndIf
            Next
        Next
    EndIf
    Sleep(1000)
WEnd
Func _MsgBox($MsgBoxType, $MsgBoxTitle, $MsgBoxText, $Main_GUI=0)
    Local $aRet = DllCall("user32.dll", "int", "MessageBoxW", _
            "hwnd", $Main_GUI, _
            "wstr", $MsgBoxText, _
            "wstr", $MsgBoxTitle, _
            "int", $MsgBoxType)
    Return $aRet[0]
EndFunc
Func _Array2DIsIdentical($av2DArray_a, $av2DArray_b, $iLastElement=1)
    If UBound($av2DArray_a)  UBound($av2DArray_b) Then Return False
    For $i = 0 To UBound($av2DArray_a)-1
        For $j = 0 To $iLastElement
            If $av2DArray_a[$i][$j]  $av2DArray_b[$i][$j] Then Return False
        Next
    Next
    Return True
EndFunc
Func _WinIsVisible($handle)
    Return BitAnd(WinGetState($handle), 2)
EndFunc
Func QuitApp()
    Exit
EndFunc
Аватара пользователя
amel27

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение amel27 »

Спасибо!!!

все работает

буду анализировать код
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

Creat0R, Помоги плз написать скрипт....

Есть 40-50 папок с разными названиями, в каждой, из этих файлов, лежит скрипт с именем Auto.exe.

Мне нужно чтобы этот скрипт запускался по очереди (я так думаю это юудет команда RunWait ) из каждой папки и с помощью команды TrayTip("Установка скрипта ", "Выполняется установка NAME", 5, 4), где -номер очередной папки по счёту, а NAME имя папки из которой стартует скрипт, отображал данную процедуру...

А то приходится вручною прописывать каждую процедуру....Возможно ли вышеуказанное сделать на скрипте?!
Аватара пользователя
Mogidin

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Mogidin »

Вопрос. Требуется сделать окно, которого не будет на панели задач, тока в трее.

И в догонку. Можно поменять иконку этого окна в трее? Как?



вопрос снимается. Изображение
Аватара пользователя
Котяра

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Котяра »

Помогите написать один скрипт. Короче, есть утилита fontinst.exe. Ее задача установить, шрифты, лежащие с ней в одной директории и прописанные в файле fontinst.inf. Синтаксис запуска:



Код:

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

fontinst.exe /f fontinst.inf

Так вот надо написать скрипт для формирования fontinst.inf . Файл выглядит так:



Код:

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

[fonts]
imya_faila1.ttf
imya_faila2.ttf
imya_failaX.ttf

Вариант 1: создать файл для всех шрифтов (*.ttf) из директории со скриптом.

Вариант 2: вывести окно со списком шрифтов из текущей директории и флажками.

Как это сделать? Хотя бы первый вариант...
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

Цитата babaytugur:



Смысл скрипта в том, что он висит в памяти компьютера и блокирует окна в которых содержатся запрещенные слова
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Идентифицировать приложение по его окнам само по себе неэффективно, имхо сподручней использовать свойства файла - образа процесса (закладка "версия") такие как: "название продукта", "производитель", etc. В этом случае достаточно запускать скрипт только при появлении нового процесса (кстати, для этого можно использовать штатные средства WMI).

Код:

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

$ProductName = FileGetVersion("C:\Program Files\ICQLite\ICQLite.exe", "ProductName")
$CompanyName = FileGetVersion("C:\Program Files\ICQLite\ICQLite.exe", "CompanyName")
MsgBox(0, "ICQLite Product Name", $ProductName)
MsgBox(0, "ICQLite Company Name", $CompanyName)
Аватара пользователя
amel27

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение amel27 »

amel27, А случайно кода для tftp сервера нету у Вас. А так же и binlsrv.py из пакета Ris-linux.
Аватара пользователя
TERMINAL

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение TERMINAL »

Можно ли в реестре с помощью RegDelete едалить не значение, а полностью ветку (папку)?
Аватара пользователя
TERMINAL

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение TERMINAL »

NikLok


Цитата:



случайно кода для tftp сервера нету у Вас. А так же и binlsrv.py из пакета Ris-linux
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




не понял вопроса - все указанные пакеты идут в исходниках



HORRIBLE

все не так просто - для текстового представления чисел предназначена ф-ция StringFormat(), но AutoIT штатно поддерживает только представления по основанию 16 и 8, для других оснований придется ваять UDF, как один из вариантов:

Код:

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

ConsoleWrite(_Bin(301) & @CRLF)
Func _Bin($iNumber)
    If Not IsInt($iNumber) Then Return SetError(1, 0, "")
    Local $sHex = StringFormat("%X",$iNumber), $sBin = ""
    Local Const $aHexToBin[16] = ["0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"]
    For $i=1 To StringLen($sHex)
        $sBin &= $aHexToBin[Dec(StringMid($sHex,$i,1))]
    Next
    Return StringRegExpReplace($sBin, "^0+", "")
EndFunc

ADD: Более "продвинутый" вариант:

Код:

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

ConsoleWrite(_Bin(301) & @CRLF)
Func _Bin($iNumber)
    If Not IsInt($iNumber) Then Return SetError(1, 0, "")
    Local $sBin = ""
    If $iNumber>0 Then
        While $iNumber
            $sBin = BitAND($iNumber,1) & $sBin
            $iNumber = BitShift($iNumber,1)
        WEnd
        Return $sBin
    ElseIf $iNumber
Ответить

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