Что нового

Noob need Help!Как привязать счетчики к определенным клавишам на клавиатуре??

DrummerA

Новичок
Сообщения
2
Репутация
0
Ребят помогите пожалуйста нубу :-\,на форуме наткнулся на уже готовый скрипт для счетчика нажатий на кнопки мыши и клавиатуры,вот ссылка на него собсна "http://autoit-script.ru/index.php?topic=10063.0". Но проблема в том ,что я не знаю как присвоить отдельной клавише свой счетчик.Подскажите плиз,или ссыль на почитать по этому вопросу?

Ибо я совсем зеленый и не понимаю как это сделать :'(
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Вот что получилось, только зажимать не рекомендуется. Счетчик считает нажатия клавиш от A до Z.
Код:
#include'Misc.au3'
#include'GUIFFLabel.au3'

HotKeySet('{ESC}','_Exit')
$hDll = DllOpen('user32.dll')

#Region Gui
$Gui = GUICreate('',200,200)
$Label_A = _GUICtrlFFLabel_Create($Gui,'A= ',10,10,50,15)
$Label_B = _GUICtrlFFLabel_Create($Gui,'B= ',10,25,50,15)
$Label_C = _GUICtrlFFLabel_Create($Gui,'C= ',10,40,50,15)
$Label_D = _GUICtrlFFLabel_Create($Gui,'D= ',10,55,50,15)
$Label_E = _GUICtrlFFLabel_Create($Gui,'E= ',10,70,50,15)
$Label_F = _GUICtrlFFLabel_Create($Gui,'F= ',10,85,50,15)
$Label_G = _GUICtrlFFLabel_Create($Gui,'G= ',10,100,50,15)
$Label_H = _GUICtrlFFLabel_Create($Gui,'H= ',10,115,50,15)

$Label_I = _GUICtrlFFLabel_Create($Gui,'I= ',70,10,50,15)
$Label_J = _GUICtrlFFLabel_Create($Gui,'J= ',70,25,50,15)
$Label_K = _GUICtrlFFLabel_Create($Gui,'K= ',70,40,50,15)
$Label_L = _GUICtrlFFLabel_Create($Gui,'L= ',70,55,50,15)
$Label_M = _GUICtrlFFLabel_Create($Gui,'M= ',70,70,50,15)
$Label_N = _GUICtrlFFLabel_Create($Gui,'N= ',70,85,50,15)
$Label_O = _GUICtrlFFLabel_Create($Gui,'O= ',70,100,50,15)
$Label_P = _GUICtrlFFLabel_Create($Gui,'P= ',70,115,50,15)

$Label_Q = _GUICtrlFFLabel_Create($Gui,'Q= ',130,10,50,15)
$Label_R = _GUICtrlFFLabel_Create($Gui,'R= ',130,25,50,15)
$Label_S = _GUICtrlFFLabel_Create($Gui,'S= ',130,40,50,15)
$Label_T = _GUICtrlFFLabel_Create($Gui,'T= ',130,55,50,15)
$Label_U = _GUICtrlFFLabel_Create($Gui,'U= ',130,70,50,15)
$Label_V = _GUICtrlFFLabel_Create($Gui,'V= ',130,85,50,15)
$Label_W = _GUICtrlFFLabel_Create($Gui,'W= ',130,100,50,15)
$Label_X = _GUICtrlFFLabel_Create($Gui,'X= ',130,115,50,15)
$Label_Y = _GUICtrlFFLabel_Create($Gui,'Y= ',130,130,50,15)
$Label_Z = _GUICtrlFFLabel_Create($Gui,'Z= ',130,145,50,15)
GUISetState(@SW_SHOW,$Gui)
#EndRegion

$Count_A=0
$Count_B=0
$Count_C=0
$Count_D=0
$Count_E=0
$Count_F=0
$Count_G=0
$Count_H=0
$Count_I=0
$Count_J=0
$Count_K=0
$Count_L=0
$Count_M=0
$Count_N=0
$Count_O=0
$Count_P=0
$Count_Q=0
$Count_R=0
$Count_S=0
$Count_T=0
$Count_U=0
$Count_V=0
$Count_W=0
$Count_X=0
$Count_Y=0
$Count_Z=0

While 1
	Check_Keys_A_Z()
	Show_Keys_A_Z()
	Sleep(50)
WEnd

Func Check_Keys_A_Z()
	If _IsPressed('41',$hDll) Then $Count_A += 1
	If _IsPressed('42',$hDll) Then $Count_B += 1
	If _IsPressed('43',$hDll) Then $Count_C += 1
	If _IsPressed('44',$hDll) Then $Count_D += 1
	If _IsPressed('45',$hDll) Then $Count_E += 1
	If _IsPressed('46',$hDll) Then $Count_F += 1
	If _IsPressed('47',$hDll) Then $Count_G += 1
	If _IsPressed('48',$hDll) Then $Count_H += 1
	If _IsPressed('49',$hDll) Then $Count_I += 1
	If _IsPressed('4A',$hDll) Then $Count_J += 1
	If _IsPressed('4B',$hDll) Then $Count_K += 1
	If _IsPressed('4C',$hDll) Then $Count_L += 1
	If _IsPressed('4D',$hDll) Then $Count_M += 1
	If _IsPressed('4E',$hDll) Then $Count_N += 1
	If _IsPressed('4F',$hDll) Then $Count_O += 1
	If _IsPressed('50',$hDll) Then $Count_P += 1
	If _IsPressed('51',$hDll) Then $Count_Q += 1
	If _IsPressed('52',$hDll) Then $Count_R += 1
	If _IsPressed('53',$hDll) Then $Count_S += 1
	If _IsPressed('54',$hDll) Then $Count_T += 1
	If _IsPressed('55',$hDll) Then $Count_U += 1
	If _IsPressed('56',$hDll) Then $Count_V += 1
	If _IsPressed('57',$hDll) Then $Count_W += 1
	If _IsPressed('58',$hDll) Then $Count_X += 1
	If _IsPressed('59',$hDll) Then $Count_Y += 1
	If _IsPressed('5A',$hDll) Then $Count_Z += 1
EndFunc

Func Show_Keys_A_Z()
	_GUICtrlFFLabel_SetData($Label_A, "A: " & $Count_A)
	_GUICtrlFFLabel_SetData($Label_B, "B: " & $Count_B)
	_GUICtrlFFLabel_SetData($Label_C, "C: " & $Count_C)
	_GUICtrlFFLabel_SetData($Label_D, "D: " & $Count_D)
	_GUICtrlFFLabel_SetData($Label_E, "E: " & $Count_E)
	_GUICtrlFFLabel_SetData($Label_F, "F: " & $Count_F)
	_GUICtrlFFLabel_SetData($Label_G, "G: " & $Count_G)
	_GUICtrlFFLabel_SetData($Label_H, "H: " & $Count_H)
	_GUICtrlFFLabel_SetData($Label_I, "I: " & $Count_I)
	_GUICtrlFFLabel_SetData($Label_J, "J: " & $Count_J)
	_GUICtrlFFLabel_SetData($Label_K, "K: " & $Count_K)
	_GUICtrlFFLabel_SetData($Label_L, "L: " & $Count_L)
	_GUICtrlFFLabel_SetData($Label_M, "M: " & $Count_M)
	_GUICtrlFFLabel_SetData($Label_N, "N: " & $Count_N)
	_GUICtrlFFLabel_SetData($Label_O, "O: " & $Count_O)
	_GUICtrlFFLabel_SetData($Label_P, "P: " & $Count_P)
	_GUICtrlFFLabel_SetData($Label_Q, "Q: " & $Count_Q)
	_GUICtrlFFLabel_SetData($Label_R, "R: " & $Count_R)
	_GUICtrlFFLabel_SetData($Label_S, "S: " & $Count_S)
	_GUICtrlFFLabel_SetData($Label_T, "T: " & $Count_T)
	_GUICtrlFFLabel_SetData($Label_U, "U: " & $Count_U)
	_GUICtrlFFLabel_SetData($Label_V, "V: " & $Count_V)
	_GUICtrlFFLabel_SetData($Label_W, "W: " & $Count_W)
	_GUICtrlFFLabel_SetData($Label_X, "X: " & $Count_X)
	_GUICtrlFFLabel_SetData($Label_Y, "Y: " & $Count_Y)
	_GUICtrlFFLabel_SetData($Label_Z, "Z: " & $Count_Z)
EndFunc

Func _Exit()
	DllClose($hDll)
	Exit
EndFunc



Добавлено:
Сообщение автоматически объединено:

Еще можно вот так:
Код:
#include'GUIFFLabel.au3'

HotKeySet('{ESC}','_Exit')
HotKeySet('{a}','_A_Button')
HotKeySet('{b}','_B_Button')
HotKeySet('{c}','_C_Button')
HotKeySet('{d}','_D_Button')

#Region Gui
$Gui = GUICreate('',200,200)
$Label_A = _GUICtrlFFLabel_Create($Gui,'A= ',10,10,50,15)
$Label_B = _GUICtrlFFLabel_Create($Gui,'B= ',10,25,50,15)
$Label_C = _GUICtrlFFLabel_Create($Gui,'C= ',10,40,50,15)
$Label_D = _GUICtrlFFLabel_Create($Gui,'D= ',10,55,50,15)
GUISetState(@SW_SHOW,$Gui)
#EndRegion

$Count_A=0
$Count_B=0
$Count_C=0
$Count_D=0

While 1
	Show_Keys_A_Z()
	Sleep(100)
WEnd

Func Show_Keys_A_Z()
	_GUICtrlFFLabel_SetData($Label_A, "A: " & $Count_A)
	_GUICtrlFFLabel_SetData($Label_B, "B: " & $Count_B)
	_GUICtrlFFLabel_SetData($Label_C, "C: " & $Count_C)
	_GUICtrlFFLabel_SetData($Label_D, "D: " & $Count_D)
EndFunc

Func _A_Button()
	ControlSend('','','','{a}')
	$Count_A +=1
EndFunc

Func _B_Button()
	ControlSend('','','','{b}')
	$Count_B +=1
EndFunc

Func _C_Button()
	ControlSend('','','','{c}')
	$Count_C +=1
EndFunc

Func _D_Button()
	ControlSend('','','','{d}')
	$Count_D +=1
EndFunc

Однако когда я пытался нажать на А в GUI то не срабатывало и после переключения на редактор появлялись те А которые нажал и счетчик показывал немыслимое число...
 

Вложения

  • GUIFFLabel.au3
    20.9 КБ · Просмотры: 1

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
Global $hGui, $hDll = DllOpen( "user32.dll" ), _
	$Idx, $aMain[ 27 ][ 5 ] = [[ 26 ], [ 65, 0x41 ]] ;Клавиша A

For $Idx = 2 To $aMain[0][0] Step 1 ;Заполняем клавиши B-Z автоматически
	$aMain[$Idx][0] = $aMain[1][0] + ( $Idx - 1 )
	$aMain[$Idx][1] = $aMain[1][1] + ( $Idx - 1 )
Next
; ---
$hGui = GUICreate( "Counters - Example", 200, 500 )

For $Idx = 1 To $aMain[0][0] Step 1 ;Создаем элементы для отображения счетчиков
	$aMain[$Idx][2] = GUICtrlCreateLabel( Chr( $aMain[$Idx][0] ) & "=0", 5, 5 + ( ( $Idx - 1 ) * 18 ), 190, 18 )
Next
GUISetState( @SW_SHOW )

Do
	For $Idx = 1 To $aMain[0][0] Step 1 ;Мониторим нажатия клавиш
		If __IsPressed($aMain[$Idx][1]) Then
			If Not $aMain[$Idx][3] Then
				$aMain[$Idx][3] = True
				; *
				$aMain[$Idx][4] += 1
				GUICtrlSetData( $aMain[$Idx][2], Chr( $aMain[$Idx][0] ) & "=" & $aMain[$Idx][4] )
			EndIf
		ElseIf $aMain[$Idx][3] Then
			$aMain[$Idx][3] = False
		EndIf
	Next
Until GUIGetMsg() = -3
DllClose( $hDll )

Func __IsPressed($iKey)
	Local $aRet = DllCall($hDll, "short", "GetAsyncKeyState", "int", $iKey)
	If @error Then Return SetError(@error, @extended, False)
	Return BitAND($aRet[0], 0x8000) <> 0
EndFunc   ;==>_IsPressed


Вместо автоматического заполнения можете сами настроить массив необходимых клавиш.
1) Chr-код символа ( буквы ).
2) Hex-код клавиши.

Регистрируются именно одиночные нажатия ( зажатие не будет гнать счетчик ).
 
Автор
D

DrummerA

Новичок
Сообщения
2
Репутация
0
спасибо вам ребят,очень помогли :ok: :IL_AutoIt_1:
 
Верх