Page 1 of 2
ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 20 Sep 2014, 14:17
by tmplinshi
ReadSettings.ahkCode: Select all
; ==============================================================================
; 功能: 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
; (ini 文件名与脚本文件同名)
; ==============================================================================
/*
; 示例:
ReadSettings( { x : ""
, y : ""
, key3: "默认值" } )
Gui, Add, Edit, w300 vx , % x
Gui, Add, Edit, wp vy , % y
Gui, Add, Edit, wp vkey3, % key3
Gui, Show
Return
GuiClose:
ExitApp
*/
; ==============================================================================
ReadSettings(obj_default = "") {
static iniFile := SubStr(A_ScriptFullPath, 1, -4) ".ini"
static obj_keyList := {}
global
local data, pos, k, v
; =================================
; 脚本退出时自动保存 ini
; =================================
static _ := { base: {__Delete: "ReadSettings"} }
If !_ {
Gui, Submit, NoHide
For k, v in obj_keyList
data .= k "=" %k% "`r`n"
If data
IniWrite, % data, % iniFile, Settings
Return
}
; =================================
; 读取 ini
; =================================
For k, v in obj_default
%k% := v, obj_keyList[k] := ""
If FileExist(iniFile) {
IniRead, data, % iniFile, Settings
If data {
Loop, Parse, data, `n, `r
If ( pos := InStr(A_LoopField, "=") )
k := SubStr(A_LoopField, 1, pos-1)
, v := SubStr(A_LoopField, pos+1)
, obj_keyList[k] := "", %k% := v
}
}
}
Code: Select all
ReadSettings( { x : ""
, y : ""
, key3: "默认值" } )
Gui, Add, Edit, w300 vx , % x
Gui, Add, Edit, wp vy , % y
Gui, Add, Edit, wp vkey3, % key3
Gui, Show
Return
GuiClose:
ExitApp
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 20 Sep 2014, 20:11
by huyaowen
想不到实际应用的场景呢。
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 23 Sep 2014, 03:11
by tmplinshi
好用得很,谁用谁知道
![Mr. Green :mrgreen:](./images/smilies/icon_mrgreen.gif)
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 23 Sep 2014, 09:25
by arcticir
不如直接半INI半脚本算了
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 23 Sep 2014, 09:27
by tmplinshi
那是什么意思
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 23 Sep 2014, 10:35
by arcticir
我记得曾经跟你讨论过。
即能当脚本,又能当INI读写。
HY脚本的基本格式。
Code: Select all
/*
[Settings]
A=
[End]
*/
MsgBox,测试
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 23 Sep 2014, 10:46
by tmplinshi
哦,这个意思。这种方法我一直在用。但是如果你要编译成 exe 给别人用,还是得用 ini 文件。
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 23 Sep 2014, 23:58
by arcticir
直接EXE改名,代码保密就混淆下。
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 24 Sep 2014, 00:13
by tmplinshi
那是一个办法,但是不编译有诸多不便:
- 不容易设置图标(是的,用 Resource Hacker 可以修改。)
- 如果脚本引用了一堆函数文件,还有一些图片,你就得发给别人一堆文件(是的,可以合并这些文件。)
- ...
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 24 Sep 2014, 00:33
by tmplinshi
其实,你发现了没——“半INI半脚本”同样也是要读写ini。
也就是说你仍然需要写 IniRead/IniWrite,或者用其他的 Ini 函数,或者用这个ReadSettings()。
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 24 Sep 2014, 03:15
by arcticir
子目录加ZIP,什么叫发一堆。
第二楼明显在打第一的脸。
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 24 Sep 2014, 03:29
by tmplinshi
如果脚本里有这几行:
Code: Select all
#Include <WinHttpRequest>
#Include <UriDecode>
#Include <JSON_ToObj>
#Include <Class_ImageButton>
#Include <Class_CTLCOLORS>
不编译的话,不是要发给别人上面五个文件吗?(当然了,可以进行合并)
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 24 Sep 2014, 04:09
by arcticir
再多也无所谓啊,反正放LIB二级目录。
一个AHKEXE,一个脚本,然后两三个配置文件夹,很清爽啊
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 24 Sep 2014, 19:51
by amnesiac
arcticir wrote:我记得曾经跟你讨论过。
即能当脚本,又能当INI读写。
HY脚本的基本格式。
Code: Select all
/*
[Settings]
A=
[End]
*/
MsgBox,测试
对于中文用户不建议这么做。
因为内置的 INI 函数只支持 ASCII 和 UTF-16 两种编码的文件。
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 24 Sep 2014, 21:01
by arcticir
所以我所有脚本都默认UTF-16
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 25 Sep 2014, 02:58
by RobertL
@arcticir @tmplinshi
arcticir wrote:直接EXE改名,代码保密就混淆下。
如何
混淆?
用你的代码风格吗?
也可以直接把配置文件做成
.ahk,使用
#Include *i加载吧?
没实践过..
tmplinshi wrote:不容易设置图标(是的,用 Resource Hacker 可以修改。)
谢谢推荐。
amnesiac wrote:内置的 INI 函数只支持 ASCII 和 UTF-16 两种编码的文件。
幸好我没大依赖,自己读文件转
obj多好..不考虑直接配置
ini的话,用
json啥的也方便
(我在用@Coco的SerDes() - AHK object (de)serialization,其他有什么推荐的没?)..
回头可以单独开贴,说说如何发布/部署..
或者,固定个话题讨论下。
比如,各自用过的Json库的优劣..
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 25 Sep 2014, 03:40
by arcticir
去把脚本区翻一遍。
把INI改成AHK什么的,也只有你能想出来。
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 25 Sep 2014, 03:41
by tmplinshi
脚本即配置 代码混淆
Posted: 25 Sep 2014, 03:49
by RobertL
@arcticir
脚本即配置,而且直接执行(不考虑编译的话),整个脚本就是一个大函数,命名空间都省了..我觉得完全可行..
@tmplinshi
嗯,谢谢,看后再分析..
粗看就是混淆命名,感觉比较低端呀..
可以借鉴下思想,和提及的其他成熟混淆方案。
感觉,其中能解析出变量名、标签名、函数名的功能有用..不过都能到这步了,再混淆下流程应该不是问题..
Re: ReadSettings() - 读取 ini 文件的 [Settings] 区段,脚本退出时自动保存
Posted: 25 Sep 2014, 03:54
by arcticir
1 写上路径 #Include 什么格式都认
2 现在讨论的是如何快速读写配置,你打算怎么写