1 (изменено: Logonius, 2022-08-14 03:34:56)

Тема: AHK: HotKey как сохранить сочетание клавиш

Добрый день.
Написал код, скину командой с одной кнопкой.


Del

Как я написал и как я понял, что я написал. При запуске и при нажатии Ctrl+Home появляется GUI окно куда я ввожу сочетание клавиш, при нажатии ОК, оно сохраняется в ini файл сочетание клавиш, в начале кода написал чтоб он считывал с ini файла сочетание.

Внизу кода есть метка "Activate", так вот, если назначить клавишу и воспроизвести ее тут же, то все работает, если перезапустить программу, то сочетание уже не работает, если нажать Ctrl+Home, то видно, что сочетание прочитано и добавлена, но метка Activate не работает.

Цель, чтоб при сочетании клавиш CTRL+Home(или любые другие), выпало окно, я назначил клавиши, они сохранились, и при следующем запуске утилиты, без всяких окно и т.д. утилита начала работать с сохранёнными клавишами в метке "Activate" "Activate2" и т.д.

Я подозреваю что я не туда добавил считывание ini файла, но я так и не понял куда его сунуть.

2 (изменено: Logonius, 2022-08-14 03:35:35)

Re: AHK: HotKey как сохранить сочетание клавиш

Добавил в начало кода


IniRead, Key, %Patch%, Main, Key1
GuiControl,, key, %key%
gosub OK

И все заработало, на сколько правильно я сделал?
Если можно более правильный результат.
Полный код..


Del

И подскажите как убрать ошибку, которая возникает после повторного нажатия сочетания чтоб появилось GUI окно.
https://i.imgur.com/EphdHA1.png

3 (изменено: ypppu, 2022-08-13 14:48:47)

Re: AHK: HotKey как сохранить сочетание клавиш

У Вас окно создаётся при каждом нажатии на горячую клавишу. В каждом новом окне будут элементы управления, проассоциированные с одной и той же переменной. Естественно скрипт ругнётся "одна и та же переменная не может быть использована более чем в одном элементе управления". Неправильно каждый раз создавать новое окно. Его нужно сделать заранее, а при нажатии горячей клавиши его следует показывать, либо делать видимым, но не создавать.

4 (изменено: Logonius, 2022-08-13 16:26:32)

Re: AHK: HotKey как сохранить сочетание клавиш

Спасибо, точно.
А в остальном как код на сохранение?, правильный, или можно правильней сделать?

И подскажите, почему не могу назначить клавишу Win?

5

Re: AHK: HotKey как сохранить сочетание клавиш

Win не поддерживается в Hotkey, как и ещё много кнопок. Если речь про него, вы зачем то удалили код.
Когда то делал такое http://forum.script-coding.com/viewtopi … 76#p137176.
На его основе можно добавить Win.


#NoEnv
#SingleInstance Force  
#KeyHistory 0
ListLines Off
SetBatchLines -1 
#UseHook

Global Data := {}, hGui
Gui, +HwndhGui
Gui, Font, s12, Comic Sans MS

Gui, Add, Text, Center gText Border vTextHotkey1 w300
Gui, Add, Text, Center gText Border vTextHotkey2 wp  

Gui, Show
Gui, Add, Hotkey, vHotkey1 Hidden gHotkey w0 h0
Gui, Add, Hotkey, vHotkey2 Hidden gHotkey wp hp
Return
 

#IF WinActive("ahk_id" hGui) && HotkeyFocus(name)
*LWin::
*RWin:: 
	Hotkey(name, 1)  
	KeyWait, LWin 
	KeyWait, RWin  
	Return

*LWin Up::
*RWin Up:: Hotkey(name, 0)  
#IF

HotkeyFocus(byref name) {
	GuiControlGet, name, FocusV
	If (name ~= "^Hotkey\d+$")
		Return 1
}  

Text() {
	GuiControl, Focus, % SubStr(A_GuiControl, 5) 
}
	
Hotkey(p1, p2 = "") {  
	If (p1 + 0 = "")
	{
		Control := p1 
		If p2
			(str .= "Win + "), win := 1
	}	
	Else 
		Control := A_GuiControl
	HK := %Control%
	If !win && (GetKeyState("LWin", "P") || GetKeyState("RWin", "P"))
		win := 1, HK := "#" HK 
	Instr(HK, "#") && (str .= "Win + ")
	Instr(HK, "^") && (str .= "Ctrl + ")
	Instr(HK, "+") && (str .= "Shift + ")
	Instr(HK, "!") && (str .= "Alt + ")
	RegExMatch(HK, "S)([\^\+!#]*)(.*?$)", K)  
	If (!p2 && K2 != "")
		Return
	text := str Format("{:U}", K2)
	GuiControl, , Text%Control%, % text
	If !Data[Control]
		Data[Control] := {}
	Data[Control].TXT := text
	If (GetKeyVK(K2) = "0")
		Data[Control].HK := ""
	Else 
		Data[Control].HK := K1 . Format("vk{:X}", GetKeyVK(K2))
	GuiControl, Focus, % Control
	; ToolTip % Data[Control].HK  
}
 

GuiClose() {
    ExitApp
} 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui