我需要在启动和关闭时将声卡静音/取消静音。
我找到了一些代码来完成这项工作,但 Windows 通常会突然关闭,并且声音永远不会静音。
有人可以告诉我如何暂停关闭足够长的时间以使我的应用程序静音吗?我可以使用一个简单的 TTimer 来暂停应用程序足够长的时间,以使其运行静音,然后让 Windows 继续关闭。
我如何让 Windows 等待?
我注意到,如果我让 Firefox 保持运行并尝试关闭,Windows 会停止并显示一条消息:“这些程序正在阻止窗口关闭...”,并且需要单击才能强制 Firefox 关闭。我需要找到那个。
从 Windows Vista 开始,如果您向操作系统注册关闭原因字符串或者您的应用程序具有顶级窗口,则操作系统将无限期地等待您的程序从WM_QUERYENDSESSION
在显示阻止应用程序屏幕时 - 或者直到用户选择强制结束程序。
下面的示例代码模拟了 45 秒的等待Sleep
。在等待的前五秒内,操作系统会耐心等待,然后才会显示全屏 UI。立即显示屏幕的唯一方法是立即返回 falseWM_QUERYENDSESSION
。但在这种情况下,您将无法恢复关闭。
有关 Vista 及更高版本操作系统关闭行为的详细信息,请参阅文档.
type
TForm1 = class(TForm)
..
protected
procedure WMQueryEndSession(var Message: TWMQueryEndSession);
message WM_QUERYENDSESSION;
..
...
function ShutdownBlockReasonCreate(hWnd: HWND; Reason: LPCWSTR): Bool;
stdcall; external user32;
function ShutdownBlockReasonDestroy(hWnd: HWND): Bool; stdcall; external user32;
procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
const
ENDSESSION_CRITICAL = $40000000;
begin
Message.Result := LRESULT(True);
if ((Message.Unused and ENDSESSION_CRITICAL) = 0) then begin
ShutdownBlockReasonCreate(Handle, 'please wait while muting...');
Sleep(45000); // do your work here
ShutdownBlockReasonDestroy(Handle);
end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)