感谢分享,几点意见供参考:
1、关于标准库函数的使用
最好是使用 winform.msgbox 而不是 win.msgbox;
winform.msgbox 会设置owner窗体。
process.getPath(process.getId())
实际上等价于 process.getPath()
而 process.getPath()
实际上等价于 io._exepath
2、关于获取启动参数
_CMDLINE 是解析前的纯文本,
你可以用 _ARGV[1] 取到第一个去掉分号的启动参数,这个更准确。
3、关于原始字符串winform.edit.text = /*
可以这样表示原始字符串
换行自动被解释为'\r\n'
*/
4、其他
var fileName;// 全路径文件名
var dirName;// 当前路径,由命令行传入
这些变量声明最好放在实际使用他的代码前面,以增进代码的可读性。
win.clip.OpenClipboard(0);在代码中可尽可能靠尽win.clip.CloseClipboard();
多处调用win.clip.CloseClipboard();可以修改思路合并为一个win.clip.CloseClipboard();
一段代码一个入口、一个出口,相关的代码尽可能码到一起(聚合性)。
循环测试可用文件名因为在多处重用,可以写一个函数,例如 getPath 以下是改进后的代码( 未仔细测试,仅供参考 )。
源代码 [ aardio ]01 | if ( _ARGV ? _ARGV[1] ) { |
08 | var getPath = function ( name ){ |
10 | name = string.replace(name, "\.\w+$" , "%d\0" ); |
12 | path = fsys.joinpath(_ARGV[1],string.format(name , i)); |
13 | if ( ! io.exist(path) ) return path; |
18 | win.clip.OpenClipboard(0); |
19 | var hData = win.clip.GetClipboardData(0x1 /*_CF_TEXT*/ ) |
21 | string.save(getPath( "剪贴板文本 .txt" ), raw. tostring (hData)) |
24 | hData = win.clip.GetClipboardData(0x2 /*_CF_BITMAP*/ ) |
26 | var bitmap = gdip.bitmap(hData, 0); |
27 | bitmap.save(getPath( "剪贴板文本 .txt" )); |
30 | win.msgbox( "当前剪贴板中没有图片或文本供粘贴!" ) |
33 | win.clip.CloseClipboard(); |
39 | var winform = ..win.form(text= "剪贴板文字或图片生成文件" ;right=449;bottom=292;border= "dialog frame" ;max= false ) |
41 | button={cls= "button" ;text= "添加右键菜单" ;left=16;top=18;right=153;bottom=64;z=1}; |
42 | button2={cls= "button" ;text= "删除右键菜单" ;left=16;top=76;right=153;bottom=122;z=2}; |
43 | edit={cls= "edit" ;left=162;top=17;right=434;bottom=226;autohscroll= false ;bgcolor=12639424;border=1;edge=1;multiline=1;z=3} |
48 | winform.button2.oncommand = function (id , event){ |
50 | var reg = win.reg( "HKEY_CLASSES_ROOT\Directory\Background\shell\剪贴板to文件" ) |
51 | var reg2 = win.reg( "HKEY_CLASSES_ROOT\Directory\shell\剪贴板to文件" ) |
52 | if (reg.delKeyTree( "" ) and reg2.delKeyTree( "" )){ |
53 | winform.msgbox( "右键菜单删除成功!" ) |
56 | winform.msgbox( "右键菜单删除失败!" ) |
63 | winform.button.oncommand = function (id , event){ |
64 | //这个表项可以在资源管理器中显示,但命令行必须是 "%v" |
65 | var reg = win.reg( "HKEY_CLASSES_ROOT\Directory\Background\shell\剪贴板to文件\command" ) |
66 | var reg2 = win.reg( "HKEY_CLASSES_ROOT\Directory\shell\剪贴板to文件\command" ) |
67 | if (reg.setSzValue( "" , '"' + io._exepath + '"' + ' "%v"' ) and |
68 | reg2.setSzValue( "" , '"' + io._exepath + '"' + ' "%1"' )){ |
69 | winform.msgbox( "右键菜单添加成功!" ) |
72 | winform.msgbox( "右键菜单添加失败!" ) |
78 | 添加右键菜单后,会在资源管理器右键菜单中出现"剪贴板toXX",复制了文字或图片点击右键中的 |
79 | "剪贴板toXX"就可在当前目录产生一个对应内容的文件。 |
82 | 该程序保存位置变更后需要重新 生成右键菜单 ,之前添加会自动删除掉。 |
|
|