私は、Windowsエクスプローラの4つのインスタンスを開き、PinvokeのMoveWindow
を使用して画面に配置する単純なC#コンソールアプリケーションを作成しています。私の問題は、Process.Start
コマンドがあまりにも遅く実行されているように見え、MoveWindow
関数が意図的にプログラムを遅くしない限り、そのプロセスを見つけることができないということです。ここに私のコードは次のとおりです。Process.Startが完了するまで次の行を実行しない
Process.Start(new ProcessStartInfo()
{
FileName = "explorer",
Arguments = location, //Defined elsewhere (for testing just ".")
UseShellExecute = false
});
int[] pos = GetPositions(position); //Little function which gets the positions I want for this window
System.Threading.Thread.Sleep(500);
IntPtr hnd = GetForegroundWindow();
bool ok = MoveWindow(hnd, pos[0], pos[1], pos[2], pos[3], false);
は、私は(任意)半秒間Sleep
に抱えている方法を参照してください。私はそれが実行されるマシンの仕様を知らないので、理想的ではありません。それは、高速機では効率が悪くなるか、遅い機種では破損する可能性があります。私が任意に設定された時間待つ必要がないプロセスが始まるまで、より具体的な方法を待っていますか?
はまた、半関連ノートで、あなただけの私が移動したいウィンドウをつかむために前面のウィンドウを取得カウボーイコードのビットに気づくことがあります。これは、特定のWindow Explorerプロセスを選別しようとしているためです。私が言うことは、メモ帳やIEでテストしていたときと同じように動作せず、ハンドルを渡すだけではうまく動作しないということです。この問題に精通している人は誰でも自由に寄付することができますが、それに時間を費やさなければ、この解決策は不格好です。それはうまく機能しますが、少しでも時間をかけて頭を叩きたくないキーボードはそれを行う正しい方法を理解しようとしています。
問題は、何らかの理由でプロセスが開始され、Windowsエクスプローラウィンドウが別々に表示されることです。その場合、ハンドルを見つけることができませんでした。いずれにしても、私は何かしたくないです。*プロセスが終了するまでは、ビジュアルディスプレイがロードされた後に何かをしたいだけです。Windowsエクスプローラでプロセス自体とは異なるタイムテーブルで実行されるようです。 –