Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++] Problema con le hook globali

    Ciao ragazzi, ho un problema ad utilizzare le hook globali, mi sono letto bene tutta la documentazione e riguardo a come funzionano i messaggi di windows da quando leggo il petzold inizio a capirci abbastanza bene.

    Comunuque...ho provato a fare una hook per il controllo della tastiera in una dll, in modo che abbia effetto su tutti i processi del desktop corrente.

    Allora, il codice seguente l'ho scritto per i 9/10 io, dovrebbe caricare una hook per il controllo della tastiera e poi quando fiuta il VK_RETURN nel wParam (indipendentemente che il messaggio si WM_CHAR, WM_KEYDOWN, etc....) infatti è una hook molto grezza, comunque quando fiuta un VK_RETURN dovrebbe distruggersi......ma non lo fa!


    Chiedo aiuto....il codice è molto semplice, posto anche il codice che ho usato per caricare la dll.

    Compilatore VS 2010 express

    codice:
    #include "stdafx.h"
    #include <windows.h>
    
    
    HHOOK hHook;
    HINSTANCE hInst;
    
    //forward declaration
    __declspec(dllexport) void Unhook();
    __declspec(dllexport) BOOL SetHook(DWORD dwThreadId);
    
    int DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID pReserved)
    {
    	
    	switch(dwReason)
    	{
    	case DLL_PROCESS_ATTACH:
    		hInst = hInstance;
    		SetHook(0);
    		break;
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    
    	return 1;
    }
    
    
    
    LRESULT CALLBACK KeyHookProcM(  int nCode,   WPARAM wParam,   LPARAM lParam)
    {
    	if(wParam == VK_RETURN)
    		Unhook();
    
        return CallNextHookEx(NULL, nCode, wParam, lParam);
    }
    
    
    __declspec(dllexport) BOOL SetHook(DWORD dwThreadId)
    {
    	
    	hHook = SetWindowsHookEx( WH_KEYBOARD, KeyHookProcM, hInst, dwThreadId );
    	DWORD dwErr = GetLastError();
    	if(hHook == NULL)
    		{
    		TCHAR szBox[100];
    		wsprintf(szBox,L"Unable to create the hook\nerror code: %i",dwErr);
    		MessageBox(NULL,szBox,L"Error",MB_ICONERROR);
    		return 0;
    		}
    	//MessageBox(NULL,L"Hook created",L"Error",MB_ICONINFORMATION);
        return 1;
    }
    
    __declspec(dllexport) void Unhook()
    {
    	BOOL bRes = UnhookWindowsHookEx(hHook);
    
    	if(!bRes)
    	    MessageBox(NULL,L"Unable to delete the hook",L"Error",MB_ICONERROR);
    	else
    		MessageBox(NULL,L"Hook destroyed",L"Error",MB_ICONINFORMATION);
    }
    codice usato per caricare la dll:

    codice:
    #include "stdafx.h"
    #include <windows.h>
    					
    
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
    
    HMODULE hMod = LoadLibrary(L"Hook dll.dll"); 
    //quando LoadLibrary viene chiamata parte la DllMain
    DWORD dwErr= GetLastError();
    
    	if(hMod == NULL)
    		{
    		TCHAR szBox[100];
    		wsprintf(szBox,L"Unable to load the dll\nerror code: %i",dwErr);
    		MessageBox(NULL,szBox,L"Error",MB_ICONERROR);
    		return 1;
    		}
    return 0;
    }
    Il codice è veramente semplice....help

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    xche lo metti in una dll? Io li uso all'interno del mio processo e fungono benissimo. Altrimenti la cosa la vedo very very hard
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    perchè

    perchè se io la metto dentro il processo la crea solo per quel processo, io invece voglio che abbiano effetto su tutti i processi...

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Intanto chiamerei prima callnexthook e poi controllerei nCode. Non disattiva l'hook?
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    ?


  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Non ho compreso bene ... quando carichi la DLL, il programma termina scaricando la DLL stessa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    ma allora come dovrei fare?

    ma oregon...ma allora come dovrei fare? perchè il problema non è che ho sbagliato ad usare le hook ma le dll.....adesso faccio un altro tentativo come dici te

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    mmm

    no, non ho proprio capito come dovrei impostare la dll!

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Io non ho capito quale deve essere l'eseguibile che deve sfruttare l'hook della tua dll ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    allora

    io sto cercando di applicare la hook a tutti i processi, nel senso che deve filtrare i messaggi riguardanti la tastiera di tutto il pc.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.