重大更新:aardio 调用 .Net 更简洁了
标准库 dotNet 最新版进行了大幅改进,现在调用 .Net 代码更简洁了,在 aardio 中调用 .Net 将会像调用 aardio 自己一样简单。dotNet 库函数文档以及相关范例都进行了同步的更新,代码更简洁,可读性更好,文档也更容易理解和学习了。当然我们将保持一如既往的良好兼容性,原来的写法继续支持,新版只是增强功能和接口,并不改变原来的东西。
看代码体会一下:
import console;
import dotNet;
//导入程序集
var dll = dotNet.load('System');
//导入程序集中的名字空间或类
var System = dll.import('System');
//调用类的静态成员函数,当然也可以这样读写类的其他静态成员属性。
var isValidHost = System.Uri.CheckHostName('www.aardio.com')
//用 System 名字空间下面的类构造对象实例
var uri = System.Uri('https://www.aardio.com/test?q=aardio')
//读或写 .Net 对象的实例属性
console.log( uri.Host )
//调用 .Net 对象实例的成员函数
console.log( uri.GetHashCode() )
//.Net 对象还可以用 tostring 转换为字符串
console.log( tostring(uri) )
console.pause();
在 aardio 中调用 .Net 有一个好处是不用选择 .Net 版本,不论用户系统安装的是哪个版本都会自动兼容。
另外 aardio 支持自内存加载 .Net 编写的DLL,甚至支持直接在 aardio 中写或编译 C# 源代码,这可以让我们非常方便地调用 .Net 的一切,还能生成极小的、可以独立发布的 EXE 文件。
自内存加载 DLL 很简单,示例:
var Interop = dotNet.loadFile($'~\lib\dotNet\.res\bin\Release\Aardio.InteropServices.dll');
只要在文件路径前加上 $ 符号,aardio 就会将这个文件编译并嵌入程序中,发布后就不再需要原来的 DLL 文件了。
再来个 .Net 版 JSON 解析:
import console;
import dotNet.json;
//导入 System 名字空间
var System = dotNet.load('mscorlib').import('System');
//创建 .Net 的 ArrayList 数组
var arrList = System.Collections.ArrayList();
//操作 .Net 对象
arrList.Add(123);
arrList.Add('字符串');
//.Net 对象转换为 JSON
var json = dotNet.json.SerializeObject(arrList);
console.log(json);
//导入 dotNet.json 以后 web.json 会自动支持 .Net对象
console.log(web.json.stringify(arrList));
//这个函数内部也是调用 web.json.stringify
console.dumpJson(arrList);
//JSON 解析为 .Net 对象
var obj = dotNet.json.DeserializeObject(json);
console.log(obj);
console.pause();
调用 UI Automation :
//UI Automation
import process;
process.executeWaitInput('notepad.exe',io.getSpecial(0x25/*_CSIDL_SYSTEM*/,'drivers\etc\HOSTS'));
import dotNet;
//加载 .Net 程序集
var UIAutomationTypes = dotNet.load('UIAutomationTypes');
var UIAutomationClient = dotNet.load('UIAutomationClient');
//导入 .Net 类
var TreeScope = UIAutomationTypes.import('System.Windows.Automation.TreeScope');
var Automation = UIAutomationClient.import('System.Windows.Automation');
var PropertyCondition = UIAutomationClient.import('System.Windows.Automation.PropertyCondition');
//访问 .Net 类的静态成员
var AutomationElement = Automation.AutomationElement;
var desktop = AutomationElement.RootElement;
//查找记事本窗口
var condNotepadClass = Automation.PropertyCondition(AutomationElement.ClassNameProperty,'Notepad')
var notepad = desktop.FindFirst( TreeScope.Children, condNotepadClass)
//查找记事本的编辑框
var condEditClass = Automation.PropertyCondition(AutomationElement.ClassNameProperty,'Edit');
var editBox = notepad.FindFirst( TreeScope.Descendants, condEditClass);
//获取记事本内的文本
var textPattern = editBox.GetCurrentPattern(Automation.TextPattern.Pattern);
var text = textPattern.DocumentRange.GetText(50)
import win.dlg.message;
win.dlg.message().info(text + ' ……')
赞 (0)