【注意】请勿设计任何可能侵犯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参数访问动作变量。
image.png

参数

【脚本内容】要运行的c#代码。

C#代码中必须包含一个Exec静态函数,接受IStepContext类型的参数,参考如下示例:

  1. // 引用必要的命名空间
  2. using System.Windows.Forms;
  3. // Quicker将会调用的函数
  4. public static void Exec(Quicker.Public.IStepContext context){
  5. var oldValue = context.GetVarValue("varName"); // 读取动作里的变量值
  6. MessageBox.Show(oldValue as string);
  7. context.SetVarValue("varName", "从脚本输出的内容。"); // 向变量里输出值
  8. }

【引用DLL库】脚本内容需要引用(reference)的其他.Net库文件的完整路径。 每行写一个。
【允许缓存程序集】是否允许缓存代码编译后的程序集,以方便下次运行时直接加载程序集,提升启动速度。

  • 程序集缓存每次升级版本会丢弃。
  • 缓存目录为Windows临时文件目录。

【执行线程】选择使用前台线程(UI线程)、后台线程来运行脚本,或由Quicker自动选择线程。

【失败后停止】c#运行错误时,停止当前动作。

调用

IStepContext 接口

Exec函数需要接收一个IStepContext接口类型的参数,从而实现Quicker动作变量的读写。
接口的声明如下:

  1. namespace Quicker.Public
  2. {
  3. /// <summary>
  4. /// 脚本参数接口
  5. /// </summary>
  6. public interface IStepContext
  7. {
  8. /// <summary>
  9. /// 获取变量值
  10. /// </summary>
  11. /// <param name="varName">变量名</param>
  12. /// <returns>返回的结果类型,根据需要进行类型转换。</returns>
  13. object GetVarValue(string varName);
  14. /// <summary>
  15. /// 设置变量值
  16. /// </summary>
  17. /// <param name="varName">变量名</param>
  18. /// <param name="value">值,需要根据变量的类型传入合适类型的值</param>
  19. void SetVarValue(string varName, object value);
  20. }
  21. }

GetVarValue读取变量值,SetVarValue输出变量值。请在必要时进行类型转换。 词典,列表,不需要

错误处理

如果遇到了错误,直接抛出异常即可。

引用外部dll文件

  1. //css_reference office.dll;
  2. //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(应用程序集缓存)中加载。

  1. //css_dir C:\Windows\Microsoft.NET\assembly\GAC_MSIL\**
  2. //css_ref UIAutomationClient.dll //<---要引用的DLL

关于更多的指令说明文档,请参考:https://www.cs-script.net/cs-script/help-legacy/Directives.html

带有界面的C#脚本注意事项

  • 如果在c#代码中使用WPF窗体:
    • 应该选择使用“前台线程”运行脚本;
    • 脚本中如果使用ShowDialog()以模态方式显示窗体,将会暂时不能操作其它Quicker窗口。
  • 如果在c#代码中使用Winform窗体:
    • 应该选择使用“后台线程”运行脚本。
    • 如果使用前台线程运行,可能会出现奇怪的现象:输入框无法输入汉字。

低权限运行模式

代码将传送到LPAgent进程中执行。此时因为跨进程,代码中无法访问动作中的其它变量,只能传递简单的文本参数和返回值。

image.png

输入参数

【脚本内容】
要执行的脚本内容。
需要在代码中声明public static string Exec(string paramValue)方法。
该方法的paramValue用于接收当前步骤中“参数值”中传入的内容。返回的值将通过“返回内容”输出到步骤。

  1. //.cs 文件类型,便于外部编辑时使用
  2. // 引用必要的命名空间
  3. // Quicker将会调用的函数
  4. public static string Exec(string paramValue)
  5. {
  6. return "要返回的内容";
  7. }

【参数值】
传递给Exec(string paramValue)方法的paramValue参数。

【引用库】
需要在c#中额外引用的dll文件的路径,每行一个。(已加入全局程序集缓存(GAC)的,可以直接写dll文件名,否则写dll文件的完整路径。)

【等待返回】
是否等到Exec(string paramValue)方法执行完毕,并获取其返回值(从“返回内容”中输出)。 如果不等待,则“返回内容”输出为空。

输出参数

【返回内容】在启用“等待返回”选项时,输出Exec(string paramValue)方法的返回值。