リモートPCで動作しているプロセスにWindowsメッセージを投げるこ
リモートPCで動作しているプロセスにWindowsメッセージを投げることは可能でしょうか?
下記のようなコードで試してみたのですが、ASP.NETでリモートPCのプロセスを取得できています。
これらの中から目的のプロセスをプロセス名で特定し、MainWindowHandleプロパティでウィンドウハンドルを取得します。
これを利用してSendMessageで目的のウィンドウにメッセージを投げようとしていますが、pFoundWindowには0が入っています。
ちなみに目的のプロセスはAdmin権限で実行されていますが、他の権限で実行されているプロセスも同じようにウィンドウハンドルを取得できていません。
[C#]
Process[] processes = Process.GetProcesses("servername”); //プロセスリスト取得
foreach (Process p in processes)
{
if (p.ProcessName == "target_process"){ //目的のプロセスであれば
IntPtr pFoundWindow = p.MainWindowHandle; //メインウィンドウのハンドルを取得
SendMessage(pFoundWindow, msg, wParam, lParam);
}
MSDNには、MainWindowHandleはローカルPCで実行されているプロセスしか取得できないとありましたが、権限の設定等で取得できないのでしょうか?
通常、リモート接続では実行ユーザがNETWIORK SERVICEになるようですが、これをAdmin権限で実行できれば取得できそうな気がします。
これと同様のことをFindWindow関数を使ってもできるのですが、同じくリモートPCのプロセスではウィンドウハンドルを取得できません。
他に良い方法はありませんでしょうか?
サーバーはWindows Server 2003 + IIS6.0です。
お礼
回答ありがとうございます。 QoSを切ってみましたがパケットのやり取りが途中で止まってしまいました。 >「TCP対策として、明示的にプログラム中でQoS機能で帯域を予約する」方法を是非教えていただけないでしょうか?お礼が遅くなり申し訳ありませんが、よろしくお願いします。