Что нового

[Автоматизация] Хоткеи назначаются пользователем.

obeyme

Новичок
Сообщения
71
Репутация
0
В одной игре, от быстроты набора команд (текста) зависит многое. Я решил сделать простенький "флудер", в котором одновременно можно было бы задавать 5 разных команд. Т.е 5 инпутов и на каждый импут свой хоткей. Ну я сделал хоткеи с F1 по F5. Скинул друзьям. Некоторые сидят на ноутбуках. И клавиши F1-12 заняты (громкость, вайфай и т.д.). Можно ли как то добавить функцию в скрипт, что бы пользователь мог сам назначать хоткеи для каждого инпута?
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Мне уже скоро спать, поэтому на скорую руку что то соорудил, под конец не много не закончено, думаю сможете разобраться :smile:
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $key[26]=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
Global $keys[26]
For $i=0 To 25
	$keys[$i]=$key[$i]&"|"
Next
$keys[25]="z"
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Назначение хоткейчиков", 491, 91, 192, 124)
$Group1 = GUICtrlCreateGroup("HotKey#1", 0, 0, 153, 41)
$Combo1 = GUICtrlCreateCombo("", 2, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
	GUICtrlSetData($Combo1,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("HotKey#2", 160, 0, 161, 41)
$Combo2 = GUICtrlCreateCombo("", 168, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
	GUICtrlSetData($Combo2,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("HotKey#3", 328, 0, 161, 41)
$Combo3 = GUICtrlCreateCombo("", 336, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
	GUICtrlSetData($Combo3,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("HotKey#4", 0, 48, 153, 41)
$Combo4 = GUICtrlCreateCombo("", 2, 64, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
	GUICtrlSetData($Combo4,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Hotkey#5", 160, 48, 161, 41)
$Combo5 = GUICtrlCreateCombo("", 168, 64, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
	GUICtrlSetData($Combo5,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Назначить хот кеи", 328, 56, 115, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
 _regfunc(GUICtrlRead($Combo1),GUICtrlRead($Combo2),GUICtrlRead($Combo3),GUICtrlRead($Combo4),GUICtrlRead($Combo5)
	EndSwitch
WEnd
Func _regfunc($1,$2,$3,$4,$5)
	HotKeySet($1,"func1")
	HotKeySet($2,"func2");и т.д.
EndFunc
 
Автор
O

obeyme

Новичок
Сообщения
71
Репутация
0
Либо допишите код, либо объясните мне все :smile:
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Боже мой что вам не понятного то :D
Вот чуть доделал, разве нельзя было по аналогии сделать :whistle:
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $key[26]=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
Global $keys[26]
For $i=0 To 25
    $keys[$i]=$key[$i]&"|"
Next
$keys[25]="z"
#cs
Переменные $key и $keys - содержат набор букв для установки их в Combo
#ce
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Назначение хоткейчиков", 491, 91, 192, 124)
$Group1 = GUICtrlCreateGroup("HotKey#1", 0, 0, 153, 41)
$Combo1 = GUICtrlCreateCombo("", 2, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
    GUICtrlSetData($Combo1,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("HotKey#2", 160, 0, 161, 41)
$Combo2 = GUICtrlCreateCombo("", 168, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
    GUICtrlSetData($Combo2,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("HotKey#3", 328, 0, 161, 41)
$Combo3 = GUICtrlCreateCombo("", 336, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
    GUICtrlSetData($Combo3,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("HotKey#4", 0, 48, 153, 41)
$Combo4 = GUICtrlCreateCombo("", 2, 64, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
    GUICtrlSetData($Combo4,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Hotkey#5", 160, 48, 161, 41)
$Combo5 = GUICtrlCreateCombo("", 168, 64, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
For $c=0 To 25
    GUICtrlSetData($Combo5,$keys[$c])
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Назначить хот кеи", 328, 56, 115, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1;После установки для всех комбов букв нажмите на кнопку
			_regfunc(GUICtrlRead($Combo1),GUICtrlRead($Combo2),GUICtrlRead($Combo3),GUICtrlRead($Combo4),GUICtrlRead($Combo5))
			GUIDelete($Form1)
    EndSwitch
WEnd
#cs
После нажатия на кнопку произойдет считывание с комбов букв, и потом установка этих букв на функции с помощью HotKeySet
Чтобы выйти из программы при помощи клавиши ESC следует раскоментировать строку которая находится ниже этого коментария
#ce
;~ HotKeySet("{ESC}","__ExitProgramm")
Func __ExitProgramm()
	Exit
EndFunc
Func _regfunc($1,$2,$3,$4,$5)
    Switch $1
		Case ""
			;если не выбрано значения то функция не регестрирцется
		Case Else
			HotKeySet($1,"_Function1")
	EndSwitch
	Switch $2
		Case ""
			;если не выбрано значения то функция не регестрирцется
		Case Else
			HotKeySet($2,"_Function2")
	EndSwitch
	Switch $3
		Case ""
			;если не выбрано значения то функция не регестрирцется
		Case Else
			HotKeySet($3,"_Function3")
	EndSwitch
	Switch $4
		Case ""
			;если не выбрано значения то функция не регестрирцется
		Case Else
			HotKeySet($4,"_Function4")
	EndSwitch
	Switch $5
		Case ""
			;если не выбрано значения то функция не регестрирцется
		Case Else
			HotKeySet($5,"_Function5")
	EndSwitch
EndFunc
Func _Function1()
	FileWrite("Hello.txt","Hello")
EndFunc
Func _Function2()

EndFunc
Func _Function3()

EndFunc
Func _Function4()

EndFunc
Func _Function5()

EndFunc
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
obeyme
Ну или так. Ничего сложного.
Коды кнопок для Binds.cfg бери вот тут:
http://www.autoitscript.com/autoit3/docs/libfunctions/_IsPressed.htm


Код:
Global $hAccelerators = _Binds_Load()

;Создание твоего GUI

While 1
    For $acci = 1 To $hAccelerators[0][0] Step 1
        Local $acciR = DllCall('user32.dll', "short", "GetAsyncKeyState", "int", '0x' & $hAccelerators[$acci][0])
        If Not @Error And (BitAND($acciR[0], 0x8000) <> 0) Then
            Call( $hAccelerators[$acci][1] ) ;Функция назначенная на кнопку
            Sleep(150)
        EndIf
    Next

    $hMSG = GUIGetMsg()
    Switch $hMSG
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _Binds_Load()
	Local $Default[1][2] = [[0]]
	Local $Extended = $Default
	Local $sFile = FileRead(@ScriptDir & "\binds.cfg")
	If @Error Then
		MsgBox(16, "Error", "Missing file binds.cfg!")
		Return $Default
	EndIf

	Local $aFile = StringSplit(StringStripCR($sFile),@LF)
	For $index = 1 To $aFile[0] Step 1
		Local $Array = StringRegExp($aFile[$index],'bind\040([^\040]+)\040([^;\040]+);',3)
		If IsArray($Array) And UBound($Array) = 2 Then
			ReDim $Extended[UBound($Extended)+1][2]
			$Extended[UBound($Extended)-1][0] = $Array[0]
			$Extended[UBound($Extended)-1][1] = $Array[1]
			$Extended[0][0] += 1
		EndIf
	Next
	Return $Extended
EndFunc


Binds.cfg
Код:
//bind клавиша команда;
bind 63 _Func1;
bind 62 _Func2;
bind 61 _Func3;
 
Верх