summaryrefslogtreecommitdiff
path: root/src/KeySend.cpp
blob: cfd7f3c044ac6c62ab550d36c8460392b83e2340 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <windows.h>
#include <winuser.h>
#include <stdio.h>

#include "KeySend.h"

CKeySend::CKeySend()
{
}

CKeySend::~CKeySend()
{
}


void CKeySend::SendKeyDown(unsigned char bVk)
{
	BYTE  bScan = LOBYTE(::MapVirtualKey(bVk, 0));
	DWORD dwFlags = (IsVkExtended(bVk) ? KEYEVENTF_EXTENDEDKEY : 0 );
	KeyboardEvent(bVk,bScan,dwFlags);
}

void CKeySend::SendKeyUp(unsigned char bVk)
{
	BYTE  bScan = LOBYTE(::MapVirtualKey(bVk, 0));
	DWORD dwFlags = (IsVkExtended(bVk) ? KEYEVENTF_EXTENDEDKEY : 0 ) | KEYEVENTF_KEYUP;
	KeyboardEvent(bVk,bScan,dwFlags);
}

void CKeySend::KeyboardEvent(unsigned char bVk, unsigned char bScan, unsigned long dwFlags)
{
   ::keybd_event(bVk, bScan, dwFlags, 0);
}

bool CKeySend::IsVkExtended(unsigned char bVk)
{
	bool bExtended = false;
	if( (bVk ==     VK_UP		) ||
	    (bVk ==     VK_DOWN		) ||
	    (bVk ==     VK_LEFT		) ||
	    (bVk ==     VK_RIGHT	) ||
	    (bVk ==     VK_HOME		) ||
	    (bVk ==     VK_END		) ||
	    (bVk ==     VK_PRIOR	) ||
	    (bVk ==     VK_NEXT		) ||
	    (bVk ==     VK_INSERT	) ||
	    (bVk ==     VK_DELETE	) ||
	    (bVk ==     VK_UP		) )
	{
		bExtended = true;
	}
	return bExtended;

}

int CKeySend::MapDfbKeyEventToVK(unsigned short symbol)
{
	switch(symbol)
	{
		case 0xF000 : return VK_LEFT;
		case 0xF001 : return VK_RIGHT;
		case 0xF002 : return VK_UP;
		case 0xF003 : return VK_DOWN;
		case 0xF00b : return VK_RETURN;

		case 0xF046 : return VK_PRIOR;	//p+
		case 0xF047 : return VK_NEXT;	//p-

		case 0xF050 : return -1;		// play
		case 0xF05A : return -1;		// FF
		case 0xF059 : return -1;		// rew
		case 0xF052 : return -1;		// stop
		case 0xF056 : return -1;		// REC

		case 0xF05B : return VK_BACK;	// back key

		case 0xF042 : return -1;	// Red
		case 0xF043 : return -1;	// Green
		case 0xF045 : return -1;	// Blue

		case 0xF011 : return -1;	// options
		case 0xF032 : return -1;	// teletext
		case 0xF014 : return -1;	// info

		case 0x0030 : return 0x30;	// 0-9
		case 0x0031 : return 0x31;	// 0-9
		case 0x0032 : return 0x32;	// 0-9
		case 0x0033 : return 0x33;	// 0-9
		case 0x0034 : return 0x34;	// 0-9
		case 0x0035 : return 0x35;	// 0-9
		case 0x0036 : return 0x36;	// 0-9
		case 0x0037 : return 0x37;	// 0-9
		case 0x0038 : return 0x38;	// 0-9
		case 0x0039 : return 0x39;	// 0-9
		default:
			return -1;
	}
	return -1;
}