扩展TestComplete:如何在JS脚本扩展中更改光标?
在TestComplete JS脚本扩展中切换光标(箭头/沙漏)的解决方案
我之前在做TestComplete扩展时也碰到过完全一样的问题——JS脚本扩展确实没法直接调用Win32API,你想到的通过VBS模块封装API再给JS调用的思路完全正确,而且是目前最靠谱的解决方案,我来帮你把这个方案补全,确保能跑通:
步骤1:创建/扩展VBS模块
在你的ScriptExtension项目里新建一个VBScript模块(比如命名为CursorUtils.vbs),或者把代码加到你已有的VBS模块中。
步骤2:加载user32.dll并声明API原型
在VBS模块的Init方法里(如果没有就新建这个方法),加载系统的user32.dll并声明需要的API函数和常量:
Sub Init ' 声明user32.dll中的核心函数 Declare Function SetCursor Lib "user32.dll" (ByVal hCursor As Long) As Long Declare Function LoadCursorA Lib "user32.dll" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long ' 定义系统预定义光标的常量值 Const IDC_ARROW = 32512 Const IDC_WAIT = 32514 End Sub
步骤3:编写切换光标的具体方法
在同一个VBS模块里,添加两个专门用于切换光标的方法:
' 切换为沙漏光标 Sub setCursor2Hourglass SetCursor LoadCursorA(0, IDC_WAIT) End Sub ' 切换回箭头光标 Sub setCursor2Arrow SetCursor LoadCursorA(0, IDC_ARROW) End Sub
步骤4:在Description.xml中暴露方法给JS
打开ScriptExtension的Description.xml配置文件,找到(或新增)<RuntimeObjects>节点,把刚才写的两个方法暴露到一个自定义命名空间下(比如CursorUtils):
<ScriptExtension> <!-- 这里保留你原有的其他配置项 --> <RuntimeObjects> <RuntimeObject Name="CursorUtils"> <Method Name="setCursor2Hourglass" /> <Method Name="setCursor2Arrow" /> </RuntimeObject> </RuntimeObjects> </ScriptExtension>
步骤5:在JS模块中调用切换方法
现在你就可以在JS脚本扩展里直接调用这些方法了,完美解决光标切换的需求:
// 开始耗时的签名同步操作前,切换为沙漏光标 CursorUtils.setCursor2Hourglass(); // 执行你的Keyword-Test签名同步逻辑 // ... 这里是你的耗时代码 ... // 操作完成后,立即切换回箭头光标 CursorUtils.setCursor2Arrow();
一些额外注意事项:
- 确保你的ScriptExtension项目编译后正确安装到TestComplete,否则JS模块会找不到
CursorUtils命名空间 - 如果你的同步操作是异步执行的,一定要记得在异步回调的末尾切换回箭头光标,避免光标一直停留在沙漏状态
LoadCursorA的第一个参数传0,表示直接加载系统预定义的光标,不需要自己创建或加载自定义光标文件
内容的提问来源于stack exchange,提问作者primehunter
相关产品推荐
相关产品推荐

