重大更新: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 对象转换为 JSONvar json = dotNet.json.SerializeObject(arrList);console.log(json);
//导入 dotNet.json 以后 web.json 会自动支持 .Net对象console.log(web.json.stringify(arrList));
//这个函数内部也是调用 web.json.stringifyconsole.dumpJson(arrList);
//JSON 解析为 .Net 对象var obj = dotNet.json.DeserializeObject(json);console.log(obj);
console.pause();

调用 UI Automation :

//UI Automationimport 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)

相关推荐