Hook clic droit sur la titlebar

Signaler
Messages postés
5
Date d'inscription
jeudi 8 juillet 2004
Statut
Membre
Dernière intervention
18 août 2006
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
-
Salut a tous,
J'ai un p'ti probleme avec le programme que j'essaies de faire. Je voudrais faire un virtual desktop, et pour cela j'aimerais que lorsque je clic droit sur la titlebar de n'importe quelle fenetre sur windows, que le hook installé me permette de modifier le menu system de base ("agrandir","reduire","fermer") pour y rajouter un itemmenu "Move to >>" pour choisir le bureaux vers lequel déplacer la fenetre. ça marche à peu pret ce que j'ai fais, mais il y a un p'ti bug c'est que je dois cliquer au moins deux fois pour la modification du menu system prenne effet...
bref vois la partie du code qui est concernée (installation du hook et callback lors du clic droit)
//----------------------------
#include <windows.h>

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT
#endif

static HHOOK m_HookCreatePopUp = NULL;
static HHOOK m_HookOnClicMenu = NULL;
static CWPSTRUCT *cwp;
static HINSTANCE m_hinst=NULL;

enum
{
    ID_SUBMENU_BUREAU=5000,
    ID_MENU_BUREAU1,
    ID_MENU_BUREAU2,
    ID_MENU_BUREAU3,
    ID_MENU_BUREAU4
};

// CallBack interception et création de menu systeme
LRESULT CALLBACK HookCreatePopUp(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        cwp=reinterpret_cast<CWPSTRUCT*>(lParam);
        if((cwp->message)==WM_INITMENUPOPUP)
        {
            if (HIWORD((HMENU)(cwp->lParam)) == 1)
            {
                    GetSystemMenu(cwp->hwnd,true);
                    HMENU menu = GetSystemMenu(cwp->hwnd,false);
                    HMENU submenu = CreatePopupMenu();
                    AppendMenu(submenu,MF_STRING,ID_MENU_BUREAU1,"Bureau 1");
                    AppendMenu(submenu,MF_STRING,ID_MENU_BUREAU2,"Bureau 2");
                    AppendMenu(submenu,MF_STRING,ID_MENU_BUREAU3,"Bureau 3");
                    AppendMenu(submenu,MF_STRING,ID_MENU_BUREAU4,"Bureau 4");

                    AppendMenu(menu,MF_SEPARATOR,0,0);
                    AppendMenu(menu, MF_STRING|MF_POPUP,(UINT)submenu, "Déplacer vers");
            }
        }
    }
    return(CallNextHookEx(m_HookCreatePopUp, nCode, wParam, lParam));
}

// Installation du Hook
DLL_EXPORT bool Hook(HWND hwnd)
{
    if(m_hinst==NULL)
    {
        MessageBox(NULL,"m_hinst=NULL","",0);
    }
    m_HookCreatePopUp = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HookCreatePopUp,m_hinst,0);
    m_HookOnClicMenu = SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)HookOnClicMenu,m_hinst,0);
    if ((m_HookCreatePopUp != NULL )&&(m_HookOnClicMenu != NULL))
        return true;
    return false;
}
//--------------------------------

Merci d'avance pour votre aide

2 réponses

Messages postés
5
Date d'inscription
jeudi 8 juillet 2004
Statut
Membre
Dernière intervention
18 août 2006

up
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Je ne vois pas pourquoi le menu ne se modifie pas le premier coup, par contre, j'ai l'impression qu'après, à chaque clic droit, le menu va être modifié, et donc ton sous-menu "Déplacer vers" va se dupliquer, non?

_____________________________________
Un éditeur de ressources gratuit pour Windows