2016-08-19 4 views
-1

私は.exe Windowsデスクトップアプリケーション(WinForm)を持っていますが、その.exeファイルのコードにアクセスすることはできません。私はダブルクリックイベントをそのアプリケーションにすでにレンダリングされている.exeコントロールに処理したい。クリックイベントを.exeファイルコントロールに添付するにはどうすればいいですか?

私はそれのコードを持っていないので、私はこれを行うために次のアプローチを始めました。

  1. 私はバックグラウンドで実行され、フックの概念を使ってすべてのダブルクリックイベントをキャプチャしています。
  2. デスクトップ上でダブルクリックイベントが発生すると、自分の.exeが実行されているかどうかを確認します。

    Process.GetProcesByName( "My exe name");

私の.exeが実行されている場合は、ビジネスロジックを実行します。

問題:私の.exeが実行中でフォアグラウンドではないときにビジネスロジックを呼びたくない。それは前景にあるはずですが、ビジネスロジックと呼ぶだけです。

ここで、自分の.exeがフォアグラウンドであるかどうかを私のC#コードで伝えたいと思います。

アプローチ自体が正しくない場合は、これを行う他の方法を教えてください。

+0

[別のアプリケーションのイベントを取得する]の可能複製(http://stackoverflow.com/questions/7904544/getting-events-of-another-application) – Tokk

+0

は理由全域フッキングそのまで重複しませんうまく動作します。私の.exeがフォアグラウンドであるかどうかをチェックする際に問題が発生します。 –

答えて

0

最後に、これは期待どおりのコードです。

[DllImport("user32.dll")] 
     static extern IntPtr GetForegroundWindow(); 

     [DllImport("user32.dll")] 
     static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count); 

private string GetActiveWindowTitle() 
     { 
      const int nChars = 256; 
      StringBuilder Buff = new StringBuilder(nChars); 
      IntPtr handle = GetForegroundWindow(); 

      if (GetWindowText(handle, Buff, nChars) > 0) 
      { 
       return Buff.ToString(); 
      } 
      return null; 
     } 

はその後、私のグローバルフックイベント、

private void HookManager_MouseDoubleClick(object sender, MouseEventArgs e) 
    {    
     string activeWindow = this.GetActiveWindowTitle(); 

     if (activeWindow.ToLower().Contains("my .exe name") && e.X >= 64 && e.X <= 86 && e.Y >= 32 && e.Y <= 54) 
      CallChildProcess();      
    } 

内のグローバルフックのイベントについては、以下のリンクを参照してください。

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C?msg=5288013#xx5288013xx

関連する問題