Hook clic droit sur la titlebar

cs_reptils Messages postés 5 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 18 août 2006 - 11 août 2006 à 15:52
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 18 août 2006 à 22:55
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
A voir également:

2 réponses

cs_reptils Messages postés 5 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 18 août 2006
18 août 2006 à 10:38
up
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
18 août 2006 à 22:55
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
0
Rejoignez-nous