2016-12-12 5 views
0

私は現在、サードパーティのプログラムのウォッチドッグとして基本的に機能するC#プログラムを作成しています:トラフィックが一定値以下になると、プロセスは強制終了され、単純taskkill /im]。
プログラムがシステムトレイに最小化されている場合は、taskkill /imに応答せず、taskkill /f /imで強制終了する必要があります。C#システムトレイのサードパーティプログラムを制御する

これは推測できるように、これはプログラムを終了する最良の方法ではありません。だから私は現在、Windowsのシステムトレイにアクセスする方法を探していて、基本的にプログラムをクリックして実行する/それを最大化する方法を呼び出す。
私は文字通りトレイのクリックをシミュレートすることを考えましたが、この方法は不正確で予測不可能な方法であることがわかりました。
[システムAPIを使用して]これを達成する別の方法はありますか?

ありがとうございます!

+0

サードパーティ製のプログラムに閉じる確認ダイアログがない場合は、実行中のexeに 'Process'オブジェクトを添付し、[' CloseMainWindow() '](https://msdn.microsoft.com /en-us/library/system.diagnostics.process.closemainwindow(v=vs.110).aspx)私が理解していることは〜メインウィンドウの 'X'をクリックするのと同じことです。 – Quantic

答えて

1

user32.dllを使用してプロセスウィンドウを最大化できます。

// Pinvoke declaration for ShowWindow 
private const int SW_SHOWMAXIMIZED = 3; 

[DllImport("user32.dll")] 
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

// Sample usage 
ShowWindow(proc.MainWindowHandle, SW_SHOWMAXIMIZED); 

出演者this SO回答。ウィンドウ状態の完全なリストについて あなたはプロセスがまだウィンドウを持っている場合にのみ動作しますけれども、この

var processes = Process.GetProcessesByName("nameOfYourProcess"); 

foreach(var process in processes) 
{ 
    var windowHandle = process.getMainWindowHandle; 
} 

ような何かを行うことによってWindowHandleを取得することができ、このMSDN Page

をご覧ください。

0

ウィンドウ内の別のアプリケーションのトレイアイコンを使用して反復できる唯一の方法は、マウスのクリックによるシミュレーションです。これは市長の欠陥を持っています。ユーザーが同時にマウスとやりとりしているときにカーソルを「スチール」にしても機能しないのです。

あなたがメモリリーク(あなたが勝利した管理されたアプリケーションである場合)になってしまい、あなたが殺しているアプリケーションがプロセスを終了しているときに重要なことをしていないことが分かっているなら、 。

関連する問題