Ru-Board.club
← Вернуться в раздел «Программы»

» AutoHotkey

Автор: Quasus
Дата сообщения: 15.11.2012 09:24

Цитата:

TCPath1 - это, допустим, полное имя интересующего нас исполнимого файла:
TCPath1 = C:\Program Files\TotalCmd 8.0\TOTALCMD.EXE
А что должно быть в TCPath2? Если имя НЕ интересующего нас второго TC, то зачем на него вообще ссылаться?


TCPath1, TCPath2 — два тоталкоммандера. (Или какие угодно программы, на ТС не «заточено».) Кстати, SetTitleMatchMode не нужно, мы же уже не по заголовку окна находим.
Автор: OnMyDSeeAtAll
Дата сообщения: 15.11.2012 18:17

Код: ...
TCPath1 = ...
TCPath2 = ...
TC1 := NewApp(TCPath1)
TC2 := NewApp(TCPath2)
...
Автор: Quasus
Дата сообщения: 15.11.2012 18:25
Да, конечно. Спасибо!
Автор: OnMyDSeeAtAll
Дата сообщения: 15.11.2012 19:43
Ваш код тоже оригинальный, спс. И всё же "трабла" в том, что если выставить только одну копию программы в настройках, то команда Run как собственно и клик мышью по "экзешнику", приводят к активации первого запущенного экземпляра ТС...
Автор: Vitti
Дата сообщения: 13.01.2013 14:22
Задачка
Есть маленькая программа по мониторингу, тесту и т.д. HDD - HD Tune .
На вкладке Health - просмотр СМАРТ винта - имеется такая особенность: в верхней части списка под курсором определяется класс SysListView321, а в нижней части списка какой-то левый класс #327702. Переход классов происходит где-то на параметре С3. См. скриншоты:
"Вверх" списка:

"Низ" списка:

Вопрос: как всё-таки определить что под курсором во второй части списка находится класс SysListView321 ?

Мне это нужно для скроллинга списка (послать классу сообщение прокрутки). На левом классе не прокручивается мышкой список.
Автор: creature_ws
Дата сообщения: 15.01.2013 06:13
Посылайте сообщение прокрутки классу SysListView321
Автор: creature_ws
Дата сообщения: 15.01.2013 15:04
S.M.A.R.T с помощью Autohotkey возможно прочитать так:
[more]

Код: ; вероятно, потребуется запуск от имени администратора.

computerName := A_ComputerName
wbemFlagReturnImmediately := 0x10
wbemFlagForwardOnly := 0x20

WMI := ComObjGet("winmgmts:\\" . computerName . "\root\WMI")
query := "SELECT VendorSpecific, InstanceName FROM MSStorageDriver_ATAPISmartData"
Items := WMI.ExecQuery(query, "WQL", wbemFlagForwardOnly|wbemFlagReturnImmediately)

for Item in Items {
(out) && out .= "`n`n"
out .= Item.InstanceName . "`n`n"
SmartData := ParseSmartData(Item.VendorSpecific)

for id, Attribute in SmartData
out .= id . " " . Attribute.type . ": " . Attribute.value . "`n"
}

MsgBox %out%

ParseSmartData(VendorSpecific) {
static SmartAttributeType := {
(Join,
0x01: "ReadErrorRate"
0x02: "ThroughputPerformance"
0x03: "SpinUpTime"
0x04: "StartStopCount"
0x05: "ReallocatedSectorsCount"
0x06: "ReadChannelMargin"
0x07: "SeekErrorRate"
0x08: "SeekTimePerformance"
0x09: "PowerOnHoursPOH"
0x0A: "SpinRetryCount"
0x0B: "CalibrationRetryCount"
0x0C: "PowerCycleCount"
0x0D: "SoftReadErrorRate"
0xB7: "SATADownshiftErrorCount"
0xB8: "EndtoEnderror"
0xB9: "HeadStability"
0xBA: "InducedOpVibrationDetection"
0xBB: "ReportedUncorrectableErrors"
0xBC: "CommandTimeout"
0xBD: "HighFlyWrites"
0xBE: "AirflowTemperatureWDC"
0xBE: "TemperatureDifferencefrom100"
0xBF: "GSenseErrorRate"
0xC0: "PoweroffRetractCount"
0xC1: "LoadCycleCount"
0xC2: "Temperature"
0xC3: "HardwareECCRecovered"
0xC4: "ReallocationEventCount"
0xC5: "CurrentPendingSectorCount"
0xC6: "UncorrectableSectorCount"
0xC7: "UltraDMACRCErrorCount"
0xC8: "MultiZoneErrorRate"
0xC8: "WriteErrorRateFujitsu"
0xC9: "OffTrackSoftReadErrorRate"
0xCA: "DataAddressMarkerrors"
0xCB: "RunOutCancel"
0xCC: "SoftECCCorrection"
0xCD: "ThermalAsperityRateTAR"
0xCE: "FlyingHeight"
0xCF: "SpinHighCurrent"
0xD0: "SpinBuzz"
0xD1: "OfflineSeekPerformance"
0xD3: "VibrationDuringWrite"
0xD4: "ShockDuringWrite"
0xDC: "DiskShift"
0xDD: "GSenseErrorRateAlt"
0xDE: "LoadedHours"
0xDF: "LoadUnloadRetryCount"
0xE0: "LoadFriction"
0xE1: "LoadUnloadCycleCount"
0xE2: "LoadInTime"
0xE3: "TorqueAmplificationCount"
0xE4: "PowerOffRetractCycle"
0xE6: "GMRHeadAmplitude"
0xE7: "DriveTemperature"
0xF0: "HeadFlyingHours"
0xF0: "TransferErrorRateFujitsu"
0xF1: "TotalLBAsWritten"
0xF2: "TotalLBAsRead"
0xFA: "ReadErrorRetryRate"
0xFE: "FreeFallProtection"
)}

Attributes := {}
size := VendorSpecific.MaxIndex()
attributeOffset := 2

loop % size / 12 {
attributeID := VendorSpecific[attributeOffset]
if attributeType := SmartAttributeType[attributeID] {
valueOffset := attributeOffset + 5
attributeValue := VendorSpecific[valueOffset]
(attributeID = 0xC2 || attributeID = 0x3)
|| attributeValue |= VendorSpecific[++valueOffset] << 8
| VendorSpecific[++valueOffset] << 16
| VendorSpecific[++valueOffset] << 24
Attributes[attributeID] := {type: attributeType, value: attributeValue}
attributeOffset += 12
}
}
VendorSpecific := ""
return Attributes
}
Автор: Vitti
Дата сообщения: 17.01.2013 03:07
creature_ws

Цитата:
Посылайте сообщение прокрутки классу SysListView321

Вопрос в том что под курсом определяется левый класс, не SysListView321. Несмотря на то что курсор над списком.

Добавлено:
За скрипт спасибо.
Автор: creature_ws
Дата сообщения: 17.01.2013 07:44
Всё ещё не понимаю в чём проблема

Вот такая вот структура gui у hd tune, тут вам и tab'ы и listview, и какая-то «прозрачная» хрень притаилась в нижней части окна И что? Список перестал прокручиваться при отправке списку сообщений?
Автор: Vitti
Дата сообщения: 18.01.2013 20:34
creature_ws
Сообщение отправляется классу, который находится под курсором. Проблема в том что под курсором оказывается "левый" класс. Как определить что курсор находится над списком(SysListView321)? Напишите процедуру
Автор: creature_ws
Дата сообщения: 19.01.2013 10:29
Ей-богу, выглядит как проблема с логикой. Прокручивать нужно listview, но сообщение будем отправлять в дочернее окно под курсором. Не желаю в подобном участвовать
Автор: Vitti
Дата сообщения: 24.01.2013 03:39
Кто не имеет проблем с логикой, тот может накалякать пару строк. А не писать кучу сообщений с указаниями КАК это сделать
Автор: cyberlife8
Дата сообщения: 24.01.2013 13:20
Можно ли с помощью AHK сделать так чтобы активное окно (выскакивающее на передний план) было подсвечено цветной рамкой, до тех пор пока я не пошлю в него команду ? Всего окон 12, находятся они в строго определённых местах.
Автор: sladsh
Дата сообщения: 16.03.2013 11:21
Подскажите, как сделать чтобы после отпускания одной клавиши кратковременно нажималась другая? Сделал так:

Код: ц::
Send w
KeyWait ц
Send u
return
Автор: OnMyDSeeAtAll
Дата сообщения: 18.03.2013 00:52

Код: $vk57:: ; w/ц
Send, {vk57 Down}
KeyWait,
vk57
Send, {vk57 Up}{vk55} ; u/г (vk55)
Return
Автор: LonerDergunov
Дата сообщения: 18.03.2013 06:10
Насколько критично к быстродействию и функционалу количество команд SetTimer и частота их проверки в скрипте? Есть ли какая-то зависимость или критические пороги, когда таймеры начинают мешать друг другу? Например, если проверка с частотой 10, 20, 100 мс... таймеров 10, 100, 1000 в скрипте...
Зависит ли потребление оперативной памяти или ресурсов процессора скриптом от количества таймеров?
Вопрос относится к случаям, не оговоренным в справке (когда процессор не загружен полностью и выполнение команд не прерывает друг друга напрямую).
Например, нужно отследить появление активного окна с заданным заголовком. Вопрос в том - стоит ли использовать частоту 100 мс или с тем же успехом можно поставить и 10 мс без ущерба всему прочему.
Автор: sladsh
Дата сообщения: 18.03.2013 11:54
OnMyDSeeAtAll, большое спасибо, работает.
Автор: oshizelly
Дата сообщения: 29.03.2013 07:10
Уважаемые гуру и прочие добрые люди! Помогите составить макрос для одной простой операции, ибо попытки самому это сделать показали, что у меня мозги не в ту сторону повёрнуты.

Нужно автоматическое выключение статуса CapsLock через каждые N секунду. Цель, думаю, понятна: если юзер случайно или какая-то прога включила зачем-то включила режим CapsLock, то сразу его выключить снова.

В принципе, хотелось бы выставить в качестве N совсем короткий интервал времени, допустим, 0,001 секунда. Только я не знаю, как это повлияет на нагрузку процессора (компьютер довольно слабый).

Или, возможно, более продвинутый вариант: отслеживание состояния режима CapsLock- И когда AHK обнаружит, что статус CapsLock изменился на On, то выключить его обратно.

Огромное спасибо!
Автор: creature_ws
Дата сообщения: 29.03.2013 07:30

Код: #Persistent
SetCapsLockState AlwaysOff
Автор: oshizelly
Дата сообщения: 29.03.2013 11:42
creature_ws 07:30 29-03-2013
Цитата:
#Persistent
SetCapsLockState AlwaysOff

Ну, надо же как просто всё, если знать! А я-то мучился
Огромное спасибо!

Добавлено:
Я когда-то с этим разбирался, но, кажется, уже успел забыть Как указать AHK, какие именно файлы со скриптами должны автоматически загружаться при запуске проги? Сейчас у меня автоматически подгружается файл AutoHotkey.ahk из системной папки My Documents, но, наверное, и название файла, и его расположение могут быть любыми? И файлов этих, наверное, можно указать несколько?
И ещё, как указать порядок проверки скриптов? Например, если имеется конфликт: в одном AHK-файле нажатию клавиши CapsLock присвоено одно действие, а в другом AHK-файле этой же клавише присвоено другое действие. От чего зависит, какое из них будет выполнено?
Автор: aidomars
Дата сообщения: 29.03.2013 12:55

Цитата:
какие именно файлы со скриптами должны автоматически загружаться

#include

Цитата:
От чего зависит, какое из них будет выполнено?

По моему выполнится только для последнего запущенного скрипта, хотя могу и ошибаться.
Автор: oshizelly
Дата сообщения: 29.03.2013 13:11
aidomars 12:55 29-03-2013
Цитата:
#include

Это - куда?
Автор: creature_ws
Дата сообщения: 29.03.2013 14:36
-
Автор: aidomars
Дата сообщения: 29.03.2013 15:45

Цитата:
Это - куда?

Как куда? В скрипт. Например #Include, help.ahk
Или я что то не так понял?
Автор: oshizelly
Дата сообщения: 29.03.2013 16:16
aidomars 15:45 29-03-2013
Цитата:
Как куда? В скрипт. Например #Include, help.ahk

В тело скрипта, в качестве первой строки?? Или, может, в имя файла со скриптом?
А откуда исполнимый модуль AHK узнает, что этот файл вообще надо проверять на наличие данного ключа?
Допустим, возьму я файл со скриптом, напишу в нём эту строку #Include, а файл запрячу, как Кощееву смерть, где-нибудь в бездонных глубинах структуры локального диска, а то и удалённого сетевого ресурса... AHK не сканирует же все доступные диски и сетевые ресурсы, чтобы это проверить?
То есть, я думаю, что должен же быть где-то в настройках список проверяемых файлов или хотя бы папок.
Автор: LonerDergunov
Дата сообщения: 29.03.2013 16:43
oshizelly

Цитата:
В тело скрипта, в качестве первой строки?

#Include обозначает место, куда перед выполнением скрипта будет вставлено содержимое указанного файла.


Цитата:
а файл запрячу

А в директиве #Include надо указать путь к этому файлу если он не лежит рядом с основным скриптом. Правда насчёт сетевого компьютера не знаю - понимает ли AHK путь к нему, но это уже скорее из области извращений.
Автор: aidomars
Дата сообщения: 29.03.2013 16:58

Цитата:
В тело скрипта, в качестве первой строки?

Вот несколько строк из справки, кстати на русском языке.
Заставляет скрипт вести себя так, как будто содержимое заданного файла находится точно на данной позиции.
Для загрузки функций из внешнего файла можно использовать директиву #Include (даже в начале скрипта).
Автор: oshizelly
Дата сообщения: 29.03.2013 22:33
LonerDergunov
aidomars

Спасибо за разъяснение про директиву #Include, принял к сведению и к использованию.
Но вообще-то спрашивал я не про это. Наверное, мой вопрос настолько примитивный, что умным люди просто в голову не приходит, что о таком кто-то может спрашивать. Но я всё-таки попробую ещё раз.

Вот, допустим, эта директива #Include прописана в файле F:\tralalala\trambam\abc.ahk и ссылается на файл Z:\ugu\aga\999.ahk.

С этим, вторым файлом всё понятно. Но как исполнимый модуль AHK найдёт файл F:\tralalala\trambam\abc.ahk, чтобы оттуда проследовать по директиве #Include к файлу Z:\ugu\aga\999.ahk
Автор: OnMyDSeeAtAll
Дата сообщения: 29.03.2013 22:37
@LonerDergunov

Цитата:
Насколько критично к быстродействию и функционалу количество команд SetTimer и частота их проверки в скрипте?
Думаю, что не в количестве дело, выставте частоту 100-250 и мешать не будут (за всю практику использования ни когда не использовал много таймеров, уж извините, но более точно может ответить кто практиковал...).
@oshizelly
Как-то так:
Код: SetCapsLockState, AlwaysOff
TrayTip,, % "capslock: is disable"

Space::
; клавишу выставите по вкусу
SetCapsLockState, % (isState:=!isState) ? "Off":"AlwaysOff"
TrayTip,,
% "capslock: is "(isState ? "en":"dis")"able"
KeyWait,
% A_ThisHotkey
Return
Автор: LonerDergunov
Дата сообщения: 29.03.2013 22:45
oshizelly
Он не найдёт, это вы указываете что надо запустить именно скрипт abc.ahk.
Как вы запускаете программы, cmd, bat, vbs-файлы?.. Вот и тут точно так же.
Можно в системе создать ассоциацию AutoHotkey.exe на файлы с расширением ahk, можно в Тотале внутреннюю ассоциацию сделать на это расширение - тогда любой ahk-файл будет запускаться по двойному клику на нём (или по одинарному в зависимости от настроек).
Ещё как вариант (без регистрации или запуском через стороннюю программу, например, на панель в Тотале повесить) - путь\AutoHotkey.exe abc.ahk
То есть AutoHotkey.exe, а в качестве параметра - ahk-файл.
Или скомпилировать ahk-файл в отдельный ехе-шник можно (фактически происходит склейка скрипта с исполняемым модулем).

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: как добавить ивритские шрифты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.