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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

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

(*.*)


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


Конфигурация

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


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

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


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

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


Прошу помощи
Есть код
Код: Выделить весь код
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
Смысл скрипта в том, что он висит в памяти компьютера и блокирует окна в которых содержатся запрещенные слова

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

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

Последний раз редактировалось babaytugur, 02-05-2008 в 21:03.


Отправлено: 20:26, 02-05-2008 | #471



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


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

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


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

Код: Выделить весь код
#include <File.au3>

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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:38, 03-05-2008 | #472


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


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

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


Спасибо!!!
все работает
буду анализировать код

Отправлено: 00:58, 03-05-2008 | #473


Аватара для TERMINAL

Ветеран


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

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


Creat0R, Помоги плз написать скрипт....
Есть 40-50 папок с разными названиями, в каждой, из этих файлов, лежит скрипт с именем Auto.exe.
Мне нужно чтобы этот скрипт запускался по очереди (я так думаю это юудет команда RunWait ) из каждой папки и с помощью команды TrayTip("Установка скрипта ", "Выполняется установка NAME", 5, 4), где -номер очередной папки по счёту, а NAME имя папки из которой стартует скрипт, отображал данную процедуру...
А то приходится вручною прописывать каждую процедуру....Возможно ли вышеуказанное сделать на скрипте?!

-------
Автоматизация прежде всего....


Отправлено: 14:27, 03-05-2008 | #474


Аватара для Maza Faka

Ветеран


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

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


TERMINAL
Цитата:
Помоги плз написать скрипт
Ты сам сможешь написать такой скрипт, ничего сложного в реализации я не вижу
Поищи на форуме примеры рекурсивного перебора файлов-папок (FileFindFirstFile()) и переделай под свою задачу, если не получится - поможем.

Отправлено: 15:29, 03-05-2008 | #475


Аватара для TERMINAL

Ветеран


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

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


Maza Faka, спс-сделал !

-------
Автоматизация прежде всего....


Отправлено: 17:49, 03-05-2008 | #476


Googler


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

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


Цитата babaytugur:
Смысл скрипта в том, что он висит в памяти компьютера и блокирует окна в которых содержатся запрещенные слова »
Идентифицировать приложение по его окнам само по себе неэффективно, имхо сподручней использовать свойства файла - образа процесса (закладка "версия") такие как: "название продукта", "производитель", 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)

Отправлено: 11:13, 04-05-2008 | #477


Ветеран


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

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


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

Отправлено: 15:46, 04-05-2008 | #478


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


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

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


Maza Faka,
Binarу, я что то не понимаю, а как тогда, к примеру число 301 превратить в такое 100101101, а то эта команда что то не то выдает.
Спасибо.

Отправлено: 00:12, 05-05-2008 | #479


Googler


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

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


NikLok
Цитата:
случайно кода для tftp сервера нету у Вас. А так же и binlsrv.py из пакета Ris-linux »
не понял вопроса - все указанные пакеты идут в исходниках

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<0 Then
        For $i=1 To 32
            $sBin = BitAND($iNumber,1) & $sBin
            $iNumber = BitRotate($iNumber, -1, "D")
        Next
        Return $sBin
    EndIf
    Return "0"
EndFunc

Последний раз редактировалось amel27, 05-05-2008 в 09:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:21, 05-05-2008 | #480



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход