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

Inno Setup点击安装程序外区域时鼠标光标不切换问题咨询

Inno Setup 安装向导窗口内显示自定义光标解决方案

问题根源

你当前的实现直接调用SetSystemCursor全局修改系统级默认光标,因此只要安装程序未退出,所有窗口场景下都会显示自定义光标,不符合需求。推荐通过响应向导窗口的WM_SETCURSOR消息实现仅窗口内生效的自定义光标效果,无需全局修改系统配置,也能避免安装程序异常崩溃后系统光标无法恢复的问题。

修正后完整代码

[Code]
const
  OCR_NORMAL = 32512;
  WM_SETCURSOR = 32;
  GWL_WNDPROC = -4;

function LoadCursorFromFile(lpFileName: string): LongWord;
  external 'LoadCursorFromFileW@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: LongWord; hWnd: LongWord; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
  external 'CallWindowProc@user32.dll stdcall';
function SetWindowLongPtr(hWnd: LongWord; nIndex: Integer; dwNewLong: LongWord): LongWord;
  external 'SetWindowLongPtrW@user32.dll stdcall';
function SetCursor(hCursor: LongWord): LongWord;
  external 'SetCursor@user32.dll stdcall';

var
  CustomCursor: LongWord;
  OldWndProc: LongWord;

// 向导窗口子类化消息处理函数
function WndProc(hWnd: LongWord; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
  if Msg = WM_SETCURSOR then
  begin
    // 鼠标在当前向导窗口内,设置自定义光标
    SetCursor(CustomCursor);
    Result := 1;
    Exit;
  end;
  // 其他消息走原有处理逻辑,窗口外自动使用系统默认光标
  Result := CallWindowProc(OldWndProc, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
var
  PathToCursorFile: string;
begin
  // 提取自定义光标文件到临时目录
  ExtractTemporaryFile('MyCursor.cur');
  PathToCursorFile := ExpandConstant('{tmp}\MyCursor.cur');
  // 加载自定义光标
  CustomCursor := LoadCursorFromFile(PathToCursorFile);
  // 子类化向导窗口,接管消息处理
  OldWndProc := SetWindowLongPtr(WizardForm.Handle, GWL_WNDPROC, @WndProc);
end;

procedure DeinitializeSetup();
begin
  // 恢复窗口原有处理逻辑
  if OldWndProc <> 0 then
    SetWindowLongPtr(WizardForm.Handle, GWL_WNDPROC, OldWndProc);
end;

改动说明

  • 替换了全局修改系统光标的逻辑,改为仅在向导窗口消息触发时设置自定义光标,窗口外自动恢复系统默认光标,无需额外监听窗口外点击事件
  • 修复了原代码中LoadCursorFromFile参数错误的问题:原代码硬编码了本地开发路径,实际应该使用提取到临时目录的光标文件路径
  • 新增了窗口子类化逻辑,完全兼容Inno Setup原有向导的所有交互逻辑
  • 彻底避免了安装程序异常退出后系统光标无法自动恢复的风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:03