C++ - GetAsyncKeyState() Funktion funktioniert nicht ?! HIlfe !


#1
Hallo liebe Leute, ich habe ein Programm geschrieben dass Tastatureingaben auswerten soll.

Ich habe folgende Header-Dateien und Lib's eingebunden:

Code:
#include <windows.h>
#include <winuser.h>


#pragma(lib,"User32.lib")
Mein Code sieht so aus:

Code:
if(GetAsyncKeyState('A') == -32767) {

MessageBox::Show("A wurde gedrückt","Erfolg");
}
und meine Fehlermeldung so:

Code:
1>Test.obj : error LNK2028: Nicht aufgelöstes Token (0A000010) ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z)", auf das in Funktion ""private: void __clrcall KEYLOGGA::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@KEYLOGGA@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)" verwiesen wird.
1>Test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z)" in Funktion ""private: void __clrcall KEYLOGGA::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@KEYLOGGA@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)".
1>C:\Dokumente und Einstellungen\****\Eigene Dateien\C++ Projekte\Test\Debug\Test.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
Könnt ihr mir helfen? :-(
 

Marschal

Großer Enumerator
#2
Probiere mal anstelle von "A" den ASCII Code einzusetzen, also
C++:
GetAsyncKeyState(0x41)
abgesehen davon, kannst du GetAsyncKeyState nicht auf eine Zahl überprüfen (=-Operator). GetAsyncKeyState gibt ein SHORT zurück.

Verwende die Funktion mal wie folgt:
C++:
if(GetAsyncKeyState(0x41))
{
printf("Taste A gedrückt");
}
MfG Marschal
 
Zuletzt bearbeitet von einem Moderator:
#3
Probiere mal anstelle von "A" den ASCII Code einzusetzen, also
C++:
GetAsyncKeyState(0x41)
abgesehen davon, kannst du GetAsyncKeyState nicht auf eine Zahl überprüfen (=-Operator). GetAsyncKeyState gibt ein SHORT zurück.

Verwende die Funktion mal wie folgt:
C++:
if(GetAsyncKeyState(0x41))
{
printf("Taste A gedrückt");
}
MfG Marschal

Gleiches Problem..
Selbe Fehlermeldung..
Code:

Code:
	private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
			
if(GetAsyncKeyState(0x41))
{
	MessageBox::Show("A gedrückt");
}

			 }
Ich habe das aber nur zum Test in Form-Load gemacht, normal verwende ich es in einem Timer..

HILFE
 
Zuletzt bearbeitet von einem Moderator:

Marschal

Großer Enumerator
#4
Hm, also ein Quellcode ausschnitt aus meinem, funktionierendem, Keylooger sagt folgendes:

C++:
short character;

...
                        if(GetAsyncKeyState(character)== -32767 )
                        {  
                            ...
                            }
Das funktioniert prächtig. Welche Projekt-art hast du den?
MFC? WIN32? oder eine WIN API?

EDIT: übrigends, was ich oben gesagt hatte mit auf eine Zahl überprüfen ist Müll:p, darf man machen;)
 
Zuletzt bearbeitet von einem Moderator:

Marschal

Großer Enumerator
#6
Ich mein in einer WIN-Form müsste es so verwendet werden, habe zwar noch nicht mit Win-Form gebastelt, aber naja.

C++:
SysWin32::GetAsyncKeyState(0xA4);
NACHTRAG:

hab was gefunden: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx

WinForms stellt ein KeyDown event zur verfügung.

In der MSDN ist erklärt wie die benutzung funktioniert.

Hoffe ich konnte helfen

Mfg Marschal
 
Zuletzt bearbeitet von einem Moderator:
#7
Ich mein in einer WIN-Form müsste es so verwendet werden, habe zwar noch nicht mit Win-Form gebastelt, aber naja.

C++:
SysWin32::GetAsyncKeyState(0xA4);
NACHTRAG:

hab was gefunden: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx

WinForms stellt ein KeyDown event zur verfügung.

In der MSDN ist erklärt wie die benutzung funktioniert.

Hoffe ich konnte helfen

Mfg Marschal
Zitat von MSDN:
Code:
Occurs when a key is pressed while the control has focus.
Sprich: Das Programm meldet wenn eine Taste gedrückt ist, wenn die Maus ein bestimmtes Textfeld oder andere Objekte im Fokus hat.

Menno..:-(
 
Zuletzt bearbeitet von einem Moderator:

deepthroat

Erfahrenes Mitglied
#8
Hi.

@Securitywelt: Warum postest du im Borland Unterforum, wenn du das Visual Studio benutzt?

Warum stellst du die Bibliothek nicht einfach in den Projekteinstellungen ein?

Die pragma Anweisung um eine Bibliothek zu linken, muss so aussehen:
C++:
#pragma comment(lib, "user32.lib")
Gruß