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
| //La fonction retourne TRUE si le FileMapping existe.
BOOL __stdcall IsMappedSysApp(LPCTSTR sczName)
{
HANDLE hMap;
LPVOID pMem;
HWND hWnd;
//Ouvre le segment de mémoire partagée
hMap = OpenFileMapping(FILE_MAP_READ, FALSE, sczName);
if(hMap == NULL)
return FALSE;
//Obtient un pointeur sur la zone mémoire
pMem = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
if(pMem != NULL)
{
//La zone mémore partagée contient un DWORD
//représentant les 32bits inférieurs du HWND
//(sur une machine 32bits, le HWND rentre entièrement)
//(note: en C++, un static_cast<> est nécessaire)
DWORD * pDw = pMem;
hWnd = (HWND) *pDw;
UnmapViewOfFile(pMem);
//Maintenant, on a récupéré un HWND depuis la mémoire partagée.
//Si ce HWND est toujours valide, on met au premier plan
//cette fenêtre ou la dernière fenêtre fille affichée.
if(IsWindow(hWnd))
{
HWND hWndLast = GetLastActivePopup(hWnd);
//Si la fenêtre est "Réduite" ("Minimisée"),
// on la réaffiche d'abord
if(IsIconic(hWndLast))
ShowWindow(hWndLast, SW_RESTORE);
SetForegroundWindow(hWndLast);
}
}
CloseHandle(hMap);
return TRUE;
} |
Partager