You are not logged in.

  • Login

1

Saturday, June 19th 2010, 9:21pm

Keybinder - GetKeyState und keydb_event

Hallo,

ich bin dabei einen keybinder zu programmieren. mein code zum auslesen der gedrückten und zum simulieren der tasten ist folgender:
Code:

Source code

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
100
101
102
103
104
105
106
107
108
109
110
111
//*****************************************************************************
//*
//*		keystate
//*
//*****************************************************************************
DWORD WINAPI keystate(void *param)
{
string		txtx;
int			iLenght;
char	   *text;
string		fenster;
HWND		hwnd;
TCHAR		szWindowText[100];

	while(true)
		{
		Sleep(5);
		CheckKeyState();
		for(int i=0;i<28;i++)
			{
			if(GetAsyncKeyState(keyx[i])&1 ==1)
				{
				iLenght = GetWindowTextLength(txt[i])+1;
				text	= new char[iLenght+1];
				GetWindowText(txt[i],text ,iLenght);
				txtx	= text;
				hwnd	= GetForegroundWindow();
				GetWindowText(hwnd, szWindowText, 100);
				fenster=szWindowText;
				if(fenster=="Unbenannt - Editor")
				if(txtx!="")
					{

					sim(txtx);
					}
				}
			}
		}
}

//*****************************************************************************
//*
//*		sim
//*
//*****************************************************************************
int sim(string Text)
{

			int			i;
int			o;
int			Scancode;

			char		Achtung[]={"!\"§$%&/()=?*'_:;>°ÄÜÖ"};

	for(o=0;o<strlen(Text.c_str());o++)
		{
		fertig		=  0;
		Scancode	= (int)Text[o];
		if(Scancode==126)
			{
			keybd_event(VK_RETURN,0,              0,0); 		//Tastendruck
			keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
			fertig=1;
			}

		for(i=0;i<strlen(Achtung);i++)
			{
			if(Text[o]==Achtung[i])
				{
				keybd_event(16,0,0,0);							//Shifttaste wird gedrückt
				keybd_event(VkKeyScan(Text[o]),0,0,0);			//Tastendruck
				keybd_event(VkKeyScan(Text[o]),0,KEYEVENTF_KEYUP,0);
				keybd_event(16,0,KEYEVENTF_KEYUP,0);			//Shifttaste wird losgelassen
				fertig=1;
				}
			}

		for(i=0;i<strlen(Achtung2);i++)
			{
			if(Text[o]==Achtung2[i])
				{
				keybd_event(     17,0,0,0); 					//Strg-Taste
				keybd_event(VK_MENU,0,0,0); 					//Alt-Taste
				keybd_event(VkKeyScan(Text[o]),0,0,0);			//Tastendruck
				keybd_event(VkKeyScan(Text[o]),0,KEYEVENTF_KEYUP,0);
				keybd_event(     17,0,KEYEVENTF_KEYUP,0);
				keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
				fertig=1;
				}
			}

		if(Scancode>64 && Scancode<91)
			{
			keybd_event(16,0,0,0);
			keybd_event(VkKeyScan(Text[o]),0,0,0);
			keybd_event(VkKeyScan(Text[o]),0,KEYEVENTF_KEYUP,0);
			keybd_event(16,0,KEYEVENTF_KEYUP,0);
			fertig=1;
			}

		if(fertig==0)
			{
			keybd_event(VkKeyScan(Text[o]),0,0,0);
			keybd_event(VkKeyScan(Text[o]),0,KEYEVENTF_KEYUP,0);
			}
		}

	Sleep(1000);

return 0;
}

Das problem ist, das die keystate funktion auch die duch die sim funktion simulierten tasten ausliest obwohl die beiden funktionen ja nicht paralel laufen. wie kriege ich das hin das er die ignoriert?



danke im vorraus


MfG metoin

2

Tuesday, June 22nd 2010, 8:57pm

keiner ne idee????????

Similar threads

Social bookmarks