私はPowerShellの初心者です。多分これは疑問な質問です。PowerShell - MainWindowTitleが見つからないときのループ
シンプルなスクリプトです。別のウィンドウを開くプログラムを開きたい。最初は、接続したいかどうかを尋ねるウィンドウです。
[System.Windows.Forms.SendKeys]::SendWait("{TAB}{TAB}{TAB}{TAB}{ENTER}")
を使用して、私はちょうど私が接続することを確認します。今度は次のウィンドウが厄介です。ロードには時間がかかり、MainWindowTitleを知っています。私は何をしたくないことは十分に長く待つために
Start-Sleep -Milliseconds 20000
を書くことです。ときには数秒で開かれることもあり、時には20秒以上かかる場合もあります。だから私はループに何かを入れ、プロセスが完全に始まるのを待つことが良い考えだと思った。 (...と何が動作しません)ここでは、私がやったことだ:
while (!$winid) {
Start-Sleep -Milliseconds 1000
$winid = Get-Process |where {$_.MainWindowTitle -like "*windowtitle*"} |select -expand id
write-host $winid
}
私は私のGet-プロセスの結果を表示するwrite-host $winid
を持っています。しかし、ウィンドウが長い間開いていても、全体的にNULLです。
私は私のスクリプトを停止し、単にそれが動作
Get-Process |where {$_.MainWindowTitle -like "windowtitle"} |select -expand id
を書きます!なぜか分からない...
必要なウィンドウが開かれ、キーストロークの準備ができているかどうかをスクリプトに確認させるにはどうすればよいですか?
おかげで、あなたはあなたのスクリプトがプログラムを開いたmentionned トビアス
あなたの答えをありがとう!私が開いているアプリは、基本的にリモート接続を作成しています。これを実行すると、最初のウィンドウが開きます。これはコードで動作します。しかし、私が "connect"を選択すると、そのウィンドウが再び閉じられ、新しいプロセスIDが得られます。私は、何とかキャッチしようとしていた新しいウィンドウのウィンドウ名が、スクリプトが完了するまで正しい名前を取得していないことを知りました。一時的な名前を見つけてスクリプトに追加しました。今それは動作します。しかし、あなたの答えがアプリケーションを開くの99%に適用され、私がしたいと思っている他のもののために本当に役立つ私はそれを正しいとマークします! – TXP
あなたの返信にForegroundColorのヒントありがとう!いつも学ぶ... – TXP