Войти

Показать полную графическую версию : [Архив - Часть 1.3] 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

Creat0R
30-04-2007, 22:39
Diamond
Процесс в котором обнаруживается совпадение, скорее всего виден в Диспетчере задач.
Неа, не видно :)

Попробуй индифицировать его по параметрам командной строки:
Тоже нету :idontnow:
Я не уверен что это корректный способ проверять вторичный запуск скрипта, ведь подобных процессов может быть запущено несколько, и тогда проверка провалится (выдаст что уже запущен процесс)... вроде _Singleton() хорошо справляется с этой задачей.


amel27
Второй случай в принципе можно реализовать на AutoIT, но потребуется дополнительный скрипт, управляющий поведением основного на время выполнения системных функций выбора
Можно использовать тот же скрпт, но запускать его (до/в процессе вызова функции) с параметрами ком. строки, в которых кстати можно и передавать разного рода информацию нужную для идентификации запускаемого окна. А в начале скрипта поставить распознавание этой самой ком. строки - один минус, будет запущено два процесса одного скрипта.

можно попытаться задать начальную папку или текст статусной строки
Смутно себе представляю как можно извне задать начальную папку (речь ведь идёт о функции _FileSelectFolder() ?), я ещё не встречал функции которые способны раскрывать дерево папок во внешних приложениях (окон) основываясь на обычных данных (имя папки в данном случае), не на основе идентификаторов (типа ControlID).

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

mrak1990
30-04-2007, 23:17
Creat0R
Там установщик для каких целей? помещает ярлыки? хотелось бы реализовать помещение пункта в контекстное меню проводника, тогда это было бы весьма полезно.

Если честно, то я просто сделал архив подобный тому, что висит у тебя на сайте... Но идея, предложенная тобой кажется мне очень удачной. Сегодня же возьмусь за её реализацию.


P.S. Так что пока можешь не скачивать выложенный мною архив.

amel27
01-05-2007, 05:29
Creat0RСмутно себе представляю как можно извне задать начальную папку (речь ведь идёт о функции _FileSelectFolder() ?), я ещё не встречал функции которые способны раскрывать дерево папок во внешних приложениях (окон) основываясь на обычных данных (имя папки в данном случае), не на основе идентификаторов (типа ControlID)
все гораздо проще... :) API-функция SHBrowseForFolder сама на многое способна, нужно только отправить ей нужное сообщение, полный список поддерживаемых сообщений смотри в "Remarks" к Callback-функции: http://msdn2.microsoft.com/en-us/library/ms649522.aspx

Creat0R
01-05-2007, 06:27
amel27
API-функция SHBrowseForFolder сама на многое способна, нужно только отправить ей нужное сообщение
Ох... еслиб я ещё знал как теперь всё это реализовать :sorry: ... как вообще изначально вызвать эту функцию? (я уже не говорю/спрашиваю о том как ей что то передать).

amel27
01-05-2007, 09:19
Creat0R

К сожалению, CallBack-функция ничем не сможет помочь, зато в мануале к ней перечислены все сообщения, которые она может отправлять... В первом приближении все достаточно просто - запускаем _FileSelectFolder, открывается окно выбора каталога, уравляющий (фоновый) скрипт распознает это окно и отправляет ему сообщение (SendMessage или PostMessage) о переходе в нужное место дерева каталогов

mrak1990
01-05-2007, 17:52
У меня такой вопрос. Как можно по средствам AutoIT удалить ветку реестра? Стандартными командами, как я понял нельзя.

Creat0R
Кстати помещение пункта в контекстное меню проводника у меня получилось.

amel27
01-05-2007, 18:22
mrak1990У меня такой вопрос. Как можно по средствам AutoIT удалить ветку реестра? Стандартными командами, как я понял нельзя.цитата из справки:RegDelete
--------------------------------------------------------------------------------

Deletes a key or value from the registry.FYI: key - ветка, value - параметр

mrak1990
01-05-2007, 18:38
цитата из справки:
Цитата:
RegDelete
--------------------------------------------------------------------------------

Deletes a key or value from the registry.

FYI: key - ветка, value - параметр

Это я всё знаю. Но как я понял, с её помощью можно удалять только ключи. Пробовал удалять с её помощью разделы. Никак не получается.
Допустим, мне нужно удалить следующий раздел рестра: "HKEY_CLASSES_ROOT\*\shell\Toogle Hidden Files&Folders\command" Как будет выглядеть команда в этом случае?

mrak1990
01-05-2007, 18:52
Пробовал вводить команду: REG DELETE "HKCR\*\shell\Toogle Hidden Files&Folders" Но что-то не очень помогает.

amel27
01-05-2007, 20:22
mrak1990
все удаляет - и через AutoIT, и через CMD... какие сообщения?

mrak1990
01-05-2007, 21:46
mrak1990
все удаляет - и через AutoIT, и через CMD... какие сообщения?
Как оказалось, у меня были временные заскоки в реестром. Может быть из-за того, что я просматривал его через RegWorks. Хотя сейчас всё нормально.

amel27
Можешь всё таки написать, как удалить раздел реестра, только через RegDelete?

Creat0R
01-05-2007, 22:46
amel27
запускаем _FileSelectFolder, открывается окно выбора каталога, уравляющий (фоновый) скрипт распознает это окно и отправляет ему сообщение (SendMessage или PostMessage)
а вот как его послать? полагаю нужно вызвать как то Dll (User32.dll?), но как, с какими именно параметрами... для меня эта сфера пока ещё тёмный лес... даже боюсь туда зайти :not-me:

mrak1990помещение пункта в контекстное меню проводника у меня получилось.
Если не трудно, раскажи в чём секрет? :) (в ПМ наверно, а то как то оффтоп получается).

как удалить раздел реестра, только через RegDelete?

RegDelete("HKCR\*\shell\Toogle Hidden Files&Folders")

mrak1990
02-05-2007, 17:51
Цитата:
как удалить раздел реестра, только через RegDelete?




Код:
RegDelete("HKCR\*\shell\Toogle Hidden Files&Folders")

Извиниясь за этот тупой вопрос. Я же до этого сам написал, что проблема была в заскоках моей Винды.



Creat0R
Закончил я с обещанным скриптом. Я думаю ты и сам разберёшься как он работает. Запускай только СКОМПИЛИРОВАННЫЙ скрипт.
Вот ссылка на скачку: http://ifolder.ru/1876076



P.S. Описание в самом начале скрипта я немного изменил (авторские права)... :mellow:

Creat0R
02-05-2007, 19:55
mrak1990
Закончил я с обещанным скриптом
Спасибо.

Но пару примечании...

Не совсем верно переименовывать файл скриптом из самого себя :) - это иногда может и не сработать. Лучше сначала прописать в реестре данные, а потом перед самым выходом скрипта послать командную строку с ожиданим в одну секунду, и переименовыванием скрипта... примерно так:

Run(@ComSpec & ' /c ping -n 1 localhost > nul & Ren "' & @ScriptFullPath & '" "' & @ScriptDir & '\Выключить Fast Toogle Hidden Files&Folders.exe"', '', @SW_HIDE)
Exit


И ещё, это не совсем то что я имел в виду, мне нужен способ поместить пункт не в контекстное меню файлов и папок (кстати с этим методом в меню папок пункт так и не помещается), а в меню которое появляется при нажатии правой кнопкой мышки в пустом месте проводника (даже на рабочем столе) или нажатием Ctrl Shift F10 - См. мой пост тут (http://forum.oszone.net/thread-62252-2.html#post552275) - Пока что никто так и не знает как это сделать :(.

mrak1990
02-05-2007, 20:05
Не совсем верно переименовывать файл скриптом из самого себя - это иногда может и не сработать. Лучше сначала прописать в реестре данные, а потом перед самым выходом скрипта послать командную строку с ожиданим в одну секунду, и переименовыванием скрипта... примерно так:
А с чем это связано? Как я понял, при запуске скрипа он первым делом обрабатывается интерпретатором и висит в памяти. И он уже не обращается к файлу. Возможно, что я и не прав. У кого есть мысли по этому поводу - пишите.

mrak1990
02-05-2007, 23:07
Creat0RПока что никто так и не знает как это сделать .
Покопался я насчёт этого вопроса. Но только начал копать в сторону меню у папок и файлов и пришёл к выводу, что такие пункты как "WinRAR", "Проверить на вирусы" (Kaspersky) добавляются из .dll-файлов. Потом даже открыл какой-то из файлов WinRAR,а и нашёл там строки из контекстного меню.
А у меня на рабочем столе в меню есть пункт "Панель управления NVIDIA", которую можно убирать через настройки. Я думаю с этим пунктом таже история, что и с WinRAR - как-то через DLL. Короче на данном этапе врядли что-то получится сделать.

amel27
03-05-2007, 16:11
Creat0Rполагаю нужно вызвать как то Dll (User32.dll?), но как, с какими именно параметрами... для меня эта сфера пока ещё тёмный лес... вот пример, проверил - вроде работает:$hwnd = WinGetHandle ("Обзор папок")

$ret = DllCall ("user32.dll", "int", "SendMessage", _
"hwnd", $hwnd, _
"int", 0x400 + 101, _ ; код сообщения BFFM_SETOKTEXT
"int", 0, _
"int", 0 ) ; 0/1 - выключить/включить кнопку "OK"

Creat0R
04-05-2007, 04:45
amel27
вот пример
Спасибо, но вроде в функции уже есть возможность автоотключения кнопки ОК в нужный момент (если использовать $flag=1), но вот как быть с Init Dir? какой код у параметра BFFM_SETEXPANDED (или может нужен BFFM_SETSELECTION?)?

Creat0R
04-05-2007, 13:34
Такой вопрос:
Как можно средставми RegExp осуществлять массовую замену в переменной?

Т.е к примеру, имеем такое значение - $Var = "Test%20My/Test" - тут нужно одним махом заменить %20 на пробел, а / (перевёрнуты слэш) на \ (прямой слэш)....

Пробую так:

$NewVar = StringRegExpReplace($Var, "%20|/", " |\\")

Но замена осуществляется всех вхождении (из набора разделённого через |) на вот это - |\
Как такую замену можно произвести? или это не предусмотрено?

TERMINAL
04-05-2007, 18:15
Вопрос !
Кто-то может помочь?

Например винт разбит на С, D, E, F - CD-ROM, нужно скриптом определить эти диски и отформатить D,E без всяких визуальных эфектов (тихий режим).




© OSzone.net 2001-2012