gpt4 book ai didi

delphi - 如何在 Windows 任务栏中显示 MessageBox 而不显示应用程序图标?

转载 作者:行者123 更新时间:2023-12-03 19:02:03 26 4
gpt4 key购买 nike

我有一个注入(inject)进程的 dll,这个 dll 包含一个我想使用的表单 MessageBox() (或其他类型的对话框)以提醒用户有关某些操作。

例如:

Application.MessageBox('successful operation!','Information',mb_Ok+mb_IconInformation);

发生这种情况,每次显示,在Windows任务栏中也显示目标应用程序的图标,我不想要这个。

然后我想在任务栏中显示这些消息而不显示应用程序图标。
这个怎么做?

最佳答案

在 Delphi 7 中,Application.MessageBox()调用 Win32 API MessageBox() 指定 Application.Handle 的函数作为所有者窗口 1。

在 DLL 中,Application.Handle默认为 0,所以你的 MessageBox对话框正在显示而没有分配给它的所有者窗口。这就解释了为什么它能够出现在任务栏上,因为那里只能出现一个顶级的无主窗口(具有 APP_EX_APPWINDOW 扩展样式)。

因此,最简单的解决方案是调用 Win32 API MessageBox()自己运作,指定所有者HWND属于您已将 DLL 注入(inject)的应用程序。或者,如果您想继续使用 Application.MessageBox() , 分配这样一个 HWNDApplication.Handle DLL 注入(inject)后的属性。

但无论哪种方式,请确保调用 MessageBox() 的线程附加到所选所有者的消息队列HWND .如果您调用MessageBox()在单独的线程中,使用 AttachThreadInput() 在调用 MessageBox() 之前制作该附件,然后再次删除 MessageBox() 之后的附件退出。

1:在以后的Delphi版本中,Application.MessageBox使用 Application.OnGetActiveFormHandle 事件,Win32 GetActiveWindow() 函数和 Win32 GetLastActivePopup() 函数(按此顺序)在使用 Application.Handle 之前找到合适的所有者窗口.

关于delphi - 如何在 Windows 任务栏中显示 MessageBox 而不显示应用程序图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com