2013-07-02 64 views
5

現在、他のプロセスのウィンドウが最大化/最大化されているときに警告する機能を使用するプログラムで作業しています。イベントを最大化すると、右上隅の閉じるボタンの隣にあるシンボルを押すことを意味します。SetWinEventHookウィンドウ最大化されたイベント

これを達成するには、SetWinEventHook機能を使用します。問題は、このイベントをキャッチする正しいイベントコードが見つからないことです。私はEVENT_SYSTEM_MOVESIZESTART, EVENT_SYSTEM_MOVESIZEEND, EVENT_SYSTEM_MINIMIZESTART and EVENT_SYSTEM_MINIMIZEEND定数を試しましたが、それらはすべてmaximizeイベントでトリガーしていないようです。私は他のイベントをトレースすることができますので、私のSetWinEventHookの実装は機能しています。

誰かが他のプロセスからmaximizeイベントをキャプチャする方法についてアイデアを持っていますか?

ありがとうございます。

優しい挨拶で

、 ボブ

コード例:

// 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 'で何が? – bash0r

+0

サイズ変更イベントが発生するのを待ってから、画面全体が満たされているかどうかを確認できますか? – tbridge

+1

もっと良い方法がありますが、CBTフックでそれを捕まえることができます。 – chris

答えて

0

Windowsが最大化イベントを発生しません。他の方法もありますが、かなり厄介です。私はそれらをお勧めしません。

2

SetWinEventHook()のコールバックでは、EVENT_OBJECT_LOCATIONCHANGEイベントを処理し、ウィンドウがGetWindowPlacement()関数を呼び出すとSW_SHOWMAXIMIZED定数で2番目の引数のshowCmdプロパティを比較することによって、最大化された状態にあるかどうかを確認します。

C++の例:

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. 
     } 
    } 
} 
関連する問題