IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

comprendre mon pgme lol


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut comprendre mon pgme lol
    Bonjour,

    j'aimerais que l'on m'explique un petit truc :

    - comment fonctionne mon projet ? car il y a un point que je ne comprends pas trop mais j'aimerais approfondir car jai une soutenance dans quelques jours sur ce projet.

    donc voila j'ai mon premier projet en C# qui importe une dll et un second projet attaché a la solution entière qui lui est en C.

    donc voila le code de la partie C# où j'importe la dll me servant a bloquer les combianaisons de touches raccourcis de windows comme alt+tab :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     #region 
            [DllImport("sw_hook.dll")]
            private static extern bool InstallHook(IntPtr hwnd);
     
            [DllImport("sw_hook.dll")]
            private static extern bool UninstallHook(IntPtr hwnd);
            #endregion
     
            public bool block()// on bloque alt+tab alt+f4 menu demarrer ...
            {
                return InstallHook(this.Handle);
            }
     
            bool deblock(IntPtr a)//on debloque les raccourcis claviers
            {
                return UninstallHook(a);
            }
    et voila mon code en C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include "stdafx.h"
    #include "System-wide hook.h"
     
    HINSTANCE handleInstance;
    HHOOK handleHook;
    HWND handleWnd = NULL;
     
     
    BOOL APIENTRY DllMain( HINSTANCE hInstance, DWORD  ul_reason_for_call, LPVOID lpReserved )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    		handleInstance = hInstance;		// nécessaire pour l'installation du hook
    		return TRUE;
    	case DLL_PROCESS_DETACH:
    		// appel de la désinstallation du hook
    		if(handleWnd != NULL)
    			UninstallHook(handleWnd);
    		return TRUE;
    	}
        return TRUE;
    }
     
     
    BOOL __stdcall InstallHook(HWND hWnd)
    {
    	if(handleWnd != NULL)
    		return FALSE; // le hook est déjà installé
     
    	// tentative d'installation du hook
    	handleHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)MessageProc, handleInstance, 0);
     
    	// désactivation de la barre des taches (source : http://msdn.microsoft.com/msdnmag/issues/02/09/CQA/default.aspx)
    	HWND hwndTray = FindWindow("Shell_traywnd", NULL);
    	EnableWindow(hwndTray, FALSE);
     
     
    	if(handleHook != NULL)
    	{
    		// succès
    		handleWnd = hWnd;
    		return TRUE;
    	}
     
    	// échec
    	return FALSE;
    }
     
     
     
    BOOL __stdcall UninstallHook(HWND hWnd)
    {
    	// probleme de HWND ou le hook n'est pas installé
    	if(hWnd != handleWnd || hWnd == NULL)
    		return FALSE;
     
    	// réactivation de la barre des taches
    	HWND hwndTray = FindWindow("Shell_traywnd", NULL);
    	EnableWindow(hwndTray, TRUE);
     
    	// tentative de desinstallation du hook
    	BOOL unhooked = UnhookWindowsHookEx(handleHook);
     
    	// si la desinstallation a reussi
    	if(unhooked)
    		handleWnd = NULL;
    	return unhooked;
    }
     
     
    LRESULT CALLBACK MessageProc (int nCode, WPARAM wParam, LPARAM lParam)
    {
    	/*EXTRAIT MSDN : If code is less than zero, the hook procedure must pass the message
    	to the CallNextHookEx function without further processing and should return the value
    	returned by CallNextHookEx.*/
     
    	if(nCode < 0)
    		return CallNextHookEx(handleHook, nCode, wParam, lParam);
     
    	if (nCode == HC_ACTION)
    	{
    		// récupération des données de lParam
    		PKBDLLHOOKSTRUCT params = (PKBDLLHOOKSTRUCT)lParam;
     
    		// blocage du alt+tab (donc si on recoit KEYDOWN pour tab et que flags = LLKHF_ALTDOWN : (alt appuyée))
    		if ( params->vkCode == VK_TAB && params->flags & LLKHF_ALTDOWN)
    			return TRUE;		// blocage du message
     
    		// blocage du alt+echap (qui agit un peu comme alt+tab)
    		if ( params->vkCode == VK_ESCAPE && params->flags & LLKHF_ALTDOWN)
    			return TRUE;		// blocage du message
     
    		// blocage des touches "Windows" : VK_LWIN et VK_RWIN
    		if ( params->vkCode == VK_LWIN || params->vkCode == VK_RWIN)
    			return TRUE;		// blocage du message
     
    		// récupération de l'état de la touche ctrl
    		BOOL ctrlDown = GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) * 8) - 1); //(source : http://msdn.microsoft.com/msdnmag/issues/02/09/CQA/default.aspx)
     
    		// blocage de ctrl+echap (qui agit comme les touches "Windows")
    		if ( params->vkCode == VK_ESCAPE && ctrlDown)
    			return TRUE;
    	}
     
     
    	// le message n'etait pas a bloquer, on le renvoie
    	return CallNextHookEx(handleHook, nCode, wParam, lParam);
    }

    Je ne comprends pas tres bien le lien entre ces parties du programme ... quelqu'un pourrait t'il m'expliquer comment cela fonctionne ?

    merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Ton premier est un executab le, ton second une dll : l'executable appelle les fonction de la dll... (dynamic link librarie => bibliothèque de classe dynamique )

    Ou est le probleme?

    Si tu veux tout comprendre de la dll, il faut bosser le c/c++, et la Win32 : apprendre ce qu'est la WinProc, DllMain, WinMain, etc. Essayes de voir ce que sont les parametres de DllMain et MessageProc

    regarde aussi sur ce qu'est un Handle (les HWND : Handle de fenetre, HHOOK : Handle du Hook).

  3. #3
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    okay okay merci

Discussions similaires

  1. Comprendre mon exercice : formule récurrente de calcul d'une racine carrée
    Par djmhdi dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 15/01/2015, 18h30
  2. comprendre mon réseau
    Par jeandoux10 dans le forum Protocoles
    Réponses: 5
    Dernier message: 04/10/2013, 08h53
  3. Aide a comprendre mon énoncé
    Par Linquisiteur dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 13/05/2013, 21h08
  4. Besoin d'aide pour comprendre Mon erreur
    Par napi15 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/04/2013, 22h10
  5. Comprendre mon htaccess
    Par Gunner4902 dans le forum Apache
    Réponses: 1
    Dernier message: 23/09/2008, 23h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo