V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  g00001  ›  全部回复第 3 页 / 共 21 页
回复总数  408
1  2  3  4  5  6  7  8  9  10 ... 21  
2021-10-22 14:46:07 +08:00
回复了 ling516 创建的主题 Windows bat 脚本问题,数组为 for 循环参数,有现成代码吗
没有东西是万能没有缺点的,
Python 虽强,但不是专为 Windows 设计,
Google 一下 “aardio python” 很多人还是会用 aardio + Python 混编。

aardio 里可以嵌入 Python,可以嵌入批处理,还可以嵌入 C 语言。
批处理做很多事还是很强的,每个语言都有他的长处。
2021-10-22 13:43:51 +08:00
回复了 ling516 创建的主题 Windows bat 脚本怎么加密,不想让人看到
可以在 aardio 里嵌入 BAT 生成 EXE 文件,
方法很简单, 例如下面几句代码按 F7 就可以生成 EXE 了:

import console
import process.batch;

//批处理 for 遍历并拆分字符串
var bat = process.batch(`
@echo off
for %%i in (abc,def,xyz) do echo %%i
`)
console.log(bat.read(-1))

console.pause()

这样对付一般的小白用户没问题了,
如果还想增加难度,可以把关键信息用 C 语言实现,批处理可以与 aardio 混编,aardio 又可以方便地调用 C 写的 DLL,例如:

import tcc;
//编译 DLL
tcc.build( "/start.dll" ).code = /***
#include <windows.h>
__declspec(dllexport) int Add( int a,int b )
{
return a + b;
}
***/

//加载 DLL
var dll = raw.loadDll( "/start.dll",,"cdecl" );
//调用 C 函数
var result = dll.Add(12,3);
2021-10-19 12:19:16 +08:00
回复了 uniy 创建的主题 JavaScript web、nodejs 或者 electron 如何调用 c++的 dll 动态库?
aardio 里网页调用原生 DLL 相对简单一些。

嵌入 Electron 组件调用 DLL :
---------------------------

import electron.app;
var theApp = electron.app();

theApp.html = /**
<script>
aardio = require("aardio");
aardio.msgBox("内容","标题");
</script>
**/

theApp.external = {
msgBox = function(text,caption){
::User32.MessageBox(theApp.hwndChrome,text,caption,0)
}
}

theApp.start("/res/index.html");
win.loopMessage();


WebView2 调用 DLL :
---------------------------

import win.ui;
var winform = win.form(text="WebView2")

import web.view;
var wb = web.view(winform);
wb.external = {
msgBox = function(text,caption){
::User32.MessageBox(winform.hwnd,text,caption,0)
}
}

wb.html = /**
<script> aardio.msgBox("内容","标题");</script>
**/

winform.show();
win.loopMessage();


JavaScript 直接调用 DLL :
---------------------------

import win.ui;
var winform = win.form(text="JS 直接调用 WinAPI")

import web.blink.form;
var mb = web.blink.form(winform);
web.blink.export(
user32 = ::User32;//导出 DLL 对象为 JS 全局变量
form = winform; //窗口对象也可以导出为 JS 变量
blink = mb; //mb 自己也可以导出为 JS 变量
);

mb.html = /**
<a href='javascript:
user32.MessageBox(0,"JS 直接调用 WinAPI","user32.MessageBox",0)
'>JS 直接调用 WinAPI 函数试一下</a>
**/

winform.show()
win.loopMessage();
部署非官方的文档网站对于一个需要频繁更新的产品确实会带来不必要的混乱和维护上的困难。

即使有开放的开源协议也不等于可以为所欲为,WinXray 是公共域开源,但是就有人抢注域名并在 GitHub 伪造大量虚假代码提交冒充官方,一个钓鱼项目欺骗了上千 star,你跟这些人讲道德规范?!抱歉他字典里没这东西。

问题不在于什么开源协议,即使你拿掉这个开源协议,明令禁止这样做,结果还是一样会有人这样干。写不出优秀的作品,能被一个优秀作品的作者怒喷 —— 毕竟也能让很多人找到在这个网络的存在感。
2021-09-19 00:22:30 +08:00
回复了 Apple2023 创建的主题 iPhone 百度输入法 VS 搜狗输入法
Windows 10 上只需要一个小小的开源软件 wubiLex ( 900 KB ), 就可以使系统输入法摇身一变为各种输入法,这个软件自带一堆五笔 86 、98 、091 、新世纪方案的各种词库,还可以将微软五笔一键变为小鹤音形、郑码输入法。快捷打开、关闭、切换微软五笔、微软拼音、各种双拼方案、自动安装小鹤双拼方案。提供强悍的用户短语管理、可编程的超级热键功能,各种输入方案的图形反查拆解笔顺动画。

不用再倒腾第三方输入法了。
2021-09-17 21:17:57 +08:00
回复了 ling516 创建的主题 Windows 图片识别软件 OCR,哪个最好 免费开源的
如果是要工具,找个现成的就可以了。
自己写代码生成 EXE 也很简单,其实 Windows 系统自带一个很不错的 OCR 组件,可以免费用, 下面写个例子:例如在屏幕上找到这个帖子的标题,然后把鼠标移动过去,aardio 代码:

import mouse;
import dotNet.ocr;
var ocr = dotNet.ocr();

var ocrResult = ocr.detectScreen()
var x,y = ocrResult.findPoint("图片识别软件 OCR,哪个最好 免费开源的",0.1);
mouse.moveTo(x,y,true)


或者免费开源的 chineseocr_lite 也不错,用 aardio 调用 chineseocr_lite 的例子:

import mouse;
import string.ocrLite;
import string.ocrLite.defaultModels;

var ocr = string.ocrLite();
var ocrResult = ocr.detectScreen()
var x,y = ocrResult.findPoint("图片识别软件 OCR,哪个最好 免费开源的",0.1);
mouse.moveTo(x,y,true)
2021-09-17 12:45:40 +08:00
回复了 ling516 创建的主题 Windows win10 文件夹文件名批量修改工具哪个最好
还是自己写代码好啊,想怎么改就怎么改,
用 aardio 写这种工具非常简单,aardio 自带的范例 “文件操作 / 批量处理” 就有批量重命名工具的源码,可以设定后缀名,文件名匹配规则、甚至是自己指定替换函数。

关键代码其实就是调用 fsys.enum() 函数遍历文件:

import fsys;
fsys.enum( "/指定要遍历的目录路径", "*.*",
function(dir,filename,fullpath,findData){

});

上面的 "*.*" 指定后缀名,支持通配符,可用数组指定多个后缀名,例如 {"*.jpg","*.png"}
在回调函数里存在 filename 变量就是遇到一个文件( 否则就是遇到一个目录 )。

注意:遍历完了以后再实际修改文件名。

如果是中间需要调用 excel 那也很简单,
aardio 读取 Excel 只要加几句代码就搞定了:

import com.excel;
var excel = com.excel();
var sheet = excel.ActiveWorkbook.Sheets(1);

//遍列所有单元格
for(i,values in excel.eachValue(1) ){
//这里 i 是行号,values 是一个数组包含所有列的值
}
2021-09-17 12:16:07 +08:00
回复了 sepwolves 创建的主题 Windows 哪里有 AHK 的中文讨论区?
作为 Windows 开发工具,就说说调用 API 这种简单的事,aardio 代码这样:

var fileTime = {
int lowDateTime;
int highDateTime;
}
::Kernel32.SystemTimeToFileTime( time(),fileTime )



AutoIt 代码这样:

$SYSTEMTIME = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort")
$lpSYSTEMTIME = DllStructGetPtr($SYSTEMTIME)
$LOCALFILETIME=DllStructCreate("dword;dword")
$lpLOCALFILETIME = DllStructGetPtr($LOCALFILETIME)
DllStructSetData($SYSTEMTIME, 1, $Year)
DllStructSetData($SYSTEMTIME, 2, $Month)
DllStructSetData($SYSTEMTIME, 3, _DateToDayOfWeek($Year,$Month,$Day)-1)
DllStructSetData($SYSTEMTIME, 4, $Day)
DllStructSetData($SYSTEMTIME, 5, $Hour)
DllStructSetData($SYSTEMTIME, 6, $Minute)
DllStructSetData($SYSTEMTIME, 7, 0)
DllStructSetData($SYSTEMTIME, 8, 0)
$result = DllCall("kernel32.dll", "long", "SystemTimeToFileTime", "ptr", $lpSystemTime, "ptr", $lpLocalFileTime)
If $result[0] = 0 Then
Local $lastError = DllCall("kernel32.dll", "int", "GetLastError")
SetExtended($lastError[0])
SetError(1)
Return 0
EndIf



AutoHotkey 代码这样:

VarSetCapacity(MyFiletime , 64, 0)
VarSetCapacity(MySystemtime, 32, 0)
DayOfWeek=00
Second=00
Millisecond=00
InsertInteger(Year, MySystemtime, 0)
InsertInteger(Month, MySystemtime, 2)
InsertInteger(DayOfWeek, MySystemtime, 4)
InsertInteger(Day, MySystemtime, 6)
InsertInteger(Hour, MySystemtime,8)
InsertInteger(Min, MySystemtime,10)
InsertInteger(Second, MySystemtime,12)
InsertInteger(Millisecond, MySystemtime,14)
DllCall("SystemTimeToFileTime", Str, MySystemtime, UInt, &MyFiletime)
LocalFiletime := ExtractInteger(MyFiletime, 0, false, 64)
VarSetCapacity(MyUTCFiletime , 64, 0)
DllCall("LocalFileTimeToFileTime", Str, MyFiletime, UInt, &MyUTCFiletime)
UTCFiletime := ExtractInteger(MyUTCFiletime, 0, false, 64)


AutoHotkey,AutoIt 写代码其实啰嗦又费事 ,
当然 AutoHotkey 实现简单的热键功能是不错。


aardio 还提供了一个 ahk 扩展库,可以嵌入 AutoHotkey 代码,aardio 与 AutoHotkey 可以相互调用对方的函数。另外 aardio 还可以嵌入十几种其他的第三方编程语言。
按 // 再切换中文打注释嘛,
倒是有种情况确实需要混用中英文标点,例如中文里输入数值后面打小数点、千位分隔符等等。
有些输入法在数值后面可以自动切换英文标点,但微软五笔就没这功能( 下载一个开源软件 wubiLex 可以解决 )。
2021-09-09 14:53:58 +08:00
回复了 JKeita 创建的主题 问与答 桌面端应用调用 HTML 登录页是怎么实现的。
WebView2 基于 Edge 但与 Edge 完全分离,支持 WIN7,WIN10,WIN11,WIN11 已经自带 WebView2,Office 也会自动安装 WebView2,目前已经有 2 亿台电脑安装了 WebView2,并且未来大概率会完全普及。

使用 WebView2 的软件会公用一个运行时,由系统维护并且会自动更新内核。且 WebView2 的下载安装速度很快,在国内仍然瞬间就能下载安装好。aardio 里的 WebView2 在调用时就会自动检测,如果没有安装会自动安装 —— 瞬间完成用户体验很好。

WebView2 用来开发桌面软件的优势是与本地语言交互的接口很简洁,比 Electron 笨拙的多进程交互方便太多。用 aardio 实现的一个例子:
https://i.v2ex.co/TOPLK3hp.png

如果只是为了做登录窗口,也可以考虑 Sciter JS (支持跨平台) , 可以理解为一个迷你版的 WebView2,而且对桌面开发友好,提供了很多传统网页没有的接口和功能,体积和占用的内存都非常小。Sciter 的前身 HTMLayout,体积更小(只有 2MB ),做出来的界面也非常炫。其实可以用 HTML 写界面的方案很多,aardio 范例里就提供了很多这样的例子:
https://i.v2ex.co/6P6ku110.jpeg

aardio 还可以在任意能执行 JavaScript 的浏览器里通过 aardio.js 调用 aardio 程序导出的函数(调用标准库 web.rpc.externalServer )。
2021-08-24 16:30:13 +08:00
回复了 ghmum 创建的主题 Windows windows10 上有没有快速调节系统缩放的工具
aardio 代码:

// 修改系统 DPI ( 175 / 默认缩放 自动切换 )
import gdi;
import sys.dpi;
sys.dpi.scaling(gdi.getDpiScale()!=1.75 && 175)

// 修改显示器分辨率
import sys.monitor;
sys.monitor.changeMode(pelsWidth=1920,pelsHeight=1080)
2021-08-22 12:00:02 +08:00
回复了 Suigintou 创建的主题 问与答 遇到一个奇怪要求
@JinTianYi456

非常支持和赞赏你的严谨态度,
对待国产语言我们就是要发扬严于律己、宽以待人的精神认真地扒黑历史。

aardio 十几年一直是免费,十几年没有看到过一个字的商业广告,是一个纯公益性的「个人项目」。对于 aardio 这样拥有十几年的历史的一个国产编程语言,以国人的尿性,有黑历史应该早就被扒一万遍死无全尸了吧?

aardio 的核心代码实际也是开源的,使用了哪些开源的模块在文档里都有清楚的说明,这算黑历史不?!
aardio 提供的所有标准库、扩展库全是开源的,还有很多公共域许可证的开源项目,大量的开源代码估计不太适合隐藏黑历史?!

例如 aardio 宣传的可以嵌入或混合 C 语言、C++、VB 、C#、Java 、Python 、Javascript 、Node.Js 、Flash ActionScript 、PHP 、VBScript 、NewLISP 、AutoLISP 、Delphi 、FreeBASIC 、Ruby 、Rust 、Julia 、Nim 、Go 语言、批处理 ......这一堆第三方语言,实现这些功能的扩展库全是开源的,要不你去看看都都借鉴了谁?!

或者 aardio 宣传的 可以嵌入非常多的浏览器控件,例如系统自带的 WebBrowser 、WebView 控件、 以及 WebView2 、WebKit 、Electron 、CEF3 、HTMLayout 、Sciter...... 甚至可以直接调用系统安装的 Chrome 、Chromium Edge 等浏览器写软件界面。而且在网页中调用本地接口、以及 aardio 与浏览器的交互极其方便,例如直接调用 Javascript 函数,并且在 Javascript 中直接回调 aardio 函数,不需要任何复杂的封装和中间件,你甚至可以在 Javascript 中直接调用 WINAPI 函数,实现这些功能的扩展库也全是开源的,要不你也去看看都借鉴了谁?!

回到楼主的技术问题,
至少用 aardio 实现一个简单的资源管理器要不了几句代码:
https://i.v2ex.co/QgG7AXD8.jpeg

这是 aardio 自带范例里的代码,
关键代码是 win.ui.explorer 这个库 —— 也是开源的( 有没有借鉴别人的黑历史就不清楚了,写代码要做到完全不借鉴别人?吓得我都不敢写代码了)。至于要实现自定义的排序,加几句排序代码就可以,上面 imicksoft 已经写了。

单纯说实现这个功能,并没有什么成本。
至于领导的要求合不合理,就不掺和了。
2021-08-19 10:03:13 +08:00
回复了 newee 创建的主题 问与答 拼音输入法使用非常不顺手,有没有什么好用的....
一般形码输入法切换词库较方便,WIN10 可以下一个开源软件 wubiLex —— 可以将系统输入法一键切换为各种五笔、郑码、小鹤音形 …… 自带数十种词库,而且可以自由编辑词库、自定义短语。
2021-08-17 21:23:21 +08:00
回复了 596164296 创建的主题 Windows 如何获取 windows 应用程序界面数据,非简单的使用句柄!
无句柄窗口也不是完全不能控制,
一种方法是使用 UI Automation 或 MSAA ,
举个例子读取 QQ 聊天消息( aardio 代码 )

import winex;
import winex.accObject;
import console;

for hwnd in winex.each( "TXGuiFoundation" ) {

var accObject = winex.accObject.fromWindow(hwnd)
if(accObject){
var accMessage = accObject.find(role="list")
if(accMessage){
for accChild in accMessage.each(){
console.log(accChild.roleText(),accChild.name(),accChild.value())
}
}
}

}

console.pause(true);

还有一种方法是直接窗口截图文字识别, 用 aardio 写个例子:

import winex;
import string.ocrLite;
import string.ocrLite.defaultModels;

var ocr = string.ocrLite(,true);
var hwnd = winex.findExists("窗口标题");
if(!hwnd) return;

var ocrResult = ocr.detectClient(winform.hwnd);
if(ocrResult){

var x,y = ocrResult.findPoint("按钮文本",0.1);
if(x && y){
import mouse;
//无句柄窗口可以直接用 winex.mouse.click() 点击
mouse.moveToWindow(x,y,winform.hwnd);
mouse.click();
}
}
至于你说的 08 年就接触了 aauto —— 并且你当时还觉得很难。
与事实真相冲突:aauto 第一个版本发布于 2011 年。

所以你说后面十多年,把常见的语言都学了一遍,然后打通了任督二脉。
时间线也出现了冲突 —— 怎么凑也凑不足十多年。

任督二脉的事作为故事听着很美,但可惜不是真的。
学 au3 叫苦连天的多了去了,没有一个编程语言「初学者」会觉得容易。
还有很多人觉得 au3 很难,aardio 一看就会了呢。



各种语言用 = 号赋值,分号分隔是很常见的用法,这让你觉得怪和难是吗?!
如你所述的 aardio 代码:

var obj = { name = "value1"; name = "value1" }
---aardio--------------------------------------------------------------------------------------------------

翻译成 au3 要怎么写呢?!倒是在 au3 找到了一个帖子,有人问 au3 怎么实现自定义数据类型、对象、哈希表 …… 该问题经历了 12 年没有得到答案。



作为一个 Windows 开发工具,调用 WINAPI 应当是入门基本功能,
搜了半天找到一段 au3 调用 GetCursorPos 函数的代码:

$tPoint = DllStructCreate("long X; long Y")
DllCall("user32.dll", "none", "GetCursorPos", "ptr", DllStructGetPtr($tPoint))
ConsoleWrite("Cursor X position: " & DllStructGetData($tPoint, "X") & @CR)
ConsoleWrite("Cursor Y position: " & DllStructGetData($tPoint, "Y") & @CR)
---au3-----------------------------------------------------------------------------------------------------

这不要说初学者,估计有深厚编程基础的也看不懂了。



aardio 写同样的代码就非常简单:

var point = {
int x;
int y;
}

::User32.GetCursorPos(point)
每个人的思维模式不一样,你说很难学的东西,在别人眼里可能很容易。
我见过很多人说什么 AutoHotkey , AutoIT, 易语言怎么学都学不会,但是学 aardio 一学就会了。
所以要找到适合自己的语言,没有适合所有人的语言。

另外空口无凭地捧什么或者踩什么都很容易,多敲几下键盘就可以不需要成本。
很多时候还是需要上具体的代码展示一下到底有多简洁,到底有多容易上手比较真实。

用 aardio 一个最大的好处就是不需要学太多的新东西,
就连语法跟 JavaScript 都非常接近,我随手写了几句 aardio 代码,直接复制到 JavaScript 里就可以直接执行,可以看出 aardio 是多么用心地在节省用户的学习成本。

https://i.v2ex.co/6911fCXT.png
不可能 JavaScript 都学不会吧 ?这个世界到处是 JavaScript,要是学不会 JavaScript 那估计都是寸步难行。

再说个具体的需求,
例如在窗口中嵌入微软新出的性能强悍的 WebView2 加载一个网页,
并且在网页 JavaScript 中轻松地调用 aardio 函数,用 aardio 写就这么几句代码:

https://i.v2ex.co/TOPLK3hp.png

要不用其他语言试一下?!

用 aardio 写软件所需的代码非常少。例如开源软件 wubiLex

https://i.v2ex.co/C9j2TDw1.png

https://i.v2ex.co/77bbx5F1.gif

这个软件的体积只有 930 KB, 换其他编程语言可能要十倍的代码了,人生苦短,更少的代码做更多的事不好吗?!
2021-08-11 02:24:26 +08:00
回复了 wildmelon 创建的主题 问与答 开发单个 exe 桌面应用程序,用什么语言、技术合适?
如果原来就会批处理想做图形界面,或者是为了方便的嵌入 WebView,倒是可以试试 aardio

首先说批处理,aardio 可以非常方便的嵌入与混合很多第三方语言,支持 C 语言、C++、VB 、C#、Java 、Python 、Javascript 、Node.Js 、Flash ActionScript 、PHP 、VBScript 、NewLISP 、AutoLISP 、Delphi 、FreeBASIC 、Ruby 、Rust 、Julia 、Nim 、Go 语言、批处理 ...... 这一大堆,当然了,其中就有批处理。

用 aardio 嵌入批处理不仅仅是可以简单的调用执行,可以做到:
1 、通过管道执行批处理,不再有默认的黑窗口,可以方便的替换为图形界面。
2 、可以生成独立的 EXE 文件,不用带一堆批处理文件,可以方便的给批处理传参数。
3 、可以使用模板语法将批处理与 aardio 代码混写,类似 PHP 代码与 HTML 代码混写。

下面是一个简单的例子:
https://i.v2ex.co/0rWwZ010.png

执行效果:
https://i.v2ex.co/9A2C3fFn.gif

再说说 WebView,aardio 里可以非常方便的嵌入很多浏览器组件,系统自带的 WebBrowser 、WebView 控件、 以及 WebView2 、WebKit 、Electron 、CEF3 、HTMLayout 、Sciter...... 甚至可以直接调用系统安装的 Chrome 、Chromium Edge 等浏览器写软件界面。而且在网页中调用本地接口、以及 aardio 与浏览器的交互极其方便。

具体说到 WebView2,微软新出的 Edge(Chromium) 浏览器组件,性能强悍,支持 WIN7,WIN10,WIN 11,而且 WIN 11 已经自带。在 aardio 里调用 WebView2 会自动检测系统是否安装此组件,没有安装会自动安装,这个组件虽然挺大(安装包 95MB),但是下载安装速度极快,分分钟能搞定。比起 Electron 体验好大多。

WebView2 有一个优势就是所有使用 WebView2 的程序可以共用一个系统安装的组件,所以可以生成体积非常小的 EXE 。

下面是 aardio 自带的例子:
https://i.v2ex.co/TOPLK3hp.png

WebView2 的接口真的非常简洁,在网页中就可以非常方便的调用本地函数,比起 Electron 蛋痛的多进程交互省事太多了。
1  2  3  4  5  6  7  8  9  10 ... 21  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5516 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 60ms · UTC 01:39 · PVG 09:39 · LAX 17:39 · JFK 20:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.