【注意】请勿设计任何可能侵犯Quicker软件或第三方权益的代码或其他恶意代码。如有违反将直接停用Quicker帐号,请知悉。
通过运行C#代码实现更高级的功能。
此功能仅限对C#熟悉的用户谨慎使用。
此功能使用cs-script组件实现,参考:https://github.com/oleg-shilo/cs-script.net-framework 为减小安装包,仅引用了CS-Script.lib,支持C#5.0语法。
运行模式
普通模式
C# 代码在Quicker的进程中执行,可以访问动作的变量等信息。
因为Quicker会自动提权运行,所以在Quicker进程中,无法通过Com接口访问和控制第三方程序。
低权限模式 (1.33.26+版本增加)
C# 代码传入一个低权限模式运行的代理进程 (LPAgent)中执行。 这时候因为跨越进程,无法访问Quicker动作中的变量等信息,只能进行简单的文本变量传递。
请注意,两种模式Exec方法的声明不同,不支持混用。
普通权限模式
代码直接在Quicker进程中执行。这时候可以通过context参数访问动作变量。
参数
【脚本内容】要运行的c#代码。
C#代码中必须包含一个Exec静态函数,接受IStepContext
类型的参数,参考如下示例:
// 引用必要的命名空间
using System.Windows.Forms;
// Quicker将会调用的函数
public static void Exec(Quicker.Public.IStepContext context){
var oldValue = context.GetVarValue("varName"); // 读取动作里的变量值
MessageBox.Show(oldValue as string);
context.SetVarValue("varName", "从脚本输出的内容。"); // 向变量里输出值
}
【引用DLL库】脚本内容需要引用(reference)的其他.Net库文件的完整路径。 每行写一个。
【允许缓存程序集】是否允许缓存代码编译后的程序集,以方便下次运行时直接加载程序集,提升启动速度。
- 程序集缓存每次升级版本会丢弃。
- 缓存目录为Windows临时文件目录。
【执行线程】选择使用前台线程(UI线程)、后台线程来运行脚本,或由Quicker自动选择线程。
【失败后停止】c#运行错误时,停止当前动作。
调用
IStepContext 接口
Exec函数需要接收一个IStepContext接口类型的参数,从而实现Quicker动作变量的读写。
接口的声明如下:
namespace Quicker.Public
{
/// <summary>
/// 脚本参数接口
/// </summary>
public interface IStepContext
{
/// <summary>
/// 获取变量值
/// </summary>
/// <param name="varName">变量名</param>
/// <returns>返回的结果类型,根据需要进行类型转换。</returns>
object GetVarValue(string varName);
/// <summary>
/// 设置变量值
/// </summary>
/// <param name="varName">变量名</param>
/// <param name="value">值,需要根据变量的类型传入合适类型的值</param>
void SetVarValue(string varName, object value);
}
}
GetVarValue读取变量值,SetVarValue输出变量值。请在必要时进行类型转换。 词典,列表,不需要
错误处理
如果遇到了错误,直接抛出异常即可。
引用外部dll文件
//css_reference office.dll;
//css_reference C:\Program Files ((x86))\TestProj\PInvoke.Kernel32.dll
所有// css_ *指令都应通过将分隔符加倍来转义任何内部CS-Script分隔符。 例如,’’script(today).cs’的// css_include应该转义为括号,因为它们是指令定界符。 因此,正确的语法应如下所示:’//css_include script((today)).cs’
.NET 自带的库通常应该可以直接通过using 命名空间的方式使用。 如果遇到找不到名称的问题,可以使用如下代码从系统GAC(应用程序集缓存)中加载。
//css_dir C:\Windows\Microsoft.NET\assembly\GAC_MSIL\**
//css_ref UIAutomationClient.dll //<---要引用的DLL
关于更多的指令说明文档,请参考:https://www.cs-script.net/cs-script/help-legacy/Directives.html
带有界面的C#脚本注意事项
- 如果在c#代码中使用WPF窗体:
- 应该选择使用“前台线程”运行脚本;
- 脚本中如果使用ShowDialog()以模态方式显示窗体,将会暂时不能操作其它Quicker窗口。
- 如果在c#代码中使用Winform窗体:
- 应该选择使用“后台线程”运行脚本。
- 如果使用前台线程运行,可能会出现奇怪的现象:输入框无法输入汉字。
低权限运行模式
代码将传送到LPAgent进程中执行。此时因为跨进程,代码中无法访问动作中的其它变量,只能传递简单的文本参数和返回值。
输入参数
【脚本内容】
要执行的脚本内容。
需要在代码中声明public static string Exec(string paramValue)
方法。
该方法的paramValue
用于接收当前步骤中“参数值”中传入的内容。返回的值将通过“返回内容”输出到步骤。
//.cs 文件类型,便于外部编辑时使用
// 引用必要的命名空间
// Quicker将会调用的函数
public static string Exec(string paramValue)
{
return "要返回的内容";
}
【参数值】
传递给Exec(string paramValue)
方法的paramValue
参数。
【引用库】
需要在c#中额外引用的dll文件的路径,每行一个。(已加入全局程序集缓存(GAC)的,可以直接写dll文件名,否则写dll文件的完整路径。)
【等待返回】
是否等到Exec(string paramValue)
方法执行完毕,并获取其返回值(从“返回内容”中输出)。 如果不等待,则“返回内容”输出为空。
输出参数
【返回内容】在启用“等待返回”选项时,输出Exec(string paramValue)
方法的返回值。