Orion9

|
Posted: Thu Dec 05, 2024 14:08 Post subject: |
|
|
Loopback wrote: | Выглядит похоже, но нет. Обратите внимание, что при нажатом Ctrl и другие подсказки не появляются. А если нажать Ctrl при активной подсказке - она сразу скрывается. |
До смешного!.. А может, он (х64) таким же образом и MsgBox гасит?
Loopback wrote: | Точно так же себя ведут и другие модификаторы - Shift, Alt, Win. Более того, эти модификаторы скрывают подсказку и в x86. |
Да, эту фишку я давненько просек. Иначе чем палками в колеса Autorun, это никак не назвать.)
Loopback wrote: | А вот что самое смешное: в тотале 10.51 x86 так же себя ведет и Ctrl. Т.е. возможность удерживать Ctrl не скрывая подсказку есть только в х86 версии тотала начиная где-то с 11 версии... |
Выход есть - использовать Lock, с ним все работает даже в 64-х битном ТС. Пример с MI можно найти на предыдущей странице. Т.е. привязываться надо не к клавишам, а к переменной и ее состоянию. Понятно, что реальное нажатие на Ctrl и другие модификаторы так работать не будет, а ведь именно это иногда и требуется, если нужно по-быстрому вызвать дополнительную информацию в подсказке к какому-то единичному файлу. Но можно и локом, раз других вариантов нет.
Решил посидеть пока в TC x64 - посмотреть, что еще может пойти не так. Пока ничего не нашел, вроде. Хотя функционала на Autorun накопилось немало за все это время, т.ч. быстро проверить не получится.
WMI запроос:
Code: | SELECT Address, ResponseTime, ResponseTimeToLive, StatusCode FROM Win32_PingStatus WHERE BufferSize = 32 AND Timeout = 1000 AND (Address = "192.168.1.1" OR Address = "192.168.1.2" OR Address = "wincmd.ru") |
Все так же приводит к ошибке "Неожиданная кавычка " в строке". Работает только запрос с одинарной кавычкой в обоих версиях разрядности:
Code: | SELECT Address, ResponseTime, ResponseTimeToLive, StatusCode FROM Win32_PingStatus WHERE BufferSize = 32 AND Timeout = 1000 AND (Address = '192.168.1.1' OR Address = '192.168.1.2' OR Address = 'wincmd.ru') |
Предложение: GetState("envvars") - класс! А если бы еще была возможность выводить переменные окружения создаваемые только в Autorun? Было бы очень удобно.
Ну, и пара моментов по вчерашнему посту. Запуск отслеживания с зажатым Win переводит скрипт в режим тестирования цвета фона подсказки. Любые изменения в окне ColorMania или окна диалога цвета при нажатии Ctrl будут вызывать подсказку с цветом фона выбранного цвета. Идея была наглядно подбирать стили и цвета к подсказке, но пока идея недоделанная, хотя и рабочая (подсказки отображаются одна за другой). Теперь необязательно запускать окно ColorMania, поток может работать и со стандартным (системным) диалогом выбора цвета, который можно вызвать по-разному. Поскольку я больше ориентируюсь на Autohotkey, то нашел в сети скрипт для этого, но вы можете ипользовать и другие методы при необходимости.
 ColorDialog.ahk Code: | global cc, defColor
cc := 0x00FF00
defColor := [0xAA0000,0x00AA00,0x0000AA]
cc := ColorSelect(cc,,&defColor,1)
ColorSelect(Color := 0, hwnd := 0, &custColorObj := "",disp:=false) {
Static p := A_PtrSize
disp := disp ? 0x3 : 0x1 ; init disp / 0x3 = full panel / 0x1 = basic panel
If (custColorObj.Length > 16)
throw Error("Too many custom colors. The maximum allowed values is 16.")
Loop (16 - custColorObj.Length)
custColorObj.Push(0) ; fill out custColorObj to 16 values
CUSTOM := Buffer(16 * 4, 0) ; init custom colors obj
CHOOSECOLOR := Buffer((p=4)?36:72,0) ; init dialog
If (IsObject(custColorObj)) {
Loop 16 {
custColor := RGB_BGR(custColorObj[A_Index])
NumPut "UInt", custColor, CUSTOM, (A_Index-1) * 4
}
}
NumPut "UInt", CHOOSECOLOR.size, CHOOSECOLOR, 0 ; lStructSize
NumPut "UPtr", hwnd, CHOOSECOLOR, p ; hwndOwner
NumPut "UInt", RGB_BGR(color), CHOOSECOLOR, 3 * p ; rgbResult
NumPut "UPtr", CUSTOM.ptr, CHOOSECOLOR, 4 * p ; lpCustColors
NumPut "UInt", disp, CHOOSECOLOR, 5 * p ; Flags
if !DllCall("comdlg32\ChooseColor", "UPtr", CHOOSECOLOR.ptr, "UInt")
return -1
custColorObj := []
Loop 16 {
newCustCol := NumGet(CUSTOM, (A_Index-1) * 4, "UInt")
custColorObj.InsertAt(A_Index, RGB_BGR(newCustCol))
}
Color := NumGet(CHOOSECOLOR, 3 * A_PtrSize, "UInt")
return Format("0x{:06X}",RGB_BGR(color))
RGB_BGR(c) {
return ((c & 0xFF) << 16 | c & 0xFF00 | c >> 16)
}
}
|
В последнее время вносил много изменений, но мало тестировал, т.ч. могут быть какие-нибудь огрехи или косяки. Если заметите что-то, пишите.) |
|