我在我公司的代码库中找到了使用ShellExecute
打开默认邮件程序的代码。代码是很久以前编写的,但是我发现它上面有奇怪的行为,只有在未附加调试器时才会出现问题。
if ShellExecute(Handle, PChar('open'), PChar('mailto:donotreply@nonono.com'), nil, nil, SW_SHOWDEFAULT) <= 32 then
begin
//...
end;
以上是代码的相关部分。 Handle
是表单句柄。
要重现此问题,只需创建一个新项目,在其上添加一个按钮,然后在按钮onClick
事件处理程序上调用此代码。还必须没有安装默认邮件,因此Windows将显示一条消息警告。
调试时,消息Z顺序高于应用程序,因此消息框正确显示,用户可以关闭此消息。 不调试时,消息Z order低于应用程序,因此用户必须使用alt + tab查看该消息。
我没有足够的知识来了解正在发生的事情,也没有说明这种行为是否正确。
我能做些什么才能以比我的应用程序更高的Z顺序正确显示消息框?
此代码是否已弃用?我是否应该采取不同的方式来实现这一目标,如果是这样,怎么做?