我正在为
基于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?
如果这是不可能的,我如何确保密码输入窗口是焦点?
问问题
3953 次
1 回答
0
在 Windows 上,除非获得许可,否则不允许子进程将焦点从父进程中移开。父级应调用AllowSetForegroundWindow来提供该权限。然后子进程可以成为前台并适当地设置其焦点。
于 2012-06-09T12:37:34.320 回答