C/C++ Hooks



  • Hi
    Ich möchte ein Konsolenanwendung schreiben, die einige Tastatureingaben einfach ignoriert.
    Ich habe schon gegoogelt und herausgefunden, dass das mit Hooks geht. Gibt es noch eine andere Möglichkeit außer hooks dies zu machen. Und warum funktioniert dieser Quelltext hier nicht:
    Ja ich weiß ich bin noch ein anfänger 🙄

    /*http://www.tutorials.de/forum/c-c/240771-tastatureingabe-einlesen-abfangen.html*/
    #include <windows.h>
    #include <iostream>
    using namespace std;
    LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
    HHOOK hKBHook;
    LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
    {
    
      //Wert != 0 zurückgeben, damit die Nachricht nicht weiterverarbeitet wird
      return 1;
    }
    
    int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) 
    { 
    
    hKBHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, 0, 0);    
    cout <<" ss"<< endl;
    int s;
    cin >> s;
    
     return 0;   
    }
    

    Hat jemand eine Idee 😕



  • Ich glaube das liegt daran dass globale Hooks ihr hook-Procedure aus einer dll zur Verfügung stellen müssen. Sie wird ja allen laufenden Threads benutzt.
    http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx



  • Hi.
    Danke ich bin jetzt weiter gekommen. 🙂
    Jetzt habe icj aber ein neues Problem. Wenn ich hook.exe öffne kommt folgendes Windows fehler:
    Hook.exe hat ein Problem festgestellt und muss beendet werden.

    Hier der Quelltext:
    Hook.exe

    #include <windows.h>
    #include <iostream>
    using namespace std;
    typedef BOOL (*InstallHook)();
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
    {
    	HMODULE hDll = LoadLibrary("Hook.dll");
    
    	InstallHook ProcAdd = (InstallHook)GetProcAddress(hDll, "InstallHook");
    
    	ProcAdd();
    
    cout << "hallo"<<  endl;
    int a;
    cin >> a;
    
    	FreeLibrary(hDll);
    
    	return 0;
    }
    

    Hook.dll

    /* Replace "dll.h" with the name of your header */
    
    #include <windows.h>
    #include <iostream>
    using namespace std;
    #pragma data_seg
    
    HINSTANCE	g_hInstance;
    HHOOK		g_hHook;
    
    BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
    {
    
    	return TRUE;
    }
    
    LRESULT __declspec(dllexport)__stdcall  CALLBACK HookProc(int nCode,WPARAM wParam, 
                                LPARAM lParam)
                                {
    
    	return 1;
    }
    
    BOOL __declspec(dllexport)__stdcall InstallHook()
    {
      cout << "Hallo" << endl;
        g_hHook =SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)HookProc, g_hInstance, 0);
    
        return TRUE;
    }
    

    Hat jemand eine Idee??? 😕



  • yo MSDN lesen bevor man mit irgendwelchen hook frickeleien beginnt. programmieren sollte man auch können. und man sollte wissen was 'ne sufu ist. und man sollte sie benutzen können.



  • 19freddy92 schrieb:

    Hi
    Ich möchte ein Konsolenanwendung schreiben, die einige Tastatureingaben einfach ignoriert.

    Hat jemand eine Idee 😕

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	char ignores[] = {'A', 'a', 'X', 'x'};
    
    	char in;
    	int ind;
    	int ignore;
    
    	while((in = getch()) != 'E')
    	{
    		ignore = 0;
    		for(ind = 0; ind < sizeof(ignores); ++ind)
    			if(in == ignores[ind])
    			{
    				++ignore;
    				break;
    			}
    
    		if(!ignore)
    			printf("%c", in);
    	}
    }
    

Anmelden zum Antworten