3

MSEide+MSEguiに基づいて、Linux および Windows (MSEgit)用のグラフィカル git フロントエンドを作成しています。MSEgit には、パイプによって git と通信する内部コンソール ウィンドウがあります。Linux では PTY を使用するため、SSH は PTY で鍵のロック解除パスワードを要求します。 Windows では、小さなパスワード入力アプリケーションを作成し、それに応じて SSH_ASKPASS 環境変数を設定しました。 CreateProcess() dwCreationFlags DETACHED_PROCESS が設定された状態で git が開始された場合、SSH はパスワード アプリケーションを呼び出しますが、パスワード入力ウィンドウはフォーカスされず、代わりにタスクバー アイコンが点滅します。 MSEgit にコンソールが接続されていないことを確認するために FreeConsole() が呼び出され、DETACHED_PROCESS ではなく CREATE_NO_WINDOW を使用せずに git が開始された場合、SSH はパスワード アプリケーションを実行しません。



POSIX setsid() に相当する Windows を呼び出す必要があると思います。
DETACHED_PROCESS フラグなしで SSH に SSH_ASKPASS を強制的に使用させるにはどうすればよいですか?
これが不可能な場合、パスワード入力ウィンドウがフォーカスされていることを確認するにはどうすればよいですか?

4

1 に答える 1

0

Windows では、許可を得ない限り、子プロセスは親からフォーカスを奪うことはできません。親は、AllowSetForegroundWindowを呼び出して、そのアクセス許可を提供する必要があります。その後、子プロセスはフォアグラウンドになり、適切にフォーカスを設定できます。

于 2012-06-09T12:37:34.320 に答える