允许后台应用程序设置不同进程的前台窗口

 ppqq21 发布于 2023-01-14 16:12
  • php
  • 首先,我知道这是一个有争议的讨论,但我希望我们能保持这种技术.

    我有一个在后台启动的应用程序,我不知何故希望它能够激活/带来在不同的进程中聚焦窗口.但是,即使我要激活其窗口的进程调用了AllowSetForegroundWindow(ASFW_ANY),调用SetForegroundWindow总是会失败.

    原因是(IMO)启动应用程序是后台进程,并且由于它没有收到输入,因此不允许设置前台窗口.所以一切都出现在任务列表中,但没有显示.

    所以我尝试创建一个虚拟窗口来接收输入,该输入随意关闭,然后能够成功调用SetForegroundWindow.但即使是我显示的虚拟窗口也会在后台显示.

    但是,如果我打电话

    AttachThreadInput(
        GetWindowThreadProcessId(GetForegroundWindow(), NULL),
        GetCurrentThreadId(), TRUE);
    

    创建虚拟窗口前,在前景确实是创建的窗口,我可以以后在不同的进程,其作品叫SetForegroundWindow一个不同的HWND.

    但是:如果我不创建虚拟窗口,尽管我使用AttachThreadInput,SetForegroundWindow仍然返回零.

    我不明白为什么如果我创建一个自己的Window(并且之后成功为其他窗口),AttachThreadInput hack成功,但如果我不首先创建自己的窗口则不成功.

    我的后台进程如何在创建虚拟窗口的情况下在不同进程中的另一个窗口上调用SetForegroundWindow ?

    [*]后台应用程序实际上是gpg-agent.exe,只要请求密码,就会调用pinentry.exe(我的应用程序).pinentry.exe(作为后台进程运行)必须从另一个正在运行的应用程序请求密码,因此它必须将其窗口置于前台...

    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有