3

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



我假设应该调用 POSIX setsid() 的 Windows 等效项。
如何在没有 DETACHED_PROCESS 标志的情况下强制 SSH 使用 SSH_ASKPASS?
如果这是不可能的,我如何确保密码输入窗口是焦点?

4

1 回答 1

0

在 Windows 上,除非获得许可,否则不允许子进程将焦点从父进程中移开。父级应调用AllowSetForegroundWindow来提供该权限。然后子进程可以成为前台并适当地设置其焦点。

于 2012-06-09T12:37:34.320 回答