PDA

Показать полную графическую версию : [Архив - Часть 1.2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26

adima
24-07-2006, 10:11
Есть ли у кого пример или готовый скрипт поиска файла по всем дискам и всем директориям и поддиректориям

bogomolv
25-07-2006, 01:24
adima
Пример поиска файла здесь уже приводился. В твоем случае нужно лишь зациклить поиск по дискам:
Opt('ExpandEnvStrings', 1); default = 0
Opt('ExpandVarStrings', 1); default = 0
Opt('RunErrorsFatal', 0); default = 1
Opt('TrayIconDebug', 1); default = 0

$drives = DriveGetDrive("all")
If @error Then Exit

For $i=1 to $drives[0]
$dr=dir($drives[$i]&'\*_1.au3')
For $k=1 To $dr[0]-1
MsgBox(0,'',$dr[$k])
Next
$dr=0
Next
Exit

Exit

Func dir($d)
$dr = Run('%Comspec% /c dir "$d$" /s /b','',0,6)
$f = ''
While not @error
$f = $f & StdoutRead($dr)
Wend
Return (StringSplit(StringReplace($f,@LF,''),@CR))
EndFunc

kovdaev
25-07-2006, 13:19
Где можно взять готовый скрипт или может у кого есть на программу R-STUDIO v.3 EN

xstranger
28-07-2006, 05:19
Скажите, как с помощью AutoIt можно получить раздел реестра содержащий какой либо параметр=значение.
Надо чтобы результатом был раздел реестра содержащий данный параметр равный данному значению.

Или может кто подскажет как получить название устройства (установленого, например видео карты)из реестра. По адресу
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ имееется информация о всех установленых драйверах системы, но конечный раздел для каждого устройства разный, в зависимости от того как его назвали при разработке драйвера, единственное как можно определить например видеокарту - это что параметр Group = video

bogomolv
28-07-2006, 08:55
xstranger
ПННХНЧ (Пишу, Но Ни Хрена Не Читаю)?

На основе этого примера можно считать и проверить на соблюдение любого условия любую информацию из любого раздела реестра:
;Считывание на стадии CMDLINES.TXT будущего разрешение экрана
$screen=1024
If RunWait('@ComSpec@ /C reg query "HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses" /s | find "DefaultSettings.XResolution" | find "500"','',0)=0 Then $screen=1280

Для работы железками есть специализированная утилита DEVCON: http://support.microsoft.com/kb/311272/ru.
Данный пример позволяет проверить наличие железки по ее HWID:
$hwid='PCI\VEN_10DE' ;nforce4
If RunWait('@ComSpec@ /C devcon.exe hwids "$hwid$" | find "$hwid$"','',0) Then Exit

xstranger
28-07-2006, 11:24
нет.... это немного не то. Или то но я не могу понять как этого добиться.

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

Можно конечно открыть devmgr по shift+а10, но какаяже тогда автоматизация..., а идея мне кажется хорошая.

может есть у когонибудь какие нибудь практические предложения!?... давайте вместе подумаем

xstranger
28-07-2006, 11:56
вот уже кое что нашел:
в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video - перечисляются все видео драйверы установленые на компьютере включая vgasave, но только один вложеный раздел содержит параметр Device Description и его значение равно названию видео карты.
с помощью утилиты из состава reskit 2k srv - regfind можно получить значение параметра Device Description

kpuk
28-07-2006, 22:13
прошу сильно не пинать, а подробненько разжувать:
Есть прога. К ней есть API-функции.
Как их передать программе через autoit??
Просьба попожробенее и на примере.
Вот, для примера имею:
- доступ к функциям осуществляется через единый интерфейс IRunpadShell
----------------------------------------------
HRESULT TurnShell(BOOL bNewState);
Включает или отключает шелл (TRUE/FALSE соответственно)
----------------------------------------------

Как мне к примеру через автоит закрыть прогу через эту функцию???

bogomolv
29-07-2006, 02:10
xstranger

может есть у когонибудь какие нибудь практические предложения!?... давайте вместе подумаем
Над чем подумать-то? Над тем, как вывести на экран за 9 мин. до конца установки "Диспетчер устройств"? Можно и devcon'ом вывести на экран все характеристики всех имеющихся в системе устройств (в том числе и какие драйвера установлены). У меня таких устройств devcon насчитал 118. Оно тебе надо?
Может все же поделишься, зачем тебе все это нужно?

в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video - перечисляются все видео драйверы установленые на компьютере включая vgasave, но только один вложеный раздел содержит параметр Device Description и его значение равно названию видео карты
В разделе HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses тоже перечисляются различные устройства. И только один из подразделов содержит заветную информацию о том, какое разрешение подхватили драйвера... Поэтому и предложил простой способ выуживать информацию из реестра, не перебирая все подразделы и не зная точного иентификатора видеокарты.
Задай в параметре find название своей видеокарты и укажи в reg query свою ветку реестра, и мой скрипт ответит тебе, есть ли такая видеокарта.

kpuk

Как мне к примеру через автоит закрыть прогу через эту функцию???
А почему это нужно делать через эту функцию? Почему нельзя закрыть стандартной autoit'овской функцией WinClose?

kpuk
29-07-2006, 12:31
Это только одна из функций для примера, вот другой пример, который можно тока через API сделать:
-------------------------------------------------------------------------------
HRESULT DoSingleAction(RSHELLACTION dwAction);

Выполняет определенное действие:
RSA_SHOWPANEL - показывает плавающую панель с закладками
RSA_MINIMIZEALLWINDOWS - минимизирует все активные окна
RSA_KILLALLTASKS - снимает все разрешенные задачи (аналог команды шелла/сервера)
RSA_RESTOREVMODE - восстанавливает видеорежим (после выхода из проблемных игр)
RSA_UPDATEDESKTOP - обновляет рабочий стол шелла
RSA_CLOSECHILDWINDOWS - закрывает все дочерние окна шелла
RSA_SWITCHTOUSERMODE - переключает шелл в режим пользователя
RSA_TURNMONITORON - включает монитор
RSA_TURNMONITOROFF - отключает монитор
RSA_ENDVIPSESSION - завершает личную (VIP) сессию клиента (только с версии 4.52)

Функция является асинхронной.
-----------------------------------------------------------------------------------
Как мне через апи завершить личную VIP сессию клиента? через API !!!!

bogomolv
29-07-2006, 22:46
kpuk
А какое отношение имеет ко всему этому Autoit? Разбирайся с API!

kpuk
30-07-2006, 13:11
Ну какбы на нём писать просто - это раз!
И в нём вроди как есть функция dllcall которая позволяет работать с апи!
ВОт по этому и спрашиваю

VelDmi
30-07-2006, 14:47
kpuk
На Autoit сделать то, что ты хочешь невозможно. Так же как и на WBS. Это проблема реализации API в програме RunpadShell.

ANGRO
01-08-2006, 22:30
Набросал включение отключение сетевой карточки, мож кому пригодится.

$sConnectionName = "Home Office Connection"
$shellApp = ObjCreate("shell.application")
$oNetConnections = $shellApp.Namespace(0x00000031)
For $folderitem in $oNetConnections.items
For $verb in $folderitem.verbs
if $folderitem.name = $sConnectionName Then
$verb.DoIt
Sleep(1000)
ExitLoop 2
EndIf
Next
Next
If $folderitem.name <> $sConnectionName Then msgbox(48, "Ошибка", "Имя соединения указанно не правильно")
Exit


Посмотрите позжалуйста Namespace(0x00000031) по этому адресу находятся "Сетевые подключения" по крайней мере у меня, судя по всему и во всех ХР подобных операционках.

bogomolv
02-08-2006, 06:03
ANGRO
??????
devcon disable *net*

ANGRO
02-08-2006, 10:19
devcon disable *net*
Понятно, у меня его на W2K3SP1 нет я думаю что в WinXP его тоже не найдут. А если приложению необходимо работать скажем на 500 разных компьютерах не являющихся собственностью одной конторы, да даже если и являющихся, что закидывать на каждый комп кучу DLL, EXE, OCX и т.д. А ведь есть компы где запрещено инсталлирование каких либо компонентов без проверки.
Да да знаю скажиш можно включить в сборку и не кто не узнает, а ещё лучше прямо в реестор писать и всё.
Я стараюсь придерживаться другой концепции, пользоваться только стандартным API настолько глубоко насколько знания позволяют и ничего не писать напрямую в реестор, пусть Win сам с этим разбирается.
Для узкой направленности автокликанья в своей винде и сборках для друзей и помощи на работе самый короткий путь типа "взял скачал, на винт забросил, команду передал" подходит, а когда билд уходит на сторону хочется гарантировать определённые вещи.
В любом случаи ИМХО мне интересней учится взаимодействию с операционкой используя её возможности.
P.S. сколько твой devcon весит, а сколько мой код ?

bogomolv
02-08-2006, 11:28
ANGRO
Может, все же зайдешь по ссылке, которую я тебе давал? Это снимет кучу заданных вопросов.
А на счет "интереснее" - тут спору нет. :)

ANGRO
03-08-2006, 00:32
bogomolv
Спасибо воспользуюсь твоим предложением.
Namespace(49) разобрался писать нужно так Namespace(0x00000031)

Creat0R
03-08-2006, 03:17
Кто нибудь может пожалуйста помочь разобраться с такой пропблемой:

Чтобы прописывать строчки в начало секции *.ini файла, я воспользовался функцией Func IniWriteVP...
Так вот, когда я попытался воспользоваться этой функцией в (цикле?) Select...Case...EndSelect, то выдалась ошибка о том что нету совпадения между Select и Case и между EndSelect (что-то в этом роде), и вообще практический все команды в таком цикле не исполняются (т.е если в этом цикле используется упомянутая функция). Вот пример, который по идее, должен записывать в заданную секцию, параметр со значением, в первую строку этой секции:


Select

Case $CmdLine[0] = 0

$File = "Test.ini"
$Sect = "Test Section"
$Param = "Parametr Test"
$Val = "Value Test"


IniWriteVP($File,$Sect, $Param, $Val, 1)
Func IniWriteVP($File,$Sect, $Param, $Val, $Pos=0)
IniWrite($File,$Sect,$Param,$Val)
EndFunc

EndSelect

Но как я уже упомянул, этого не происходит, и выдаётся ошибка.
Может кто нибудь подскажет в чём дело, как это осуществить?

XXXler
03-08-2006, 16:23
IniWriteVP($File,$Sect, $Param, $Val, 1) Func IniWriteVP($File,$Sect, $Param, $Val, $Pos=0) IniWrite($File,$Sect,$Param,$Val) EndFunc
ну теперь я буду матерится :read: , сколько можно топтатся на этих граблях?

Функция - это подпрограмма, описанная за пределами основного тела программы (впрочем в AutoIT это не обязательно, т.к. нет четкой границы, можно ставить и в начале (после объявления глобальных переменных ипользованных в ней), и в конце), которую можно вызывать из основного тела программы, передавая ей параметры, получая от нее результат:

;~ Описываем функцию:
Func MyFunc($par1,$par2)
;~ Выводим сообщение с переданными параметрами
MsgBox(0,$par1,$par2)
;~ Возвращаем результат Result
Return "Result"
EndFunc

;~ Тело программы
;~ .....................
$var=MyFunc("Заголовок","Сообщение")
MsgBox(0,"","Функция MyFunc возвранила значение "&$var)
;~ .....................


Значит смотрется это все будет так:


;~ Описываем функцию
Func IniWriteVP($File,$Sect,$Param,$Val,$Pos=0)
Local $ValArr,$i
If $Pos<>0 Then IniDelete($File,$Sect,$Param)
$ValArr=IniReadSection($File,$Sect)
If @error Or $Pos=0 Or $ValArr[0][0]<$Pos Then
IniWrite($File,$Sect,$Param,$Val)
SetError(@error)
Else
For $i=1 To $ValArr[0][0]
IniDelete($File,$Sect,$ValArr[$i][0])
Next
For $i=1 To $ValArr[0][0]
If $Pos=$i Then IniWrite($File,$Sect,$Param,$Val)
IniWrite($File,$Sect,$ValArr[$i][0],$ValArr[$i][1])
Next
EndIf
EndFunc

;~ А теперь ее используем
Select
Case $CmdLine[0] = 0
IniWriteVP(@ScriptDir&"\Test.ini","Test Section","Parametr Test","Value Test",1)
;~ .......

EndSelect




© OSzone.net 2001-2012