Показать полную графическую версию : [Архив - Часть 1.3] AutoIt скрипты
Diamond
Процесс в котором обнаруживается совпадение, скорее всего виден в Диспетчере задач.
Неа, не видно :)
Попробуй индифицировать его по параметрам командной строки:
Тоже нету :idontnow:
Я не уверен что это корректный способ проверять вторичный запуск скрипта, ведь подобных процессов может быть запущено несколько, и тогда проверка провалится (выдаст что уже запущен процесс)... вроде _Singleton() хорошо справляется с этой задачей.
amel27
Второй случай в принципе можно реализовать на AutoIT, но потребуется дополнительный скрипт, управляющий поведением основного на время выполнения системных функций выбора
Можно использовать тот же скрпт, но запускать его (до/в процессе вызова функции) с параметрами ком. строки, в которых кстати можно и передавать разного рода информацию нужную для идентификации запускаемого окна. А в начале скрипта поставить распознавание этой самой ком. строки - один минус, будет запущено два процесса одного скрипта.
можно попытаться задать начальную папку или текст статусной строки
Смутно себе представляю как можно извне задать начальную папку (речь ведь идёт о функции _FileSelectFolder() ?), я ещё не встречал функции которые способны раскрывать дерево папок во внешних приложениях (окон) основываясь на обычных данных (имя папки в данном случае), не на основе идентификаторов (типа ControlID).
mrak1990
Взял на себя смелость собрать дистрибутив этой проги (выглядит он точно так же), чтобы ты его у себя на сайте обновил.
Спасибо, но что то качается очень медленно :( уже пару часов .... (инет быстрый :) ).
Там установщик для каких целей? помещает ярлыки? хотелось бы реализовать помещение пункта в контекстное меню проводника, тогда это было бы весьма полезно.
mrak1990
30-04-2007, 23:17
Creat0R
Там установщик для каких целей? помещает ярлыки? хотелось бы реализовать помещение пункта в контекстное меню проводника, тогда это было бы весьма полезно.
Если честно, то я просто сделал архив подобный тому, что висит у тебя на сайте... Но идея, предложенная тобой кажется мне очень удачной. Сегодня же возьмусь за её реализацию.
P.S. Так что пока можешь не скачивать выложенный мною архив.
Creat0RСмутно себе представляю как можно извне задать начальную папку (речь ведь идёт о функции _FileSelectFolder() ?), я ещё не встречал функции которые способны раскрывать дерево папок во внешних приложениях (окон) основываясь на обычных данных (имя папки в данном случае), не на основе идентификаторов (типа ControlID)
все гораздо проще... :) API-функция SHBrowseForFolder сама на многое способна, нужно только отправить ей нужное сообщение, полный список поддерживаемых сообщений смотри в "Remarks" к Callback-функции: http://msdn2.microsoft.com/en-us/library/ms649522.aspx
amel27
API-функция SHBrowseForFolder сама на многое способна, нужно только отправить ей нужное сообщение
Ох... еслиб я ещё знал как теперь всё это реализовать :sorry: ... как вообще изначально вызвать эту функцию? (я уже не говорю/спрашиваю о том как ей что то передать).
Creat0R
К сожалению, CallBack-функция ничем не сможет помочь, зато в мануале к ней перечислены все сообщения, которые она может отправлять... В первом приближении все достаточно просто - запускаем _FileSelectFolder, открывается окно выбора каталога, уравляющий (фоновый) скрипт распознает это окно и отправляет ему сообщение (SendMessage или PostMessage) о переходе в нужное место дерева каталогов
mrak1990
01-05-2007, 17:52
У меня такой вопрос. Как можно по средствам AutoIT удалить ветку реестра? Стандартными командами, как я понял нельзя.
Creat0R
Кстати помещение пункта в контекстное меню проводника у меня получилось.
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" Но что-то не очень помогает.
mrak1990
все удаляет - и через AutoIT, и через CMD... какие сообщения?
mrak1990
01-05-2007, 21:46
mrak1990
все удаляет - и через AutoIT, и через CMD... какие сообщения?
Как оказалось, у меня были временные заскоки в реестром. Может быть из-за того, что я просматривал его через RegWorks. Хотя сейчас всё нормально.
amel27
Можешь всё таки написать, как удалить раздел реестра, только через RegDelete?
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:
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. Короче на данном этапе врядли что-то получится сделать.
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"
amel27
вот пример
Спасибо, но вроде в функции уже есть возможность автоотключения кнопки ОК в нужный момент (если использовать $flag=1), но вот как быть с Init Dir? какой код у параметра BFFM_SETEXPANDED (или может нужен BFFM_SETSELECTION?)?
Такой вопрос:
Как можно средставми 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.