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