2013-07-02 10 views
5

Attualmente sto lavorando a un programma che utilizza una funzionalità che dovrebbe avvisarmi quando la finestra di un altro processo sta massimizzando/massimizzando. Con l'evento di massimizzazione intendo premere i simboli accanto al pulsante di chiusura nell'angolo in alto a destra.Finestra SetWinEventHook Evento massimizzato

Per riuscirci, utilizzo la funzione SetWinEventHook. Il problema è che non riesco a trovare il codice evento corretto per catturare questo evento. Ho provato le costanti EVENT_SYSTEM_MOVESIZESTART, EVENT_SYSTEM_MOVESIZEEND, EVENT_SYSTEM_MINIMIZESTART and EVENT_SYSTEM_MINIMIZEEND ma non sembrano attivarsi sull'evento di massimizzazione. Tuttavia, posso tracciare altri eventi, quindi la mia implementazione di SetWinEventHook funziona.

Qualcuno ha un'idea su come acquisire l'evento di massimizzazione da un altro processo?

Grazie in anticipo.

Cordiali saluti, Bob

Codice esempio:

// To catch the event 
SetWinEventHook(EVENT_MIN, EVENT_MAX, IntPtr.Zero, new WinEventDelegate(WinEventProc), GetProcess(), 0, 0); 

// The handler 
private void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime) 
{ 
    // TODO: Filter maximize event here 
    if (eventType == ?) 
    { 
      // Do something 
    } 
} 
+0

Che con 'SetWindowsHookEx '? – bash0r

+0

Si può attendere un evento di ridimensionamento, quindi controllare se riempie un intero schermo? – tbridge

+1

Ci deve essere un modo migliore, ma un gancio CBT può catturarlo. – chris

risposta

0

di Windows non viene generato un evento di ingrandimento. Ci sono altri modi, ma sono piuttosto cattivi e non li consiglierei.

2

In callback SetWinEventHook() s’, gestire l'evento EVENT_OBJECT_LOCATIONCHANGE e controllare se la finestra è in stato ingrandito chiamando la funzione GetWindowPlacement() e confrontando la proprietà showCmd del suo secondo argomento con la costante SW_SHOWMAXIMIZED.

C++ esempio:

void CALLBACK exampleHook(HWINEVENTHOOK hook, DWORD event, HWND hWnd, 
    LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime) 
{ 
    if (EVENT_OBJECT_LOCATIONCHANGE == event) { 
     WINDOWPLACEMENT wp; 
     wp.length = sizeof(WINDOWPLACEMENT); 
     GetWindowPlacement(hWnd, &wp); 

     if (SW_SHOWMAXIMIZED == wp.showCmd) { 
      // Window is maximized. 
     } 
    } 
} 
Problemi correlati