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

» AutoIT

Автор: hunter19
Дата сообщения: 25.06.2008 06:39
Забыл написать, что нужно блокировать определенные клавиши, которые были нажаты.

Цитата:
Сложный способ - хук нажатий клавиш.
Какой способ интересует?

Тогда этот желательно.
Автор: XpycTMD
Дата сообщения: 25.06.2008 09:21
Loopback
ViSiToR
Спасибо за примеры
Автор: Maza Faka
Дата сообщения: 25.06.2008 12:04
hunter19
В общем вот исправленный пример с офф. форума, нужно просто немного его переделать

Код: 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])
EndFunc
Автор: hunter19
Дата сообщения: 25.06.2008 12:52
Maza Faka
Спасибо, посмотрю. Не предполагал, что будет столько много написано Трудновато для меня будет.
Автор: ViSiToR
Дата сообщения: 25.06.2008 13:43
hunter19 07:39 25-06-2008
Цитата:
нужно блокировать определенные клавиши

Чем не подходит HotKeySet() ? в качестве функции указывать пустую функцию:


Код: HotKeySet("a", "Dummy")

Func Dummy()

EndFunc
Автор: Maza Faka
Дата сообщения: 26.06.2008 06:49
ViSiToR

Цитата:
Чем не подходит HotKeySet() ? в качестве функции указывать пустую функцию:

Да, так будет намного проще. Можно даже создать массив с клавишными символами, отслеживать нажатия клавиш с помощью функции _IsPressed() и блокировать их с помощью функции HotKeySet()
Автор: ViSiToR
Дата сообщения: 26.06.2008 07:04
Maza Faka 07:49 26-06-2008
Цитата:
создать массив с клавишными символами, отслеживать нажатия клавиш с помощью функции _IsPressed() и блокировать их с помощью функции HotKeySet()

Только для чего?


Код: HotKeySet("a", "Dummy")

Sleep(5000)

Func Dummy()

EndFunc
Автор: Maza Faka
Дата сообщения: 26.06.2008 07:36
ViSiToR

Цитата:
Только для чего?

А для того, что :
hunter19

Цитата:
Забыл написать, что нужно блокировать определенные клавиши, которые были нажаты
Автор: ViSiToR
Дата сообщения: 26.06.2008 08:07
Maza Faka 08:36 26-06-2008
Цитата:
нужно блокировать определенные клавиши, которые были нажаты

Как я это понимаю, имеется в виду не дать этим клавишам быть нажатыми (т.е после их нажатия блокировать)

Я свои доводы беру с этого:

06:49 25-06-2008
Цитата:
чтобы то, что я нажал, не передавалось в другие приложения


Автор: hunter19
Дата сообщения: 29.06.2008 12:10
ViSiToR,Maza Faka
Спасибо, что подсказали насчет HotKeySet() и _IsPressed()
Автор: gregaz
Дата сообщения: 04.07.2008 08:38
Просьба ответить на пару вопросов :
1 . Как создать контекстное меню для элементов ListView и TreeView ,
созданных с помощью UDF ?
2 . Как управлять слайдером громкости Windows ?
Автор: asdfzxcv
Дата сообщения: 04.07.2008 09:46
Скажите пожалуста как сделать,
Есть построчный лог файл значения разделены через запятую x, y, z, 111, ..., после десятой запятой идёт числовое значение например 111 дальше опять несколько значений , так вот мне нужно выбрать только те строки в которых в этом столбце значение строго больше 10 и записать это всё в отдельный файл.
лог состоит из 30 текстовых файлов на каждый день *.log, я их слил в один файл он стал весить 100 метров, ядумаю может обрабатывать по частям что бы скрипт загружал поэтапно каждый файл?
да и непонятно как этот скрипт будет выглядеть.

Автор: Maza Faka
Дата сообщения: 04.07.2008 12:17
gregaz
1.
2.
Автор: Maza Faka
Дата сообщения: 04.07.2008 15:00
asdfzxcv
Попробуй так:

Код: $hFileRead = FileOpen(@ScriptDir & "\test.log", 0) ;открываем лог-файл из которого нужно выбрать строки
$hFileWrite = FileOpen(@ScriptDir & "\result.log", 2) ;открываем лог-файл в который будем сохранять выбранные строки

While 1
$ReadLine = FileReadLine($hFileRead)
If @error = -1 Then Exit
$aParse = StringRegExp($ReadLine, "([0-9a-zA-Z-]*,\s*){11}", 1)
If @error Then ContinueLoop
If
Int($aParse[0]) > 10 Then FileWriteLine($hFileWrite, $ReadLine)
WEnd

FileClose($hFileRead)
FileClose($hFileWrite)
Автор: asdfzxcv
Дата сообщения: 04.07.2008 15:22
спасибо тебе огромное друг , какой раз уже выручаешь

HTTP, Петров И. И., petrov, 192.168.1.233, 07.03.08, 10:35:42, www.elcomspb.ru, 2526, 1324, 416, http://www.elcomspb.ru/logo2.gif

Нужно что бы по этому значению в десятом столбце шёл выбор > 10. А я не поqму, что-то скрипт немного не то выберает.

$aParse = StringRegExp($ReadLine, "([0-9a-zA-Z-]*,\s*){10}", 1) вот сдесь как-то надо показать что нужно выберать по десятому столбцу а как засунуть условие в StringRegEx хрен знает .

оч. извеняюсь уделите мне ещё немного времени.
Автор: gregaz
Дата сообщения: 04.07.2008 18:35
Maza Faka , спасибо большое
Насчет ListView понятно

Насчет Регулирования громкости :
Я не это имел ввиду (Управление громкостью через ф-ии Sound я знаю)

Видимо я некорректно задал вопрос
Нужно управление слайдером панели Realtek HD
Автор: Maza Faka
Дата сообщения: 05.07.2008 07:41
asdfzxcv

Цитата:
HTTP, Петров И. И., petrov, 192.168.1.233, 07.03.08, 10:35:42, www.elcomspb.ru, 2526, 1324, 416, http://www.elcomspb.ru/logo2.gif

Но в этой строке
Цитата:
после десятой запятой
не цифры а web-адрес, какую цифру здесь нужно сравнивать?

gregaz

Цитата:
Насчет Регулирования громкости :
Я не это имел ввиду

Извини, но твой вопрос звучал так:
Цитата:
2 . Как управлять слайдером громкости Windows ?



Цитата:
Нужно управление слайдером панели Realtek HD

Но уж точно через WinAPI этого не сделать. Наверное только вызывая панель настройки и управляя контролами.

Автор: gregaz
Дата сообщения: 05.07.2008 09:43
Maza Faka , спасибо
Мой вопрос был некорректен

Я управляю громкостью с помощью ф-ии SoundSetWaveVolume
При этом почему-то положение регулятора громкости не меняется
Может подскажешь как его изменить ?
Его параметры :
Class : Volume Control
ClassnameNN : msctls_trackbar322
ID : 1001
( или Class : Tray Volume , ClassnameNN : msctls_trackbar321 , ID : 1001 для слайдера , сидящего в трее)
Если да , то желательно получить и его положение (GetWaveVolume)
Автор: Maza Faka
Дата сообщения: 05.07.2008 10:07
gregaz

Цитата:
Я управляю громкостью с помощью ф-ии SoundSetWaveVolume
При этом почему-то положение регулятора громкости не меняется

Странно, у меня эта функция отрабатывает нормально


Цитата:
Если да , то желательно получить и его положение

Можно получить текущий уровень громкости wav с помощью WinAPI функции
Автор: Dudus
Дата сообщения: 05.07.2008 20:59
Товарищи, подскажите новичку пожалуйста
Такой скрипт:

Код: dim $file
$file
[1] = FileReadLine ("Hoin.doc.b64", 1)
MsgBox(4096, "Test", $file[1])
Автор: ViSiToR
Дата сообщения: 06.07.2008 00:49
Dudus 21:59 05-07-2008
Цитата:
если я не знаю наперед, какого размера массив мне нужен?

Тогда объявлять можно с одним элементом, и увеличивать при помощи ReDim каждый раз когда нужно джобавить строку.


Цитата:
в цикле по номеру строки прочитать файл и записать строки в массив, каждый элемент массива это строка

Если сделать быстро и просто, тогда так:


Код: #include <Array.au3> ;Это только чтобы отобразить массив

$sFilePath = @ScriptDir & "\Hoin.doc.b64"
$aFileContent = StringSplit(FileRead($sFilePath), @CRLF)

_ArrayDisplay($aFileContent) ;Отображаем массив
Автор: Dudus
Дата сообщения: 06.07.2008 10:52
понятно, спасибо!
Автор: Amoraller
Дата сообщения: 06.07.2008 13:27
Сорри, если был вопрос, дурацкая ситуация, делаю окно ГУИ без заголовка, мне его надо двигать мышью, и при этом окошко не должно отображаться в панели Пуск

$okno=GUICreate("OKNO", 200, 100 , 0, 600, 0x80000000, 0x00000008)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$drag=Guictrlcreatelabel("", 0,0, 600, 10, "", $GUI_WS_EX_PARENTDRAG)

вот суть проги.
И второй вопрос, как отслеживать загрузку ЦП с помощью Dll?
Спасибо!
Автор: Maza Faka
Дата сообщения: 06.07.2008 16:02
Amoraller

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


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

$dummy = GUICreate("Dummy")

$hGUI = GUICreate("Main GUI", 300, 200, -1, -1, $WS_POPUP, -1, $dummy)

GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")

GUISetState()

Do
Until
GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
Local $iProc = DllCall("user32.dll", "int", "DefWindowProc", "hwnd", $hWnd, "int", $Msg, "wparam", $wParam, "lparam", $lParam)

If $iProc[0] = $HTCLIENT Then Return $HTCAPTION

Return $GUI_RUNDEFMSG
EndFunc
Автор: Amoraller
Дата сообщения: 06.07.2008 16:12
Спасибо большое.
Автор: Hackproof
Дата сообщения: 06.07.2008 19:44
Я для отслеживания загрузки использовал виндовый модуль sysmon.ocx, это попроще будет.
Правда, работает только на win2к и выше.


Код: #include <GuiConstantsEx.au3>
GUICreate("Form1", 629, 472, 193, 115)
$Obj1 = ObjCreate("Sysmon.3")
$Obj1_ctrl = GUICtrlCreateObj($Obj1, 150, 0, 300, 200)

;=============
$obj1.ShowLegend = 0
$obj1.ShowToolbar = 0
$obj1.ShowScaleLabels = -1
$obj1.ShowHorizontalGrid = 0
$obj1.ShowVerticalGrid = 0
$obj1.ShowValueBar = -1
$obj1.GraphTitle = "Активность процессора"
$obj1.ShowHorizontalGrid = 1
;===============

$sa="\Процессор(_Total)\% загруженности процессора"
$Obj1.Counters.add($sa)
GUISetState(@SW_SHOW)

While 1
sleep(1000)
$prload=round($Obj1.Counters.Item(1).Value,0) ; Получаем данные о загрузке раз в секунду

if $prload>50 then
    msgbox(16,"","Загрузка выше 50%")
endif

wend
Автор: Amoraller
Дата сообщения: 06.07.2008 23:03
приму к сведению. спасибо
Автор: asdfzxcv
Дата сообщения: 07.07.2008 07:09
Maza Faka
Да извини, конечно не url надо обрабатывать, а значение перед последним урлом (оно как бы находится в 10-м столбце)

HTTP, Петров И. И., petrov, 192.168.1.233, 07.03.08, 10:35:42, www.elcomspb.ru, 2526, 1324, 416, http://www.elcomspb.ru/logo2.gif

значение 416

Но, у меня такое ощущение, что автоит не в силах это сделать своей функцией StringRegExp, так что попробую воспользоватся опять же твоим советом по поводу использования sed; gsar; egrep
Хотя интересно, чисто на практике, как из регулярно выражение выдернуть один параметр и его как то обработать.
Автор: XpycTMD
Дата сообщения: 07.07.2008 08:16
asdfzxcv
Попробуй так

Код: #include<Array.au3>;Это только чтобы отобразить массив

$hFileRead = FileOpen(@ScriptDir & "\test.log", 0) ;открываем лог-файл из которого нужно выбрать строки
$hFileWrite = FileOpen(@ScriptDir & "\result.log", 2) ;открываем лог-файл в который будем сохранять выбранные строки

While 1
$ReadLine = FileReadLine($hFileRead)
If @error = -1 Then Exit
$aParse = StringSplit($ReadLine, ",")
_ArrayDisplay($aParse)
If @error Then ContinueLoop
If
$aParse[10] > 10 Then FileWriteLine($hFileWrite, $ReadLine)
WEnd

FileClose($hFileRead)
FileClose($hFileWrite)
Автор: Maza Faka
Дата сообщения: 07.07.2008 08:44
asdfzxcv
Или так:

Код: $hFileRead = FileOpen(@ScriptDir & "\test.log", 0) ;открываем лог-файл из которого нужно выбрать строки
If $hFileRead = -1 Then Exit

$hFileWrite = FileOpen(@ScriptDir & "\result.log", 2) ;открываем лог-файл в который будем сохранять выбранные строки

While 1
$ReadLine = FileReadLine($hFileRead)
If @error = -1 Then Exit
$aParse = StringRegExp($ReadLine, "([0-9a-zA-Z]*,\s*)", 3)
If @error Then ContinueLoop
If
Int($aParse[9]) > 10 Then FileWriteLine($hFileWrite, $ReadLine)
WEnd

FileClose($hFileRead)
FileClose($hFileWrite)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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