You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抑制libsagui DLL弹窗消息或设置错误回调(Delphi+Brook框架)

解决libsagui DLL弹出MessageBox的问题(Delphi+Brook Framework场景)

针对你遇到的libsagui在错误场景(比如端口绑定失败)弹出无法控制的MessageBox问题,提供几个可行的解决方案:

1. 自定义编译libsagui,移除弹窗逻辑

libsagui是开源项目,直接修改源码并重新编译是最彻底的方案:

  • 找到源码中调用MessageBox的错误处理代码(比如端口绑定失败的分支),将弹窗调用替换为错误码返回,或者添加自定义的错误回调机制。
  • 检查libsagui的编译配置,看是否有现成的宏定义(比如SGUI_DISABLE_MESSAGE_BOXES)可以直接禁用弹窗输出,开启该宏后重新编译DLL即可。

2. 用Delphi API Hook拦截系统弹窗

通过Hookuser32.dll中的MessageBox函数,拦截libsagui的弹窗请求:

type
  TMessageBoxFunc = function(hWnd: HWND; lpText, lpCaption: LPCWSTR; uType: UINT): Integer; stdcall;

var
  OldMessageBoxW: TMessageBoxFunc;

function HookMessageBoxW(hWnd: HWND; lpText, lpCaption: LPCWSTR; uType: UINT): Integer; stdcall;
begin
  // 可选:在这里记录错误信息到日志,或者触发自定义错误回调
  Result := IDOK; // 直接返回,不显示弹窗
end;

procedure HookMessageBox;
begin
  OldMessageBoxW := TMessageBoxFunc(GetProcAddress(GetModuleHandle('user32.dll'), 'MessageBoxW'));
  if Assigned(OldMessageBoxW) then
    WriteProcessMemory(GetCurrentProcess(), @OldMessageBoxW, @HookMessageBoxW, SizeOf(TMessageBoxFunc), nil);
end;
  • 注意:Hook系统API时建议做调用来源校验,避免影响应用中其他模块的正常弹窗需求。

3. 提前检测端口可用性

在启动Brook服务器前,先自行检测目标端口是否被占用,提前处理错误:

function IsPortInUse(APort: Word): Boolean;
var
  Socket: TSocket;
  Address: TSockAddrIn;
begin
  Result := False;
  Socket := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if Socket = INVALID_SOCKET then Exit;
  try
    ZeroMemory(@Address, SizeOf(Address));
    Address.sin_family := AF_INET;
    Address.sin_port := htons(APort);
    Address.sin_addr.S_addr := INADDR_ANY;
    if bind(Socket, PSockAddr(@Address), SizeOf(Address)) = SOCKET_ERROR then
      Result := (WSAGetLastError() = WSAEADDRINUSE);
  finally
    closesocket(Socket);
  end;
end;
  • 调用该函数,若返回True则提示用户端口被占用,不启动服务器,从源头避免libsagui触发弹窗。

4. 扩展Brook Framework的错误处理

检查Brook Framework的类结构,看是否有可扩展的错误处理接口:

  • 查看TBrookServer或相关核心类是否提供OnError事件、虚方法,通过重写或绑定事件来捕获错误,替代libsagui的默认弹窗逻辑。

内容的提问来源于stack exchange,提问作者NemoPeti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:33:25