2013-07-02 25 views
5

Şu anda başka bir işlem penceresi en üst düzeye/maksimize edildiğinde beni uyarması gereken bir işlev kullanan bir program üzerinde çalışıyorum. En büyük duruma getirme olayı ile, sağ üst köşedeki kapat düğmesinin yanındaki sembollere basmak istiyorum.SetWinEventHook Window Maximized event

Bunu yapmak için SetWinEventHook işlevini kullanıyorum. Sorun şu ki bu olayı yakalamak için doğru olay kodunu bulamıyorum. EVENT_SYSTEM_MOVESIZESTART, EVENT_SYSTEM_MOVESIZEEND, EVENT_SYSTEM_MINIMIZESTART and EVENT_SYSTEM_MINIMIZEEND sabitlerini denedim, ancak bunların tümü maksimum hale getirme etkinliğinde tetiklenmiyor. Ancak diğer olayları izleyebilirim, böylece SetWinEventHook uygulamam işe yarıyor.

Maby herhangi biri, başka bir işlemden azami olayı nasıl yakalayacağına dair bir fikri var mı?

Şimdiden teşekkürler.

dost selâmlarımla

, Bob

Kod örnek:

// 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

'SetWindowsHookEx 'neyin nesi? – bash0r

+0

Bir yeniden boyutlandırma olayı için bekleyebilir, daha sonra tüm ekranın dolup dolmadığını kontrol edebilirsiniz? – tbridge

+1

Daha iyi bir yol olmalı, ancak bir CBT kancası bunu yakalayabilir. – chris

cevap

0

, Windows en üst düzeye çıkar olayı patlamaz. Başka yollar var, ama oldukça iğrenç ve onları tavsiye etmem.

2

SetWinEventHook() ‘nin geri arama olarak, EVENT_OBJECT_LOCATIONCHANGE olayı işlemek ve pencere GetWindowPlacement() işlevinin çağrılması ve SW_SHOWMAXIMIZED sabiti ile ikinci argüman showCmd özelliği karşılaştırarak en üst düzeyde bir durumda olmadığını kontrol edin.

C++ örnek:

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. 
     } 
    } 
} 
İlgili konular