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

» AutoIT

Автор: ViSiToR
Дата сообщения: 15.07.2008 03:10
Hackproof 04:03 15-07-2008
Цитата:
Нужно получить в переменную текущий IP-адрес машины

@IPAddress1 ?
Автор: Hackproof
Дата сообщения: 15.07.2008 03:17
Ну да, тормоз. Так время-то сколько, а кофе нет... Спасибо.
Автор: timsky
Дата сообщения: 15.07.2008 05:26
А есть возможность перехватывать вводимые с клавиатуры символы? Плииииз.
Автор: ViSiToR
Дата сообщения: 15.07.2008 05:51
timsky 06:26 15-07-2008
Цитата:
есть возможность перехватывать вводимые с клавиатуры символы?


Изменённый пример с оф. сайта:


Код: HotKeySet("{ESC}", "OnAutoItExit")

Global Const $WH_KEYBOARD_LL = 13

Global $sBuffer = ""
Global $hStub_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($hStub_KeyProc), "hwnd", $hMod[0], "dword", 0)

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

While 1
Sleep(10)
WEnd

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

Func
_KeyProc($nCode, $wParam, $lParam)
Local $aRet, $KEYHOOKSTRUCT

If $nCode < 0 Then
$aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
Return $aRet[0]
EndIf

If
$wParam = 256 Then
$KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
EvaluateKey(DllStructGetData($KEYHOOKSTRUCT, 1))
EndIf

$aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)

Return $aRet[0]
EndFunc

Func
OnAutoItExit()
If $hStub_KeyProc Then DllCallbackFree($hStub_KeyProc)
$hStub_KeyProc = 0
DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hHook[0])
If @HotKeyPressed <> "" Then Exit
EndFunc
Автор: timsky
Дата сообщения: 15.07.2008 14:42
ViSiToR
Шикарно!

Добавлено:
Что-то я не понял, как это работает

Объявляется хоткей, по которому проиводится выход из скрипта и каждые 10 мсек. чекается, не нажат ли эскейп.
Объявлены функции... а где их вызов? Они же отрабатываются.
Автор: ViSiToR
Дата сообщения: 15.07.2008 17:25
timsky 15:42 15-07-2008
Цитата:
Объявляется хоткей, по которому проиводится выход из скрипта и каждые 10 мсек. чекается, не нажат ли эскейп.

Нет - Это просто хоткей, нажал, скрипт вышел, никаких проверок по времени.


Цитата:
Объявлены функции... а где их вызов?

В хуке, по DllCallBack...


Код: DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
Автор: timsky
Дата сообщения: 15.07.2008 18:08
ViSiToR Спасибо
Учится мне еще и учиться. А есть какой-нить толковый учебник по сабжу? Все, что в шапке уже смотрел.
Автор: Maza Faka
Дата сообщения: 16.07.2008 06:49
timsky

Цитата:
А есть какой-нить толковый учебник по сабжу?

Конечно есть! Аж целых три!

Справка
Форумы (особенно офф.)
Практика написания скриптов


P.S.
Я когда только начинал изучать AutoIt, тоже искал всякого рода учебники. Мой тебе совет, не трать время на эти поиски, нет таких учебников (вру, есть один, но в нём то же, что и в справке), да и не нужны они, когда есть то, что я перечислил выше
Автор: sproxy
Дата сообщения: 17.07.2008 02:18
Доброго времени суток….
Ребята, подскажите, как вытянуть данные по всем активным сетевым адаптерам следующую информацию:
1.    ip адрес (прописанный или розданный)
2.    маска подсети
3.    основной шлюз
4.    основной dns
5.    альтернативный dns
6.    mac адрес данного адаптера
и так же инфо по соединениям удаленного доступа (модемам dial-up, gprs):
1.    ip адрес клиента
2.    ip адрес сервера

представляю, что можно использовать какие то стандартные библиотеки windows, может реестр..или еще что ? Подскажите, пожалуйста, функции и направление в каком стоит копать.
Автор: Hackproof
Дата сообщения: 17.07.2008 07:29
Я бы сказал, что тут как раз пригодится вывод ipconfig /all в файл, который потом можно порубить на строки, но я люблю всё делать просто и надежно. Наверняка есть более элегантный, и длинный способ.

И мой вопрос - можно ли в скрипте реализовать паралелльное выполнение двух функций одновременно, чтобы загрузить двухядреный процессор?
Вопрос ради интереса, вдруг пригодится...
Автор: Maza Faka
Дата сообщения: 17.07.2008 07:52
sproxy
Кое какую информацию можно получить из WMI класса "Win32_NetworkAdapterConfiguration"

Код: Dim $strComputer = ".", $string, $strIPAddress, $IPAddress, $IPSubnet, $strIPSubnet, $DefaultIPGateway, $strDefaultIPGateway

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

For $objItem In $colItems
$string
&= @LF
$string &= "Caption: " & $objItem.Caption & @LF
$string &= "Description: " & $objItem.Description & @LF

If UBound($objItem.IPAddress) > 0 Then
For
$IPAddress In $objItem.IPAddress
$strIPAddress &= $IPAddress & "; "
Next
$string &= "IPAddress: " & StringTrimRight($strIPAddress, 2) & @LF
EndIf

If
UBound($objItem.IPSubnet) > 0 Then
For
$IPSubnet In $objItem.IPSubnet
$strIPSubnet &= $IPSubnet & "; "
Next
$string &= "IPSubnet: " & StringTrimRight($strIPSubnet, 2) & @LF
EndIf

If
UBound($objItem.DefaultIPGateway) > 0 Then
For
$DefaultIPGateway In $objItem.DefaultIPGateway
$strDefaultIPGateway &= $DefaultIPGateway & "; "
Next
$string &= "DefaultIPGateway: " & StringTrimRight($strDefaultIPGateway, 2) & @LF
EndIf

$string &= "DNSDomain: " & $objItem.DNSDomain & @LF
$string &= "DNSHostName: " & $objItem.DNSHostName & @LF
$string &= "MACAddress: " & $objItem.MACAddress & @LF
Next

MsgBox(0, "", $string)
Автор: SysLam
Дата сообщения: 17.07.2008 08:08
Hackproof

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

многопоточности от скриптов ожидать не приходится, но есть разработка для синхронизации работы нескольких скриптов в одну задачу: http://www.autoitscript.com/forum/index.php?showtopic=29326
Автор: Hackproof
Дата сообщения: 17.07.2008 09:26
Есть sql-сервер, и приложение, работающее с ним. Проблема в том, что оно работает только через именованный канал (pipe), и sql должен находиться на одной машине с ним. По некоторым причинам это сильно напрягает. Можно ли сделать некий прозрачный переходник, у которого с одной стороны на входе будет pipe, а с другой - сетевое соединение на sql-сервер, стоящий на удаленном компе?
Создал пайп, сокет, а как их подружить - никаких мыслей...
Автор: sproxy
Дата сообщения: 17.07.2008 22:47
Maza Faka, отличное решение, спасибо.
Hackproof, напиши, пож, поподробней, на всякий случай - как прочесть данные из ipconfog и сохранить в файл.

и еще парочка вопросов,
1. как организовать загрузку сайта с передачей странице определенного текста, к примеру так http://www.mysite.ru/index.php?myvar=<вот здесь вставить необходимый текст для загрузки на сайт>. И все это необходимо сделать скрыто для пользователя. Есть варианты? (имею ввиду не грузить сркытый браузер).

2. Maza Faka, не подскажешь еще как вытащит название сетевого подключения, которое отображается в папке "сетевые подключения", в WMI class не нашел. А Caption и Description показывают реальные названия адаптеров...

3. может я просто не нашел в справочнике....но есть ли функции отправки почты без стандартного почтового клиента? есть _INetSmtpMail, что очень радует, а вот pop не нашел, как отправлять то?
Автор: Maza Faka
Дата сообщения: 18.07.2008 08:05
sproxy

Цитата:
как вытащит название сетевого подключения

Попробуй так:

Код: #include <Array.au3> ;only for _ArrayDisplay()

$avNetworkConnections = _GetNetwork_Connections()

_ArrayDisplay($avNetworkConnections)

Func _GetNetwork_Connections()
Local Const $NETWORK_CONNECTIONS = 49
Local $objShell = ObjCreate("Shell.Application")
Local $objFolder = $objShell.Namespace($NETWORK_CONNECTIONS)
Local $objFolderItem = $objFolder.Self
Local $aRetArr[2] = [1, $objFolderItem.Path]
Local $ColItems = $objFolder.Items
Local $iUbound = 0

For $objItem In $ColItems
$iUbound
= UBound($aRetArr)
ReDim $aRetArr[$iUbound+1]
$aRetArr[$iUbound] = $objItem.Name
Next

$aRetArr[0] =$iUbound
Return $aRetArr
EndFunc
Автор: sproxy
Дата сообщения: 18.07.2008 08:19
Maza Faka, отлично работает, спасибо!
осталось только сплюсовать с инфо ip, но это разберусь ))
По другим вопрос (№ 1 и № 3) не в курсе?
Автор: ziherun
Дата сообщения: 18.07.2008 08:49
Здравствуйте всем не подскажете как реализовать такой скрипт.
Например на экране есть пиксель одного цвета и чтобы при изменении цвета этого пикселя скрипт наживал на кнопку в нективном окне. И хотелось бы уточнить такой вопрос может быть кто знает такую программу UOpilot она те же использует скрипты что и Autoit? Всем заранее спасибо за ответы!
Автор: asdfzxcv
Дата сообщения: 18.07.2008 09:05
Привет всем!
Подскажите пожалуйста как в трей мению сделать менюшку:
1 нажал на строку "АВТОЗАПУСК" значения в реестр прописались, галочка на автозапуске стоит
2 нажал ещё раз "АВТОЗАПУСК" значения из реестра стёрлись и галочка убралась соотественно

(аналогично стандартной функции паузы)
немогу найти похожий пример в хелпе.

и ещё почиму то у меня менюки в трее организовываются хорошо только через
TrayItemSetOnEvent
притом с вызовом функции действия а большинство примеров в хелпе показано через цикл while- wend , а если я этот цикл вставляю в начале всего кода то у меня мой скрипт дальше перестаёт работать так как всё зацыкливается на первом цикле менюшке в трее.
вот так...
Автор: arr1val
Дата сообщения: 18.07.2008 10:47
Подскажите опять :
Есть функция:

Код: func mm($a, $b)


Run(@ComSpec & ' /c For /R "\\"' & $a & '"\D$\" %i In (*.xlsx;*.xlsm;*.docx;*.docm;*.rtf;*.doc;*.xls;*.pdf;*.ppt;*.msg) Do echo %i | findstr /i /v "\<CashProject \<Winnt \<шаблон \<Program">nul && MkDir "%i" "U:\"' & $b & '"\Removed\%~pi"', '', @SW_HIDE)

Run(@ComSpec & ' /c For /R "\\"' & $a & '"\D$\" %i In (*.xlsx;*.xlsm;*.docx;*.docm;*.rtf;*.doc;*.xls;*.pdf;*.ppt;*.msg) Do echo %i | findstr /i /v "exe\>">nul && copy "%i" "U:\"' & $b & '"\Removed\%~pnxi"', '', @SW_HIDE)


EndFunc
Автор: Maza Faka
Дата сообщения: 18.07.2008 13:02
ziherun

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

Пример:

Код: Run("calc.exe")

WinWait("[Class:SciCalc]")

WinSetState("[Class:SciCalc]", "", @SW_MINIMIZE)

$hWnd = WinGetHandle("")

$checksum = PixelChecksum(0, 0, 50, 50) ;Указываем координаты в которых будем отслеживать изменение контрольной суммы пикселей

While 1
If $checksum <> PixelChecksum(0,0, 50, 50, 1, $hWnd) Then ;Если контрольная сумма изменилась...
$checksum = PixelChecksum(0,0, 50, 50, 1, $hWnd) ;запоминаем новое значение контрольной суммы...
ControlClick("[Class:SciCalc]", "", "Button7") ;и нажимем кнопку 1 в калькуляторе
EndIf
Sleep(100)
WEnd
Автор: arr1val
Дата сообщения: 18.07.2008 13:47
Уже сделал
Автор: asdfzxcv
Дата сообщения: 18.07.2008 14:49
Maza Faka спасибо.

А как при повторном нажатии на ту же строчку АВТОЗАПУСК раздел бы удалялся из реестра.
(что бы программу убрать из автозагрузки)

И ещё я так понимаю ещё обстоит геморой о проверки в реестре значения что бы галочка автоматичесски показывала прописана уже программа или нет.

Скорее всего я сделаю две мнюки одна добавить в автозапуск а другая удолить без дентификации уже прописанного в реестре.
Автор: Maza Faka
Дата сообщения: 18.07.2008 17:25
asdfzxcv

Цитата:
Скорее всего я сделаю две мнюки одна добавить в автозапуск а другая удолить без дентификации уже прописанного в реестре.

Ну зачем же так некрасиво
Пробуй:

Код: #Include <Constants.au3>

Global $RegKey = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"

Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)

$auto = TrayCreateItem("АВТОЗАПУСК")
TrayItemSetOnEvent(-1, "_TrayEvent")

$exit = TrayCreateItem("Выход")
TrayItemSetOnEvent(-1, "_TrayEvent")

While 1
Sleep(100)
WEnd

Func
_TrayEvent()
Switch @TRAY_ID
Case $auto
If BitAND(TrayItemGetState($auto), $TRAY_CHECKED) Then
TrayItemSetState($auto, $TRAY_UNCHECKED)
_AutostartEnableDisable(0)
Else
TrayItemSetState($auto, $TRAY_CHECKED)
_AutostartEnableDisable()
EndIf
Case
$exit
Exit
EndSwitch
EndFunc

Func
_AutostartEnableDisable($sFlag = 1)
Local $iValRead = RegRead($RegKey, "Calculator")

If $sFlag = 1 Then
If
$iValRead = "" Then RegWrite($RegKey, "Calculator", "REG_SZ", @WindowsDir & "\calc.exe")
Else
If
$iValRead <> "" Then RegDelete($RegKey, "Calculator")
EndIf
EndFunc
;==>_AutostartEnableDisable
Автор: Basur
Дата сообщения: 19.07.2008 07:45
Запускаю таким образом программы прописаные в ini


Цитата:
$ini = "il.ini"

$Prog = IniReadSection($ini,"Programs" )
$Pid = IniReadSection($ini,"PID" )

For $i = 1 to $Prog[0][0] Step 1
If ProcessExists($pid[$i][0])=0 Then Run($Prog[$i][1])
Next

Нужно чтобы в GUI перед запуском каждой программы создавался Label с текстом из $Prog[$i][0], но у меня что-то неполучается с координатами.
Автор: asdfzxcv
Дата сообщения: 19.07.2008 16:24
Maza Faka
круто, спасибо)
А ещё как то можно сделать проверку уже существующей записи в реестре, что бы после перезапуска скрипта (например после перезагрузки компа и запуска скрипта сного) эта галочка сама отображалась как бы индецируя что программа уже прописана в автозапуске,
Идея была как бы в этом.
Но всё равно скрипт оказался дастаточно сложный чем я думал.
поэтому я и думаю мож и не стоит доводить уж всё до блеска)
Автор: sproxy
Дата сообщения: 19.07.2008 17:32
нашел интересные ключи реестра,
1) список только сетевых (LAN, WAN и т.д. подобных) адаптеров:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Adapters\
2) настройки адаптеров (текущие данные по ip и т.д., к примеру если dial-up то будут данные, если dial up отключен - будут нули везде; интересно как с DHCP) (те адаптеры которые есть в этом списки и их нет в списке из ключа выше - это Dial Up и подобные):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
3) название адаптера:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\дальше по значениям из ключа 1 или можно брать из ключа 2 (но в ключе 2 есть некоторые ключи которых не будет в этом - в ключе 3 (dial up к примеру) ).

перебор ключей через RegEnumKey и RegEnumVal.

1) правильно ли я понимаю, что данные ключи постоянные для xp,
т.е. они то не будут меняться (имею ввиду коренвые, именно те, что выше)?

2) соответсвенно на не xp системе - 2k3, 2000 и т.д., тем более висте,
эти ключи могут быть другие....?

просто работая чере реестр я могу отсеят то что не нужно,
а вот связать, таки, твои прдложения, Maza Faka,
так и не получилось....т.к. делаю следующее:
беру все названия из "Shell.Application", убераю мне явно не
нужные, далее, по оставшимся нахожу их сетевые найтройки,
и уже из настроек еще раз выкидываю не нужные.....

а вот соединить "Shell.Application" и WMI класс NetworkAdapterConfiguration...
Maza Faka, с помощью "Shell.Application", можно ли еще
какие нибудь данные узнать о сетевом соединение, кроме его имение (.Name)? -
что бы можно было его явно опознать....хоть тип....в общем что нить
еще, что так же можно унать об этом сетевом соединение через WMI класс NetworkAdapterConfiguration
или через реестр, и далее сопоставить данные между Shell и WMI, ?

3) в общем как посоветуите, реально ли для xp, без ошибок и негативных
последствий, реализовывать работу через реестр?

4) и не уже ли не умеет AutoIt принимать почту ...и _закачивать_файлы_на_ftp?

===============================================
+ еще: Полностью работать только с реестром, без WMI - не удобно.
За то, нашел Setting ID, это имя ключа в реестре и ID текущего адаптера (сетевого интерфейса).
А с помощью WMI класс HNet_Connection ли Shell.Application (хотя вот его не смотрел, если он то же
может вытащить Setting ID - то будет то же полезен) можно легко узнать название сетевого интерфейся,
которое отображается в Сетевых подключениях. Все сетевые настройки можно узнать через
Win32_NetworkAdapterConfiguration, НО есть один момент: если сетевая карта (т.д. устройство)
выключенно - информация о его IP (и т.д. настройках) Win32_NetworkAdapterConfiguration не
отображает. Вопрос - как же справиться с этим? ...пока только по Setting ID брать информацию
из реестра напрямую.....но чувству...должен быть способ и через WMI.

===============================================
.....Ребята!! Посмотрите у себя мой скрипт, может быть это только у меня он ТАК зверски тормазит!!!???
Может кто то сможет объснить почему и как исправить / переделать??
au3 файл: http://webinweb.ru/ftp/get_ip_2.au3
и он же в exe: http://webinweb.ru/ftp/get_ip_2.exe
Автор: asdfzxcv
Дата сообщения: 21.07.2008 12:02
У меня нормально твой скрипт сработал, бе тормозов
Автор: Maza Faka
Дата сообщения: 21.07.2008 16:33
asdfzxcv

Цитата:
можно сделать проверку уже существующей записи в реестре, что бы после перезапуска скрипта (например после перезагрузки компа и запуска скрипта сного) эта галочка сама отображалась как бы индецируя что программа уже прописана в автозапуске

Сделай так:

Код: #Include <Constants.au3>

Global $RegKey = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"

Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)

$auto = TrayCreateItem("АВТОЗАПУСК")
TrayItemSetOnEvent(-1, "_TrayEvent")
If _AutostartEnableDisable(2) = True Then TrayItemSetState(-1, $TRAY_CHECKED)

$exit = TrayCreateItem("Выход")
TrayItemSetOnEvent(-1, "_TrayEvent")

While 1
Sleep(100)
WEnd

Func
_TrayEvent()
Switch @TRAY_ID
Case $auto
If BitAND(TrayItemGetState($auto), $TRAY_CHECKED) Then
TrayItemSetState($auto, $TRAY_UNCHECKED)
_AutostartEnableDisable(0)
Else
TrayItemSetState($auto, $TRAY_CHECKED)
_AutostartEnableDisable()
EndIf
Case
$exit
Exit
EndSwitch
EndFunc

Func
_AutostartEnableDisable($sFlag = 1)
Local $iValRead = RegRead($RegKey, "Calculator")

Switch $sFlag
Case 0
If $iValRead <> "" Then RegDelete($RegKey, "Calculator")
Case 1
If $iValRead = "" Then RegWrite($RegKey, "Calculator", "REG_SZ", @WindowsDir & "\calc.exe")
Case 2
If $iValRead <> "" Then Return True
EndSwitch

EndFunc
;==>_AutostartEnableDisable
Автор: sproxy
Дата сообщения: 21.07.2008 21:33

Цитата:
У меня нормально твой скрипт сработал, бе тормозов


asdfzxcv, а как быстро выводится список?

т.к. у меня, после запуска, только через 7-8 секунд (!)...
У меня на сайте sql быстрее работает чем тут на локалке WMI.
Или это просто глюк...

Maza Faka, BIG Спасибо! FTP обробатывается отлично.

Автор: Maza Faka
Дата сообщения: 22.07.2008 06:51
sproxy

Цитата:
Посмотрите у себя мой скрипт, может быть это только у меня он ТАК зверски тормазит!!!???

У меня отработал нормально, за несколько секунд. Максимальная нагрузка на процессор не превышала 18%. Несколько советов по оптимизации: старайся не использовать функции из Array.au3 UDF, так, как они замедляют работу скрипта, так же, как и AutoItSetOption("ExpandEnvStrings", 1)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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