【问题标题】:Preventing C executable from going into foreground防止 C 可执行文件进入前台
【发布时间】:2021-12-07 14:01:11
【问题描述】:

我在 Windows 上用 C 语言编写了一个笑话程序,它在后台启动并弹出愚蠢的窗口。这是一个有趣的项目,但它提出了一个问题/好奇心。

这是 C 代码:

    #include <windows.h>
    #include <unistd.h>
    #include <stdbool.h>

    //IMPORTANT!!! You should compile this program using the -mwindows specification on GCC.

    int main(void){

      while(true){
    
        MessageBeep(MB_OK);
        MessageBox(0 , "Blip" , NULL , MB_OK);
        sleep(5);
        MessageBeep(MB_OK);
        MessageBox(0 , "Blop" , NULL , MB_OK);
        sleep(5);
        MessageBeep(MB_OK);
        MessageBox(0 , "Blup" , NULL , MB_OK);
        sleep(5);
    
      }

      return 0;


    }

我使用 GCC 编译了这个,使用 -mwindows 选项使可执行文件在后台打开,而不是作为控制台可执行文件。这一切都很好,花花公子。但是,在这个 .exe 运行时打开任务管理器,我注意到程序在睡眠时会停留在后台,但它会在任务管理器中跳转到前台当弹出窗口打开时。有什么办法可以防止这种情况发生吗?有什么方法可以在打开弹出窗口时将 .exe 保留在后台?我认为这会使程序更有趣。

在同样的注意,奖金相关的问题上,有没有办法更改在任务管理器中显示的可执行文件的名称?这会让 .exe 更烦人。

【问题讨论】:

    标签: c windows gcc taskmanager


    【解决方案1】:

    由于您使用的是MessageBox,请传递标志MB_SERVICE_NOTIFICATION。这个标志不再像它所说的那样做,但是通过csrss.exe代理它的代码仍然存在,并且与桌面关联的应用程序仍然可以从@987654325调出MessageBox窗口(没有别的) @ 通过传递这个标志。

    【讨论】:

    • 这绝对是一个非常聪明的把戏!应该做得很好。但我想知道是否有一种不那么棘手和更正统/结构化的方式来做到这一点。
    • @Noumeno:有,你可以将你的代码加载到一个已经运行的进程中(不是为了装腔作势)。
    • 您能否在答案中对此进行扩展?我觉得这个话题很有趣
    • @Noumeno:你知道一些组装吗?无论如何,非常大。
    • 啊啊啊啊……我现在明白了。还有什么办法吗?程序如何留在后台?喜欢 Skype?
    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 2011-11-23
    • 2014-08-20
    • 2019-07-26
    • 1970-01-01
    • 2017-12-28
    • 2016-06-03
    相关资源
    最近更新 更多