All Keyboard buttons in SA:MP
#15

I agree. But i believe a first try would be very great. I would use it.

Here is my old code of getting the keys (for that you need to hook the window instance of gta-sa(mp)):

Keyboard.h
Код:
#pragma once
namespace Keyboard {
	void WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
	void AddKey(BYTE byteType, BYTE byteKey);
};
Keyboard.cpp
Код:
#include "Keyboard.h"
//... includes like LiteRPC for memory hacking UDP connection of SAMP - instead use ur socket

bool CaptureKey[KEYBOARD_MAX_KEYS] = { 0 };

void Keyboard::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) // call this on WndProc of your GTA-SA(MP) instance
{
	switch (uMsg)
	{
		case WM_KEYUP:
		{
			if (wParam < 0 || wParam > KEYBOARD_MAX_KEYS)
				break;

			BYTE byteKey = static_cast<BYTE>(wParam);

			// get the char of pressed key
			DWORD dwProcessId = GetWindowThreadProcessId(hWnd, NULL);
			HKL dwhkl = GetKeyboardLayout(dwProcessId);
			BYTE vks[KEYBOARD_MAX_KEYS + 1];
			WORD w;
			GetKeyboardState(vks);
			int result = ToAsciiEx((unsigned short int)wParam, HC_ACTION, vks, &w, 0, dwhkl);

			if (CaptureKey[byteKey])
			{
				DEBUG_OUT("SENDING KEY %x with char %c\n", byteKey, (char)w);
				RPCS::Keyboard::SendKey(byteKey, w); // RPC sending key, you could use ur socket
			}

			break;
		}
	}
}

void Keyboard::AddKey(BYTE byteType, BYTE byteKey) // such a register to not spam the key
{
	if (byteKey < 0 || byteKey > KEYBOARD_MAX_KEYS)
		return;

	DEBUG_OUT("ADDING KEY %x\n", byteKey);

	switch (byteType)
	{
	case 0: // register
		CaptureKey[byteKey] = true;
		break;
	case 1: // unregister
		CaptureKey[byteKey] = false;
		break;
	}
}
and my keyids with defines to handle more easier:
Код:
#define KEYBOARD_MAX_KEYS 255                   // Maximal amount of added keys

// VK_[KEYNAME]: Defines of Keynames with hexadecimal of them (0-255)

#define	VK_LBUTTON 					0x01
#define	VK_RBUTTON 					0x02
#define VK_CANCEL  					0x03
#define VK_MBUTTON  				0x04
#define VK_MOUSE_MID  				0x04
#define VK_XBUTTON1 				0x05
#define VK_MOUSE_LEFT 				0x05
#define VK_XBUTTON2 				0x06
#define VK_MOUSE_RIGHT 				0x06
// undefined: 0x07
#define VK_BACK  					0x08
#define VK_TAB  					0x09
// reserved: 0x0A-0B
#define VK_CLEAR  					0x0C
#define VK_RETURN  					0x0D
// undefined: 0x0E-0F
#define VK_SHIFT  					0x10
#define VK_CONTROL 					0x11
#define VK_MENU  					0x12
#define VK_PAUSE  					0x13
#define VK_CAPITAL 					0x14
#define VK_KANA  					0x15
#define VK_HANGUEL 					0x15
#define VK_HANGUL  					0x15
// undefined: 0x16
#define VK_JUNJA  					0x17
#define VK_FINAL  					0x18
#define VK_HANJA  					0x19
#define VK_KANJI  					0x19
// undefined: 0x1A
#define VK_ESCAPE  					0x1B
#define VK_CONVERT  				0x1C
#define VK_NONCONVERT 				0x1D
#define VK_ACCEPT 					0x1E
#define VK_MODECHANGE 				0x1F
#define VK_SPACE  					0x20
#define VK_PRIOR  					0x21
#define VK_NEXT  					0x22
#define VK_END  					0x23
#define VK_HOME  					0x24
#define VK_LEFT  					0x25
#define VK_UP  						0x26
#define VK_RIGHT  					0x27
#define VK_DOWN  					0x28
#define VK_SELECT  					0x29
#define VK_PRINT  					0x2A
#define VK_EXECUTE  				0x2B
#define VK_SNAPSHOT  				0x2C
#define VK_INSERT  					0x2D
#define VK_DELETE  					0x2E
#define VK_HELP  					0x2F
#define VK_0  						0x30
#define VK_1   						0x31
#define VK_2   						0x32
#define VK_3   						0x33
#define VK_4   						0x34
#define VK_5   						0x35
#define VK_6   						0x36
#define VK_7   						0x37
#define VK_8   						0x38
#define VK_9   						0x39
// undefined: 0x3A-40
#define VK_A   						0x41
#define VK_B   						0x42
#define VK_C   						0x43
#define VK_D   						0x44
#define VK_E   						0x45
#define VK_F   						0x46
#define VK_G   						0x47
#define VK_H   						0x48
#define VK_I   						0x49
#define VK_J   						0x4A
#define VK_K   						0x4B
#define VK_L   						0x4C
#define VK_M   						0x4D
#define VK_N   						0x4E
#define VK_O   						0x4F
#define VK_P   						0x50
#define VK_Q   						0x51
#define VK_R   						0x52
#define VK_S   						0x53
#define VK_T   						0x54
#define VK_U   						0x55
#define VK_V   						0x56
#define VK_W   						0x57
#define VK_X   						0x58
#define VK_Y   						0x59
#define VK_Z   						0x5A
#define VK_LWIN   					0x5B
#define VK_RWIN    					0x5C
#define VK_APPS    					0x5D
// reserved: 0x5E
#define VK_SLEEP    				0x5F
#define VK_NUMPAD0 					0x60
#define VK_NUMPAD1  				0x61
#define VK_NUMPAD2  				0x62
#define VK_NUMPAD3 					0x63
#define VK_NUMPAD4 					0x64
#define VK_NUMPAD5 					0x65
#define VK_NUMPAD6 					0x66
#define VK_NUMPAD7 					0x67
#define VK_NUMPAD8 					0x68
#define VK_NUMPAD9 					0x69
#define VK_MULTIPLY 				0x6A
#define VK_ADD 						0x6B
#define VK_SEPERATOR 				0x6C
#define VK_SUBTRACT 				0x6D
#define VK_DECIMAL 					0x6E
#define VK_DIVIDE 					0x6F
#define VK_F1 						0x70
#define VK_F2 						0x71
#define VK_F3 						0x72
#define VK_F4 						0x73
#define VK_F5 						0x74
#define VK_F6 						0x75
#define VK_F7 						0x76
#define VK_F8 						0x77
#define VK_F9 						0x78
#define VK_F10 						0x79
#define VK_F11 						0x7A
#define VK_F12 						0x7B
#define VK_F13 						0x7C
#define VK_F14 						0x7D
#define VK_F15 						0x7E
#define VK_F16 						0x7F
#define VK_F17 						0x80
#define VK_F18 						0x81
#define VK_F19 						0x82
#define VK_F20 						0x83
#define VK_F21 						0x84
#define VK_F22 						0x85
#define VK_F23 						0x86
#define VK_F24 						0x87
// unassigned: 0x88-8F
#define VK_NUMLOCK 					0x90
#define VK_SCROLL 					0x91
// OEM specific: 0x91-96
// unassigned: 0x97-9F
#define VK_LSHIFT 					0xA0
#define VK_RSHIFT 					0xA1
#define VK_LCONTROL 				0xA2
#define VK_RCONTROL 				0xA3
#define VK_LMENU 					0xA4
#define VK_RMENU 					0xA5
#define VK_BROWSER_BACK 			0xA6
#define VK_BROWSER_FORWARD 			0xA7
#define VK_BROWSER_REFRESH 			0xA8
#define VK_BROWSER_STOP 			0xA9
#define VK_BROWSER_SEARCH 			0xAA
#define VK_BROWSER_FAVORITES 		0xAB
#define VK_BROWSER_HOME 			0xAC
#define VK_VOLUME_MUTE 				0xAD
#define VK_VOLUME_DOWN 				0xAE
#define VK_VOLUME_UP 0xAF
#define VK_MEDIA_NEXT_TRACK 		0xB0
#define VK_MEDIA_PREV_TRACK 		0xB1
#define VK_MEDIA_STOP 				0xB2
#define VK_MEDIA_PLAY_PAUSE 		0xB3
#define VK_LAUNCH_MAIL 				0xB4
#define VK_LAUNCH_MEDIA_SELECT 		0xB5
#define VK_LAUNCH_APP1 				0xB6
#define VK_LAUNCH_APP2 				0xB7
// reserved: 0xB8-B9
#define VK_OEM_1 					0xBA
#define VK_OEM_PLUS 				0xBB
#define VK_OEM_COMMA 				0xBC
#define VK_OEM_MINUS 				0xBD
#define VK_OEM_PERIOD 				0xBE
#define VK_OEM_2 					0xBF
#define VK_OEM_3 					0xC0
// reserved: 0xC1-D7
// unassigned: 0xD8-DA
#define VK_OEM_4 					0xDB
#define VK_OEM_5 					0xDC
#define VK_OEM_6 					0xDD
#define VK_OEM_7 					0xDE
#define VK_OEM_8 					0xDF
// reserved: 0xE0
// OEM specific: 0xE1
#define VK_OEM_102 					0xE2
// OEM specific: 0xE3-E4
#define VK_PROCESSKEY 				0xE5
// OEM specific: 0xE6
#define VK_PACKET 					0xE7
// unassigned: 0xE8
// OEM specific: 0xE9-F5
#define VK_ATTN 					0xF6
#define VK_CRSEL 					0xF7
#define VK_EXSEL 					0xF8
#define VK_EREOF 					0xF9
#define VK_PLAY 					0xFA
#define VK_ZOOM 					0xFB
#define VK_NONAME 					0xFC
#define VK_PA1 						0xFD
#define VK_OEM_CLEAR 				0xFE
If you dont know how to inject this file to auto execute on start samp or gta sa, try dll injection or cleo. I would recommend dll injection like input.dll (DirectX Hook / Injection).
Reply


Messages In This Thread
All Keyboard buttons in SA:MP - by KrYpToDeN - 13.01.2018, 11:56
Re: All Keyboard buttons in SA:MP - by Alf21 - 13.01.2018, 12:00
Re: All Keyboard buttons in SA:MP - by KrYpToDeN - 13.01.2018, 12:02
Re: All Keyboard buttons in SA:MP - by Alf21 - 13.01.2018, 12:09
Re: All Keyboard buttons in SA:MP - by KrYpToDeN - 13.01.2018, 12:19
Re: All Keyboard buttons in SA:MP - by KrYpToDeN - 13.01.2018, 12:23
Re: All Keyboard buttons in SA:MP - by Alf21 - 13.01.2018, 12:33
Re: All Keyboard buttons in SA:MP - by KrYpToDeN - 13.01.2018, 12:37
Re: All Keyboard buttons in SA:MP - by KrYpToDeN - 13.01.2018, 12:39
Re: All Keyboard buttons in SA:MP - by KrYpToDeN - 13.01.2018, 12:46
Re: All Keyboard buttons in SA:MP - by KrYpToDeN - 13.01.2018, 12:48
Re: All Keyboard buttons in SA:MP - by Kaperstone - 13.01.2018, 12:55
Re: All Keyboard buttons in SA:MP - by VeryTallMidget - 13.01.2018, 13:06
Re: All Keyboard buttons in SA:MP - by VeryTallMidget - 13.01.2018, 13:12
Re: All Keyboard buttons in SA:MP - by Alf21 - 13.01.2018, 13:51

Forum Jump:


Users browsing this thread: 1 Guest(s)