前回起動したプロセスの特定のダイアログが閉じるまで、プログラムを待機(ブロック)するにはどうすればよいですか?c#起動したプロセスのダイアログが閉じるまで待つ
私はsshキーを読み込むためにpageant.exeを開始しています。 Pageantはクラス "Process"で開始されます。これは正常に動作します。
私のsshキーにはパスフレーズがあります。ですから、私の主なプログラム/プロセス(このプロセスを開始したプロセス)は、ユーザーがsshキーパスフレーズを入力するまで待たなければなりません。
私はどのように待つべきか考えましたが、C#でこれを行う方法がわかりません: ページャがパスフレーズを要求するとダイアログが表示されます。だから私のメインプログラム/プロセスは、パスフレーズダイアログが閉じられるまで待つことができます。これはC#で可能ですか?
私はhereからアイデアを得ました。
EDITは:これはあなたを助けるかもしれませんが、あなたの全体の制御を与えるものではありません
// wait till passphrase dialog closes
if(WaitForProcessWindow(cPageantWindowName))
{ // if dialog/process existed check if passphrase was correct
do
{ // if passphrase is wrong, the passphrase dialog is reopened
Thread.Sleep(1000); // wait till correct passphrase is entered
} while (WaitForProcessWindow(cPageantWindowName));
}
}
private static bool WaitForProcessWindow(string pProcessWindowName)
{
Process ProcessWindow = null;
Process[] ProcessList;
bool ProcessExists = false; // false is returned if process is never found
do
{
ProcessList = Process.GetProcesses();
ProcessWindow = null;
foreach (Process Process in ProcessList)
{ // check all running processes with a main window title
if (!String.IsNullOrEmpty(Process.MainWindowTitle))
{
if (Process.MainWindowTitle.Contains(pProcessWindowName))
{
ProcessWindow = Process;
ProcessExists = true;
}
}
}
Thread.Sleep(100); // save cpu
} while (ProcessWindow != null); // loop as long as this window is found
return ProcessExists;
}
ここでは、Perlスクリプトをc#に変換するのは一般的ではありません。 [尋ねる]。また、[mcve] – MickyD
の楽しい事実をチェックしてください。http://stackoverflow.com/a/3147920/6248956 – YuvShap