begin process at 2012 05 29 09:03:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

Hook + GetForegroundWindow + SendMessage


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Hook + GetForegroundWindow + SendMessage

vendredi 12 mars 2010 à 17:52:05 | Hook + GetForegroundWindow + SendMessage

erodatam

Bonjour,

Je souhaite faire un gestionnaire de presse papier en application win32.
Grace à un hook, je suis capable d'intercepter les pressions sur le clavier.
Grace à GetForegroundWindow, GetWindowThreadProcessId, GetCurrentThreadId, GetFocus et finalement SendMessage, j'arrive à simuler la copie dans le presse papier du texte sélectionné dans l'application qui est premier plan.
Seulement cela ne marche pas pour toutes les applis (notamment Netbeans ou Chrome)
Je vous colle la fonction du hook :
Code C/C++ :
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{    
    KBDLLHOOKSTRUCT *hookstruct = ((KBDLLHOOKSTRUCT*)lParam);
    BYTE KeyState[256]; 

    WORD Char = 0; 
    char sKeyName[MAX_PATH] = ""; 
    DWORD dwMsg = 1;

    static int bDeadKey = 0;
    static int bCapsOn; 
    int bCtrlOn = 0; 
    int bLeftShift = 0; 
    int bRightShift = 0; 

    if((nCode == HC_ACTION) && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN))
    {
        if (nCode < 0 || nCode == HC_NOREMOVE) 
            return CallNextHookEx(hHook, nCode, wParam, lParam);

        if(IsDeadKey(hookstruct->vkCode))
        {
            bDeadKey = 1;
            return CallNextHookEx(hHook, nCode, wParam, lParam);
        }

        bCapsOn = GetKeyState(VK_CAPITAL) & 0x0001; 
        bCtrlOn = GetKeyState(VK_CONTROL) & 0x8000; 
        bLeftShift = GetKeyState(VK_LSHIFT) & 0x8000;
        bRightShift = GetKeyState(VK_RSHIFT) & 0x8000;

        switch(hookstruct->vkCode)
        {
            case VK_F9 :                                 
                HWND hwnd = GetForegroundWindow();
                DWORD remoteThreadId = GetWindowThreadProcessId(hwnd, NULL);                                      
                DWORD currentThreadId = GetCurrentThreadId();
                AttachThreadInput(remoteThreadId, currentThreadId, TRUE);
                HWND focused = GetFocus();                
                AttachThreadInput(remoteThreadId, currentThreadId, FALSE);
                
                SendMessage(focused, WM_COPY, 0, 0);
                 
                LPCSTR strFromClipboard = "";
                if (OpenClipboard(NULL)) 
                {
                   HANDLE hClipboardData = GetClipboardData(CF_TEXT);     
                   char *pchData = (char*)GlobalLock(hClipboardData);      
                   strFromClipboard = pchData;                                                                                           
                   CloseClipboard();
                   SetWindowText(hEdit[0],strFromClipboard);
                }                                  
                break;                                                                                         
        }
    }

    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

Voila, merci d'avance pour votre aide =)


Cette discussion est classée dans : int, wparam, lparam, vk, ncode


Répondre à ce message

Sujets en rapport avec ce message

probleme dans mon hook clavier [ par youpiyoyo ] je me suis po embeter j'ai pris le code de brunews a ce sujetj'aimerai faire un hook kan on appuie a la fois sur la touche windows et un ctrl...j'ai c [Dev C++] disparition hook [ par erehtnaP ] Salut, je commence en C++, et je voudrais creer un hook global avec Dev-C++ Le code de la dll et de l'exe se compile sans erreur, les fonction de mis Annuler Action Menu en Hookant [ par Zootella ] Hello, j'ai cette procédure hook: LRESULT CALLBACK HookMenuMessage(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode == HC_ACTION) { Hooks [ par M5i9k ] Bonsoir,je voulais savoir si il était possible de creer un hook lors du chargement d'un dll c'est à dire dans la fonction DllMain d'un dll, j'essaye d vs2005 kbdhook [ par Sebopop2 ] bonjour,j'ai cree une app avec une dll pour faire un hook global clavier, malheureusement celui ci ne fonctionne pas.#include"toolbox.h"</f Boite de dialogue [ par bioopovega ] Bonjour,J'ai un petit probleme, quand je créer une boite de dialogue dans le fichier main.cpp, je n'est pas d'erreur, mais quand je veux inclure la cr Dialogue procedure dans une classe [ par bioopovega ] Bonjour,D'abord, je ne sais pas si cela correspond bien au thème, mais je ne sais pas ou le mettre.J'ai un probleme, je crée une boite de dialogue a p Comment faire pour re_afficher un dialogue apres "RedrawWindow" API sous DEV cpp [ par LouisJean ] louisjean dev cpp Bonjours a tous!Comment faire pour remontrer le dialogue "Mon_DIALOG" en API wind32 sous DEV Windows Message OnNotifyIcon [ par unionx ] bonjourje veux savoir ou je vais trouver la fonction ::OnNotifyIcon(WPARAM wParam, LPARAM lParam) j'ai bien chercher dans la partie ClassWizard et eve Créer sa classe OpenGL [problème pointeur de fonction membre] [ par Mickatronic ] Bonjour, je réalise un projet tutauré en C++, dans ce projet je dois créer une classe qui va me permettre de généré la fenêtre OpenGl. Comme je savais


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales