Git在Windows上如何使用SSH_ASKPASS?

3
我正在为Linux和Windows编写一个图形化的git前端(MSEgit), 基于MSEide+MSEgui。 MSEgit有一个内部控制台窗口,通过管道与git通信。在Linux上,它使用PTY,因此SSH会在PTY上询问密钥解锁密码。
在Windows上,我编写了一个小型密码输入应用程序,并相应地设置了SSH_ASKPASS环境变量。
如果使用CreateProcess() dwCreationFlags DETACHED_PROCESS启动git,则SSH调用密码应用程序,但密码输入窗口不会被聚焦,而是闪烁任务栏图标。
如果调用FreeConsole()以确保没有附加到MSEgit的控制台并且使用CREATE_NO_WINDOW而不是DETACHED_PROCESS启动git,则SSH不会运行密码应用程序。
我假设需要调用Windows版本的POSIX setsid()。
如何强制SSH在没有DETACHED_PROCESS标志的情况下使用SSH_ASKPASS?
如果不可能,如何确保密码输入窗口聚焦?

使用 Git for Windows 2.x 时似乎不再需要这个了。 - npostavs
1个回答

0
在Windows上,子进程不允许从父进程那里夺取焦点,除非它得到了许可。父进程应该调用AllowSetForegroundWindow来提供这个许可。然后子进程就可以成为前台进程并适当地设置其焦点。

这样可以让密码窗口获得焦点,谢谢。据我所知,如果由前台进程创建,则子进程应该获得焦点,MSDN:“只有满足以下条件之一的进程才能设置前景窗口:进程是前台进程。 该进程是由前台进程启动的。[...]”。看起来DETACHED_PROCESS阻止了这个规则。 - Martin Schreiber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接