1 (изменено: freeZer0K, 2017-11-10 06:16:29)

Тема: AHK: Вход в цикл по нажатии заданной в ini клавиши

Добрый день!

Делаю скрипт, который записывает в ini vk-коды нужных клавиш, а затем их считывает и при нажатии на любую из заданных клавиш выполняет что-то.
Чтобы было наглядно и понятно, опубликую весь скрипт - он небольшой:


Items := 3
Global PathIni := A_ScriptDir "\HoldKeys.ini"
/*
Loop
	{
	Input var, L1, {vkA0}
	GoSub start
	}
return
*/
start:
Loop % Items {
	IniRead HoldKey%A_Index%, % PathIni, HoldKeys, % "HoldKey" A_Index, % A_Space
	Loop parse, HoldKey%A_Index%, `n
		{
		If (A_LoopField = GetAnyKeyVK()) {
			GoSub make
			Return
			}
		}
	}
	
F1::
Loop % Items {
	Gui Add, Hotkey, % "vHoldKey" A_Index " gWriteIni", % HoldKey%A_Index%
	}
	
Gui Add, Edit, Center ReadOnly vVK wp
Gui Show
Return


make:
MsgBox % "Это ж бубль гум! " GetAnyKeyVK()
GoSub start


Escape::
GuiClose() {
	Gui Destroy
}

WriteIni() {
	IniWrite % GetAnyKeyVK(), % PathIni, HoldKeys, % A_GuiControl
	GuiControl,, VK, % GetAnyKeyVK()
}

GetAnyKeyVK() {
	Loop 256
	If GetKeyState(Format("vk{:X}", A_Index-1), "P") {
		Pkey := GetKeyVK(Format("vk{:X}", A_Index-1))
		Return Format("vk{:X}", Pkey)
		}
Return 0
}

Вопрос:
Чем заменить этот кусок кода (планировался как стартер, но он блокирует нажатие других клавиш):

Loop
	{
	Input var, L1, {vkA0}
	GoSub start
	}
return

чтобы запустить цикл ниже.

Нужно, чтобы скрипт постоянно мониторил нажатия заданных в ini клавиш (желательно без SetTimer) и входил в цикл start, ну или что-то подобное.
В крайнем случае можно стартовать и с любой нажатой клавиши (не с какой-то одной, а именно "Press any key").

Буду признателен за любую помощь!

2

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

Лучше подробнее объясните что в итоге требуется, на примере неправильного кода, ничего непонятно.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

3

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

serzh82saratov, благодарю за ответ!
В общем-то, если кратко, хотел сделать считывание и сохранение vk кодов каких-либо клавиш в ini с помощью Gui, повесить на эти клавиши какие-то дополнительные функции (в этом-же скрипте),  а затем этот скрипт должен считывать эти коды и выполнять действия по нажатии клавиш из ini.

Но, похоже, я уже нашел решение и почти написал скрипт. Выше были только наброски - черновик.
Может если только уже есть готовые варианты с подобным функционалом?

4

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

Есть только наброски http://forum.script-coding.com/viewtopi … 89#p102089 и http://forum.script-coding.com/viewtopic.php?id=8343.

freeZer0K пишет:

а затем этот скрипт должен считывать эти коды и выполнять действия

Непонятно только когда это затем наступает.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

5 (изменено: freeZer0K, 2017-11-12 17:27:07)

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

Еще короче - считать коды, записать их, повесить доп. действия, выполнять по-нажатии этих клавиш ...
Все в одно и все сразу

Первый линк я уже видел - он только коды считывает.

... Кстати, у меня клава Logitech с клавишей "\" после LShift - тот код неправильно считывается из поста первого линка.

Выдает vkDC а на самом деле vkE2

6

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

freeZer0K пишет:

Еще короче - считать коды, записать их, повесить доп. действия, выполнять по-нажатии этих клавиш ...

Когда считываем нажатия уже установленные действия надо воспроизводить? Как поступить если для одного действия введена клавиша которая уже назначена для другого? Почему нужны именно vk коды для всех клавиш? Нужны одиночные клавиши, или в комбинации с другими тоже?

freeZer0K пишет:

Еще короче

Вообщем ещё короче не надо.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

7 (изменено: freeZer0K, 2017-11-12 18:30:35)

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

serzh82saratov пишет:

Когда считываем нажатия уже установленные действия надо воспроизводить?

Не надо. Я это решил нажатием клавиши F1:: и If !WinExist("ahk_id" guiHDK) { , которая гасит все дополнительные фукции, вызывает Gui и работает только на сканирование vk кодов. Но можно и показывать Gui сразу при запуске скрипта, в Gui Add, Hotkey отображаются все назначенные клавиши, при закрытии Gui - Gui Destroy или Hide, скрипт продолжает работу уже на считывание кодов из ini и выполнение действий.

Как поступить если для одного действия введена клавиша которая уже назначена для другого?

Переназначение

Почему нужны именно vk коды для всех клавиш?

Да я сам не знаю, что лучше. Может sc более универсальные? Без разницы, что лучше.

Нужны одиночные клавиши, или в комбинации с другими тоже?

Много функционала никогда не бывает!

8

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

Могу предложить что по второй ссылке. Там и с повтором решено и с кодами.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

9 (изменено: freeZer0K, 2017-11-12 18:52:46)

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

Я уже взял за основу код teadrinker'а здесь:

http://forum.script-coding.com/viewtopi … 804#p52804

Хороший код и правильно считывает все коды. Переделывать не хочется.
Еще немного, и допишу. Потом процесс допиливания начнется ..

Идею по написанию такого скрипта могу подарить, я не жадный.
Думаю, многим пригодится, особенно игроманам.

10 (изменено: serzh82saratov, 2017-11-12 21:52:16)

Re: AHK: Вход в цикл по нажатии заданной в ini клавиши

Давно надо было добавить такой пример, можете попробовать (в конце пример про назначение хоткеев), заодно расскажете какая клавиша не так определяется, а то я не понял, вы про первую ссылку писали что что то с вк кодами не так, а по той ссылке только скан коды определяются.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).