Inno setup 如何在Inno设置中设置自定义.cur或.ani光标?

Inno setup 如何在Inno设置中设置自定义.cur或.ani光标?,inno-setup,Inno Setup,我想用Inno Setup制作一个简单的安装脚本。启动安装程序时,如何加载自定义.cur或.ani光标文件?谢谢 更新:更改标准光标代码可以很好地处理.cur文件,但是当安装程序启动时,动画光标文件(.ani)没有动画。有什么解决办法吗?谢谢。取决于您想要更改的游标。您可能需要更改一些标准游标。或某些(或所有)安装程序窗口控件的默认(正常)光标 更改标准光标 如果不使用一些外部DLL库,您很难仅为安装程序进程更改这些 仅使用Inno设置本身,您可以更改系统游标。但在安装程序运行时,这将影响所有

我想用Inno Setup制作一个简单的安装脚本。启动安装程序时,如何加载自定义
.cur
.ani
光标文件?谢谢


更新:更改标准光标代码可以很好地处理
.cur
文件,但是当安装程序启动时,动画光标文件(
.ani
)没有动画。有什么解决办法吗?谢谢。

取决于您想要更改的游标。您可能需要更改一些标准游标。或某些(或所有)安装程序窗口控件的默认(正常)光标


更改标准光标

如果不使用一些外部DLL库,您很难仅为安装程序进程更改这些

仅使用Inno设置本身,您可以更改系统游标。但在安装程序运行时,这将影响所有其他应用程序

[文件]
来源:“MyCursor.cur”;标志:dontcopy
[守则]
常数
OCR_NORMAL=32512;
函数SetSystemCursor(hcur:LongWord;id:DWORD):BOOL;
外部的SetSystemCursor@user32.dllstdcall';
函数LoadCursorFromFile(lpFileName:string):长单词;
外部的LoadCursorFromFileW@user32.dllstdcall';
功能复制图标(hIcon:LongWord):LongWord;
外部的CopyIcon@user32.dllstdcall';
函数LoadCursor(hInstance:LongWord;lpCursorName:LongWord):LongWord;
外部的LoadCursorA@user32.dllstdcall';
变量
原文:长词;
过程初始化Wizard();
变量
PathToCursorFile:字符串;
光标:长单词;
开始
//还记得最初的习俗吗
原始光标:=复制图标(加载光标(0,OCR_正常));
//加载光标
ExtractTemporaryFile('MyCursor.cur')
PathToCursorFile:=ExpandConstant('{tmp}\MyCursor.cur');
游标:=LoadCursorFromFile(PathToCursorFile);
设置系统光标(光标,OCR_正常);
结束;
过程去初始化设置();
开始
//退出时恢复原始光标
设置系统光标(原始光标,OCR_正常);
结束;

更改部分(或全部)安装程序窗口控件的默认(正常)光标

[文件]
来源:“MyCursor.cur”;标志:dontcopy
[守则]
常数
GCL_HCURSOR=(-12);
函数LoadCursorFromFile(lpFileName:string):长单词;
外部的LoadCursorFromFileW@user32.dllstdcall';
函数SetClassLong(hWnd:hWnd;索引,NewLong:Longint):Longint;
外部的SetClassLongA@user32stdcall';
过程初始化Wizard();
变量
PathToCursorFile:字符串;
光标:长单词;
开始
ExtractTemporaryFile('MyCursor.cur')
PathToCursorFile:=ExpandConstant('{tmp}\MyCursor.cur');
游标:=LoadCursorFromFile(PathToCursorFile);
SetClassLong(WizardForm.NextButton.Handle,GCL_HCURSOR,游标);
结束;
上面的代码更改“下一步”按钮的光标。如果要对所有控件使用相同的自定义光标,可以迭代控件树

procedure-SetControlsCursor(控件:TWinControl;光标:LongWord);
变量
I:整数;
开始
SetClassLong(Control.Handle、GCL\u HCURSOR、游标);
对于I:=0的Control.ControlCount-1 do
开始
如果Control.Controls[I]是TWinControl,那么
开始
SetControlsCursor(TWinControl(Control.Controls[I]),游标);
结束;
结束;
结束;
过程初始化Wizard();
...
开始
...
SetControlsCursor(向导窗体、光标);
结束;

请检查此项。如果我的脚本已经准备好,将有助于提高内容质量。我只想加载自定义游标,但找不到解决方案。一切正常,但“记住原始自定义”函数出现“未知标识符:LoadCursor”错误。所以,我添加了这段代码并解决了问题<代码>函数加载游标(hInstance:LongWord;lpCursorName:LongWord):LongWord;外部的LoadCursorA@user32.dllstdcall'