View previous topic :: View next topic |
Author |
Message |
Orion9

Joined: 01 Jan 2024 Posts: 716
|
(Separately) Posted: Thu Mar 06, 2025 00:22 Post subject: |
|
|
Loopback wrote: | В справке говорится, что если |
Накосячил, признаю.
Loopback wrote: | Параметры со значением по умолчанию для таких задач и предназначены |
После обновления у меня этот хинт стал переодически появляться с тёмным фоном и светло-жёлтымим полями вместо текста, будто сам текст был закрашен. Но так совпало, что я как раз вносил изменения в эту функцию, поэтому решил уточнить лишний раз, держа в голове недавнюю проблему с опусканием параметров по умолчанию, о чём было выше. Но сейчас подозреваю, что проблема была связана с отсутствием Sleep перед SetHintParam("ShowHint", "Reload"). Я только недавно добавил Sleep(50) к тому коду. Видимо, всё-таки стиль не успевал полностью смениться, поэтому и появлялись поля другого цвета. Но ещё понаблюдаю. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 716
|
(Separately) Posted: Sun Mar 09, 2025 12:20 Post subject: |
|
|
Loopback
Проверил объект Map - всё работает. У вас, случайно, нет планов добавить к нему свойство Count, чтобы можно было перечислять элементы карты? Сейчас для этого требуется создавать временный массив, т.е объект List:
Code: | Local mFiles = Map()
...
Local i, txt
Local aKeys = list()
aKeys.Text = mFiles.Keys()
For i = 0 To aKeys.Count - 1
txt &= mFiles[aKeys[i]] & auCRLF
Next
MsgBox(txt)
Free(aKeys, mFiles) |
 Полный тестовый код Code: | SetHotkeyAction /H:F11 MapObjTest
Func MapObjTest()
Local ffd = Buffer(604)
Local file, attr, ini, inst, desc, name
Local hf = DllCall("FindFirstFileW", "wstr", COMMANDER_PATH & "\Ini\" & "Color*.ini", "ptr", ffd.Ptr)
If Not (hf > 0) then
Free(ffd)
MsgBox("Файлы Color*.ini не найдены")
Return
Endif
Local mFiles = Map()
While 1
file = ffd.GetStr(44)
attr = ffd.GetNum(0, "dword")
If Not BitAND(attr, 16) Then
ini = COMMANDER_PATH & "\Ini\" & file
IniRead inst %ini% "ColorTheme" "Instance" 0
If inst <> 0 Then
IniRead desc %ini% "ColorTheme" "Description"
IniRead name %ini% "ColorTheme" "Name"
mFiles.Set (ini, name)
EndIf
Endif
If DllCall("FindNextFileW", "handle", hf, "ptr", ffd.Ptr) = 0 Then Break
Wend
DllCall("FindClose", "handle", hf)
Free(ffd)
Local i, txt
Local aKeys = list()
aKeys.Text = mFiles.Keys()
For i = 0 To aKeys.Count - 1
txt &= mFiles[aKeys[i]] & auCRLF
Next
MsgBox(txt)
Free(aKeys, mFiles)
EndFunc |
Код завязан на ini-файлы с секцией ColorTheme:
 Файлы Code: | [ColorTheme]
Name=System
Description=Система
Instance=4 |
Code: | [ColorTheme]
Name=Dark
Description=Тёмные тона
Instance=1 |
Code: | [ColorTheme]
Name=Roman Silver
Description=Светлые тона
Instance=2
|
Делал, основываясь на примере из справки, но мне кажется, в нём есть небольшая неточность:
FindFirstFileW может вернуть -1, а значит условие пропустит код, что может привести к интересным результатам ) И ещё одно уточнение: после последнего вызова FindNextFileW необязательно использовать FindClose?
Был ещё один давний вопрос, который забывал спросить. Некоторые wdx-плагины перестают работать после того, как их загружаешь в объект Plugin и потом освобождаешь через Free. Проверить можно на обычной подсказке:
Code: | 1exts=*.aucfg;autorun.cfg;*.ahk;*.au3; *.vbs
1fields=Число строк: [=linebreakinfo.CRLF Count]\nБайт прочитано: [=linebreakinfo.Bytes Read] |
Если в коде добавить две строки:
Code: | objLineB = Plugin("LineBreakInfo.wdx")
Free(objLineB) |
То после запуска ТС, подсказка на панелях не будет работать, т.е. поля плагина в подсказке будут пустыми. Но если убрать Free, то всё нормально.
Можно, конечно, использовать объект без освобождения в некоторых случаях, если он больше не нужен, но будет ли это правильным и не приведёт ли ещё к каким-то проблемам в будущем? |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1483
|
(Separately) Posted: Mon Mar 10, 2025 12:01 Post subject: |
|
|
Orion9 wrote: | У вас, случайно, нет планов добавить к нему свойство Count, чтобы можно было перечислять элементы карты? |
Не планировалось. Не то чтобы это невозможно, но тут просто сам принцип подразумевает перечисление по списку, т.к. индексом является ключ. Понятно, что лучше если бы сразу возвращался объект списка с ключами, но пока в силу имеющихся ограничений делать так не хотелось бы.
Orion9 wrote: | есть небольшая неточность |
Согласен.
Надо, конечно. Делал для проверки DllCall, так он и пошел незаконченный в пример.
Orion9 wrote: | Некоторые wdx-плагины перестают работать после того, как их загружаешь в объект Plugin и потом освобождаешь через Free. |
Выглядит вполне вероятно, учитывая что всё находится в едином адресном пространстве. Надо будет посмотреть.
Orion9 wrote: | Можно, конечно, использовать объект без освобождения в некоторых случаях, если он больше не нужен, но будет ли это правильным и не приведёт ли ещё к каким-то проблемам в будущем? |
Если создать его однократно глобально или со Static - почему бы и нет. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 716
|
(Separately) Posted: Mon Mar 10, 2025 23:59 Post subject: |
|
|
Loopback, понятно. Собственное перечисление элементов, конечно бы, не помешало. В AutoHotkey, например, используются две переменные:
Code: | For key, value in objMap {
} |
Но объекту Map всё-равно непросто найти применение, думаю, для многих задач сейчас подойдет простая связка двух объектов List:
Code: | Local aKyes = List(), aValues = List() |
И перечислять их будет гораздо проще.
На счёт DllCall, понял. А вот с плагинами дела, конечно, похуже. Некоторые плагины не просто перестают работать, но и "валят" Тотал, после сообщений об ошибках. Причём, как отмечалось, далеко не все плагины склонны к такому поведению.
Например, у меня в подсказке к jpg-файлам используются два плагина: wdx4i и jpg-comment. Первый никак не реагирует на то, загружается ли он в коде Autorun или выгружается, а вот второй, сразу после выгрузки, сообщает о фатальной ошибке и валит ТС.
Code: | Crash in plugin jpg-comment.wdx:
Access violation at address 07E58163. Read of address 00000118 |
Если как-то можно исправить такое поведение, было бы классно. Но на край, можно и не выгружать. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 262
|
(Separately) Posted: Tue Mar 11, 2025 09:17 Post subject: |
|
|
Loopback
Хотелось-бы обратить ваше внимание на такой нюанс. Попытался удалить ветку реестра с использованием справки. И выяснилось, что на мой взгляд, ключ "~/K" RegDelete не совсем корректно описан в справке. В справке написано, что "/K При пустом параметре или его отсутствии удаляет ключ целиком." На практике выяснилось, что /K действует по разному при удалении пустого параметра имеющего значение или не имеющего. Например:
Code: |
If num <> 6 Then
# регистрация схемы
# registration scheme
RegWrite("HKCU\AppEvents\Schemes\Apps\Wincmd\WincmdConnected\.current", "", "REG_SZ", DirSoundsScheme & "Connect.wav")
Else
# удаляем схему
# delete scheme
RegDelete("~/K", "HKCU\AppEvents\Schemes\Apps\Wincmd\WincmdConnected\.current")
RegDelete("~/K", "HKCU\AppEvents\Schemes\Apps\Wincmd\WincmdConnected")
RegDelete("~/K", "HKCU\AppEvents\Schemes\Apps\Wincmd")
|
Если в команде RegDelete("~/K", "HKCU\AppEvents\Schemes\Apps\Wincmd\WincmdConnected\.current") не прописать "~/K" эта ветка не удалится, если значение .current пусто.
Не знаю, понятно-ли я описал проблему? Если все понятно и вы со мной согласны, хотелось-бы увидеть корретировку описания в справке. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1483
|
(Separately) Posted: Tue Mar 11, 2025 12:25 Post subject: |
|
|
Orion9 wrote: | Собственное перечисление элементов, конечно бы, не помешало. |
Конструкция for..in давно на всякий случай лежит в todo. Проблема в том, что при необходимости явного освобождения объектов обязательно найдутся те, кто захочет использовать это в виде
for var in List("aa", "bb", "cc")
что неизбежно приведет к утечкам памяти. Разве что принудительно разрешить использовать после in только переменные.
Orion9 wrote: | для многих задач сейчас подойдет простая связка двух объектов List |
Сделать так можно, конечно, но тут главное отличие в скорости. Хеш-таблицы намного быстрее работают при необходимости поиска ключевого значения. Да и просто удобнее в ряде случаев. В Autoit я его постоянно использую.
Orion9 wrote: | Если как-то можно исправить такое поведение, было бы классно. |
Вероятно, единственный вариант - проверять, загружен ли плагин в данный момент, и если загружен - то не пытаться с ним что-то делать, кроме получения списка полей и данных. Т.е. не загружать повторно библиотеку, не выполнять функции ContentSetDefaultParams и ContentPluginUnloading, и не выгружать библиотеку при освобождении объекта.
Ну а пока не выгружать.
AkulaBig
Под "пустым параметром" в описании к /K имеется в виду параметр функции param. А не фактическая пустота значения в реестре.
Для удаления "HKCU\AppEvents\Schemes\Apps\Wincmd\WincmdConnected\.current", естественно, нужен /K, поскольку без него при пустом значении param будет удалено значение ключа "по умолчанию", а не сам ключ.
Уточню в справке. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 262
|
(Separately) Posted: Tue Mar 11, 2025 13:38 Post subject: |
|
|
Loopback wrote: | Под "пустым параметром" в описании к /K имеется в виду параметр функции param. А не фактическая пустота значения в реестре. |
Я это не сразу понял, но писать из-за этого не стал-бы.
Loopback wrote: | Для удаления "HKCU\AppEvents\Schemes\Apps\Wincmd\WincmdConnected\.current", естественно, нужен /K, поскольку без него при пустом значении param будет удалено значение ключа "по умолчанию", а не сам ключ. |
В том-то и дело, что это не естественно, так как пустой ключ реестра в любом языке удаляется без всяких опций.
Loopback wrote: | Уточню в справке. |
Да, всего-то надо две строчки. Одна без ключа "~/K" и описанием, что так удаляется значение по умолчанию и вторая с ключом - удаляется сам ключ. И сразу станет все ясно.
Спасибо за понимание. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 716
|
(Separately) Posted: Wed Mar 12, 2025 20:19 Post subject: |
|
|
Loopback wrote: | Разве что принудительно разрешить использовать после in только переменные. |
Если так можно сделать, думаю, как вариант сойдет, почему нет.
Loopback wrote: | Хеш-таблицы намного быстрее работают при необходимости поиска ключевого значения. |
Полезная информация, спасибо.
Loopback wrote: | Ну а пока не выгружать. |
Да, видимо, только так. Уже попробовал на LineBreakInfo, вроде пока работает.
AkulaBig
Добавьте алгоритм случайного перебора wav-файлов, будет гораздо веселее и интереснее. У вас сейчас всё-равно целый поток крутится, можно сделать, чтобы каждые 5-10 циклов значения ключей в реестре из него перезаписывались новыми случайными wav-файлами. Ничего сложного, а результат вас точно порадует )
 Hidden text Code: | Func ThreadSoundsDir
Local debg = 1, key, val
Local ini = DIR_SOUNDS & "Sounds.ini", out, i
If Not FileExist(ini) Then
MsgBox("Не найден " & ini)
Return
Endif
ProcessExecGetOutput /OEM out %COMSPEC% "/c dir /s /b *.wav" %DIR_SOUNDS%
Local aWav = List()
aWav.Text = out
Local aNames = List("WincmdConnected","WincmdCopyComplete","WincmdDeleteComplete","WincmdPackComplete", _
"WincmdSearchComplete","WincmdTransferComplete","WincmdUnpackComplete")
While 1
For i = 0 To aNames.Count - 1
val = aWav[Random(0, aWav.Count-1, 1)]
key = "HKCU\AppEvents\Schemes\Apps\Wincmd\" & aNames[i] & "\.current"
RegWrite(key, "", "REG_SZ", val)
If debg Then
OutputDebugString("Autorun: key = " & key)
OutputDebugString("Autorun: val = " & val)
EndIf
Next
Sleep(1000)
Wend
Free(aNames, aWav)
EndFunc
|
В этом примере файлы выбираются через " dir /s /b *.wav", но можно взять пример выборки через DllCall, который был выше. Да и сам алгоритм можно сделать или доделать на свое усмотрение.
Orion9 wrote: | Думаю, за неделю где-то сделаю. |
Посмеялся )
Видимо, всё-таки придётся выложить как есть, поскольку сейчас много других дел и на Autorun времени почти нет, но многое будет без описания и комментариев. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 262
|
(Separately) Posted: Wed Mar 12, 2025 22:32 Post subject: |
|
|
Orion9 wrote: | Добавьте алгоритм случайного перебора wav-файлов |
Я опирался на тот ваш код. Но уж больно большой объем. Поэтому сделал все по накатанному алгоритму. И сейчас это ведь надо будет Sounds.ini создавать. Да и звуки у меня по темам, а придется еще и в кучу все сваливать. Пока считаю это избыточным.
Orion9 wrote: | Видимо, всё-таки придётся выложить как есть |
Делайте, как вы считаете лучше. Вы никому ничего не должны.
Orion9 wrote: | поскольку сейчас много других дел и на Autorun времени почти нет |
Я тоже отвлекался.
 Hidden text
Еще один плагинчик сделал. А он таким вредным оказался. Вернее используемая прожка. Пришлось и ее под себя компилить.
|
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 716
|
(Separately) Posted: Thu Mar 13, 2025 00:21 Post subject: |
|
|
AkulaBig wrote: | надо будет Sounds.ini создавать. Да и звуки у меня по темам, а придется еще и в кучу все сваливать |
Sounds.ini необязателен для случайного перебора, да и в кучу не придется все валить. Главное - найти интересные звуки, что может оказаться не такой простой задачей, как кажется. Но для старта вполне подойдет парочка тестовых наборов. Если хотите, попробуйте:
https://www.upload.ee/files/17847052/Sounds.zip.html
AkulaBig wrote: | Делайте, как вы считаете лучше. Вы никому ничего не должны. |
Эт точно. И все же... Не надо ставить дедлайнов, чтобы не было дедэндов )
AkulaBig wrote: | Я тоже отвлекался. |
Да, я видел. Времени только не было попробовать, но еще обязательно попробую. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 262
|
(Separately) Posted: Thu Mar 13, 2025 05:33 Post subject: |
|
|
Такое впечатление, что мы с вами с одного сайта дергали Я хотел хотя-бы одну тему создать, но теперь понял, что это будет не в ближайшее время. Занялся иконками дисков и пока не получается без перезагрузки. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 716
|
(Separately) Posted: Mon Mar 17, 2025 00:19 Post subject: |
|
|
Да уж... Не думал, что всё так затянется.
Угораздило меня залезть в заголовок, что и заняло большую часть времени. Хорошо хоть под корень не стал ничего ломать, а только фич новых довесил. Думаю, тем, кому интересна тема заголовка, найдут что-нибудь для себя интересное:
https://www.upload.ee/files/17862038/TC_11.51.7z.html
Добавил переключение между конфигурациями, что открыло дополнительные возможности. Ну, и собрал все скрипты, которые накопились за это время, как обещал. Фишек там не мало
AkulaBig wrote: | Я хотел хотя-бы одну тему создать, но теперь понял, что это будет не в ближайшее время. |
Да, со звуками не так всё просто. Можно часами с ними возится. Хорошо, что меня пока R2D2 полностью устраивает в рандомном воспроизведении ) |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 262
|
(Separately) Posted: Mon Mar 17, 2025 12:03 Post subject: |
|
|
Orion9 wrote: | Угораздило меня залезть в заголовок |
Да, заголовок суперпрофессиональный получился. Только постоянно появляется надпись pinding... или другие служебные сообщения. Похоже тяжеловато наполнение для постоянного обновления. Хотя конечно это все настраивается. UP, DN без названия. Наверное не всем понятно будет. Видимо не хватает места. Зачем тогда постоянно висит надпись Zyxel Offline? Какое у ней предназначение? Я уж подумал тантрическое. У меня раньше был роутер этой марки. И ведь я не поленился поставить лестницу и посмотреть. Но нет, стоит роутер другой фирмы. Никакого полтергейста
С остальным еще не разбирался. Буду потихоньку подсматривать. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 716
|
(Separately) Posted: Wed Mar 19, 2025 00:09 Post subject: |
|
|
AkulaBig
Смешно у вас в конце получилось, улыбнуло )
AkulaBig wrote: | Да, заголовок суперпрофессиональный получился. |
Ну, такой вид заголовок приобрёл не сразу - потребовался целый год, чтобы навесить фич. Первая версия ещё хранится на форуме и она содержит всего 200 строк, но кроме пинга и производительности там ничего нет
https://forum.wincmd.ru/viewpost.php?p=137062
AkulaBig wrote: | Только постоянно появляется надпись pinding... или другие служебные сообщения. |
У меня возникла однажды потребность следить за устройствами в сети. Утилит в этом плане, конечно, хватает, например, тот же PingInfoView от NirSoft, но полностью такие утилиты мне не подошли. Решил попробовать сделать свой скрипт ) И хотя эта тема мне была интересна, скрипт я так и не доделал - отчасти потому, что необходимость постепенно отпала, а отчасти потому, что в заголовке одного пинга стало хватать ) Но сам скрипт прикольный и рабочий, просто в нём не хватает немного функционала:
https://www.upload.ee/files/17870332/Ping.7z.html
Ох, помню, не повезло мне с кодом иконки - нашёл какой-то полурабочий вариант, который руками потом пришлось дорабатывать, а сейчас смотрю на этот NumPut и понимаю, что Loopback сделал работу с буфером куда круче и удобнее, чем в самом AutoHotkey!
Ну, а что касается служебных сообщений, так мне наоборот нравится, когда видно, что в фоне происходит: крутится там вертится, живёт своей жизнью...) Даже специально задержку добавил, чтобы такие сообщения не мелькали слишком быстро )
AkulaBig wrote: | UP, DN без названия. Наверное не всем понятно будет. |
Пробовал разные варианты. Больше всего понравились стрелки "вниз" и "вверх". Сейчас их можно добавить к скорости передачи ключом SpeedArrows в файле конфигурации, но смотрятся они хорошо, только если нет разделителя между блоками. В итоге, пришёл к тому, что лучше вообще ничего не добавлять перед объемом трафика и скоростью передачи. Ну, а на крайний случай, если вдруг хочется попробовать - изменения всегда можно внести напрямую в aucfg-скрипт.
AkulaBig wrote: | Видимо не хватает места. |
Места, пожалуй, хватит на всё. Но иногда нужно разгрузить заголовок - сделать его более компактным в один клик. Сначала взялся за шаблоны, но потом понял, что лучше сразу сделать переключение всей конфигурации. Тем более, что это даёт возможность менять все параметры сразу, включая геолокацию, настройки пинга и интервалы обновления информеров. Если, например, сделать конфигурацию, где будет отключен пинг, информеры и планировщик, то в заголовке не будет мелькать никакой служебной информации.
AkulaBig wrote: | Зачем тогда постоянно висит надпись Zyxel Offline? Какое у ней предназначение? |
Показывает, что устройство в оффлайне. Zyxel, конечно, только для примера - пинговать можно что угодно: сетевые хранилища, роутеры, холодильники, телевизоры и стиральные машинки
AkulaBig wrote: | Я уж подумал тантрическое |
Нет, тут больше дзен.) Как сказал один великий дзен мастер, когда ученики спросили его, что им делать с пингом - "Да хоть на стену его повесьте" Ну, стены-то у нас нет, зато есть заголовок ТС Так что будем и дальше развешивать ненужные датчики )) |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 262
|
(Separately) Posted: Wed Mar 19, 2025 11:52 Post subject: |
|
|
Orion9 wrote: | мне наоборот нравится, когда видно, что в фоне происходит |
Дак эти сообщения полностью стирают данные. Пусть где-нибудь в уголке живут своей жизнью, но не на весь заголовок.
Orion9 wrote: | Больше всего понравились стрелки "вниз" и "вверх". |
Круто. Надо себе забрать.
Orion9 wrote: | Zyxel, конечно, только для примера |
Увидел, что это у вас ручками вбито. Все ясно. а я думал автоматом определяется. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|