用ahk做一个账号密码保存功能

在现代浏览器中,我们可以使用扩展、插件,让浏览器具有跨平台、跨浏览器的账号密码保存功能。 本人使用的是火狐浏览器,扩展是lastpass,然而由于这样那样的原因,总是会有一些不满意,时间长了,也萌发出一个想法,就是自己做一个可以记录保存密码的脚本。 本文章只是第一版,只实现了保存和调出功能,然而我居然就满足了,所以未来很长一段时间都不会更新,如果有喜欢的朋友,可以在此基础上制作更精良的脚本,一定要让我知道,我想用功能更强大的!

思路很简单,账号密码的保存、读取,用ini配置文件就可以统统搞定。

%A_ScriptDir%——当前脚本所在路径

iniread,输出变量名,文件路径,(区域名称)——使用时没有区域名称,那么会返回ini文件中的所有区域名称;如果使用时有区域名称,那么会返回该名称区域内的所有数据,在这里也就是账号密码。

以下是保存账号密码的ini范例

[名称A]
123
321

根据名称,选择账号和密码,之后怎么使用就很随意了。目前重要的是读取和添加。

readini(Section_name){ ;定义一个函数读取ini配置,传入变量名称随意。输入区域块名称,获取账号和密码,并在网页中登录
	global ;考虑到之后可能要在不同的函数中使用,所以这里用global声明了该函数中生成的全都是全局变量。
	IniRead,output_a,%A_ScriptDir%\账号密码.ini,%Section_name% ;该行代码将数据,保存到output_a中,原谅我如此随意的变量名···
	;~ StringSplit,finally_a,output_a,`n ;这里可以使用伪数组,但是伪数组依赖名称,所以这里使用数组。P.S.伪数组示例:a1 a2 a3
	word_array := StrSplit(output_a,"`n") ;把提取的数据,分割成数组,数组需要使用for循环才能读取。
	send,!{F4} ;以下几行代码是关闭GUI界面,这可以略过。
	Sleep,400
	Click
	Sleep,400
	Send,{Enter}
	;--------第一部分完成,文本读取--------
	;根据传入的名称,在ini文件中寻找对应的数据块,在本文中,数据块为“名称A”。找到数据块之后,返回数据块中的数据,文本中是啥,就是啥。在本文中,数据是123换行321。
	for i,j in word_array
	{
		
		sleep,100
		send,{tab}
		send,%j% ;有需要的朋友可以把这三行代码换成 MsgBox,%j% 测试一下。
	}
	Sleep,200
	send,{Enter}
	;--------第二部分完成,数据分割,数据操作,这部分可以玩出各种花样--------
	return
}

 

如此一来,就可以去读ini文件中的数据,并进行各种操作,功能没有扩展开,目前只用于网页登录。

接下来是GUI界面部分,我只需要一个按钮,点击就可以获取账号密码,而账号密码是越来越多的,不希望每次都写代码,所以GUI必须是能够自动生成的,好在AHK可以轻易办到。

!r:: ;呼出后台登录账号界面,该脚本核心功能
{
	IniRead,output_a,%A_ScriptDir%\账号密码.ini ;读取配置的时候忽略数据名称key,则会返回所有数据名称,返回的是字符串,需要分割。
	word_array := StrSplit(output_a,"`n") ;分割字符串
	x:=0 ;定义一下界面,比如说从X0,Y0开始,一个按钮100宽,30高,数量从0开始,每到5个,就把x归零,把y加30,很简单。
	k:=0
	w:=100
	h:=30
	num:=0
	for i,j in word_array ;自动化新建按钮,并且按照一行5个的规律换行。这里可以用gui宽度来设置列,因为我已经限制了gui宽度为500,所以不需要这个future。
	{
		Gui add,Button,x%x% y%k% w%w% h%h% g%j%,%j% ;注意这里设置了g标签,点击按钮会触发相应的功能。标签名称就是区域块名称,在这里就是“名称A”
		num+=1
		x+=100
		if (num//5)
		{
			k+=30
			x:=0
			num:=0
		}
		
	}
	gui,add,button,x%x% y%k% w%w% h%h% gwork_mid,添加账号 ;在自动生成的按钮之后,放一个添加账号用的按钮,绑定了一个work_mid标签。
	Gui Show, w500 h500, 电视登录 ;通过快捷键alt+r,可以呼出一个宽高均为500的gui界面,之后会调用ini,读取所有的块名称,并根据这些名称生成按钮。
	return
}

如果在ini文件中,按照上述格式多建一些的话,那么按理说会有如下界面。

用ahk做一个账号密码保存功能

添加账号部分

work_mid: ;添加账号的功能
{
	gui,new
	Gui Add, Text, x8 y8 w55 h23, 账号名称
	Gui Add, Edit, vname x72 y8 w120 h21
	Gui Add, Text, x8 y40 w55 h23 +0x1, 账号
	Gui Add, Edit, vzhang x72 y40 w120 h21
	Gui Add, Text, x8 y72 w55 h23 +0x1, 密码
	Gui Add, Edit, vpassword x72 y72 w120 h21
	Gui Add, Button, gwork_add x8 y104 w186 h23, 确定添加
	Gui Show, w202 h370, 添加账号密码
	return
}

 

就是简单的GUI界面,没有什么可说的,注意下绑定的标签,大概效果如图。

用ahk做一个账号密码保存功能

到目前为止,我们有了gui界面,有了一个只要输入区域名称,就可以干活的变量。

需要把它们结合起来,每一个按钮都对应一个专有名称和专有g标签,所以应该好好利用它们。

那么,请删除ini文件中的内容,让我们从零开始吧。

空白的ini文件,肯定也就不能生成按钮了。只能点击添加。

我们需要一个功能,把输入的账号密码,保存到ini中,同时还要让生成的按钮可以通过一个事件调用那些数据。不知道说明白没有···

work_add: ;将输入的信息,保存在两个文本中,再重新运行脚本。
{
	Gui, Submit,NoHide ;点击确认添加之后,submit提交
	a=%name%:`nreadini("%name%")`nreturn`n ;定义一个变量a,它的内容是 名称 冒号 换行 readini(名称) 换行 return 换行
	b=[%name%]`n%zhang%`n%password%`n ;定义一个变量b,它的内容是 名称 换行 账号 换行 密码 换行
	FileAppend ,%a%,%A_ScriptDir%\后台.ahk ;把变量a,添加到脚本中的最后
	FileAppend ,%b%,%A_ScriptDir%\账号密码.ini ;把变量b,添加到ini文件中的最后
	Run,%A_ScriptDir%\123.ahk ;重新运行这个脚本,之所以使用run而不使用reload,是因为曾经觉得肯定会扩展开的,所以要把数据分开比较好。现在觉得无所谓啦···
	return
}

 

有没有更好的方法?有的,有很多···但是···能用就好···能用就好···

用ahk做一个账号密码保存功能

每添加一个账号,都会在ini文件中添加内容,也会在ahk文件中添加一个标签,添加多了,就如图了。

明文保存账号密码肯定有各种不方便,但是一般来说都不会放特别重要的东西啦,主要是工作需要,所以做一个小工具减轻自己的负担。其实可以对密码进行加密,每次登陆的时候输入一个密钥就可以全部解锁了,这样别人哪怕拿到文件,也不能猜到密钥是什么。

畅想:

如果要根据网页来识别账号密码,可以在激活热键之后,读取网址,利用正则搞定关键字,然后推荐内容,提示就用tooltip提示就好了。

以下是最终ahk代码

readini(Section_name){ ;定义一个函数读取ini配置,传入变量名称随意。输入区域块名称,获取账号和密码,并在网页中登录
global ;考虑到之后可能要在不同的函数中使用,所以这里用global声明了该函数中生成的全都是全局变量。
IniRead,output_a,%A_ScriptDir%\账号密码.ini,%Section_name% ;该行代码将数据,保存到output_a中,原谅我如此随意的变量名···
;~ StringSplit,finally_a,output_a,`n ;这里可以使用伪数组,但是伪数组依赖名称,所以这里使用数组。P.S.伪数组示例:a1 a2 a3
word_array := StrSplit(output_a,"`n") ;把提取的数据,分割成数组,数组需要使用for循环才能读取。
send,!{F4} ;以下几行代码是关闭GUI界面,这可以略过。
Sleep,400
Click
Sleep,400
Send,{Enter}
;--------第一部分完成,文本读取--------
;根据传入的名称,在ini文件中寻找对应的数据块,在本文中,数据块为“名称A”。找到数据块之后,返回数据块中的数据,文本中是啥,就是啥。在本文中,数据是123换行321。
for i,j in word_array
{

sleep,100
;~ send,{tab}
;~ send,%j% ;有需要的朋友可以把这三行代码换成 MsgBox,%j% 测试一下。
MsgBox,%j% ;这里是功能测试,就是当GUI和ini都成功生成了一个按钮之后,点击按钮会发生的事情。我这里用msgbox测试。
}
Sleep,200
send,{Enter}
;--------第二部分完成,数据分割,数据操作,这部分可以玩出各种花样--------
return
}

!r:: ;呼出后台登录账号界面,该脚本核心功能
{
IniRead,output_a,%A_ScriptDir%\账号密码.ini ;读取配置的时候忽略数据名称key,则会返回所有数据名称,返回的是字符串,需要分割。
word_array := StrSplit(output_a,"`n") ;分割字符串
x:=0 ;定义一下界面,比如说从X0,Y0开始,一个按钮100宽,30高,数量从0开始,每到5个,就把x归零,把y加30,很简单。
k:=0
w:=100
h:=30
num:=0
for i,j in word_array ;自动化新建按钮,并且按照一行5个的规律换行。这里可以用gui宽度来设置列,因为我已经限制了gui宽度为500,所以不需要这个future。
{
Gui add,Button,x%x% y%k% w%w% h%h% g%j%,%j% ;注意这里设置了g标签,点击按钮会触发相应的功能。标签名称就是区域块名称,在这里就是“名称A”
num+=1
x+=100
if (num//5)
{
k+=30
x:=0
num:=0
}

}
gui,add,button,x%x% y%k% w%w% h%h% gwork_mid,添加账号 ;在自动生成的按钮之后,放一个添加账号用的按钮,绑定了一个work_mid标签。
Gui Show, w500 h500, 电视登录 ;通过快捷键alt+r,可以呼出一个宽高均为500的gui界面,之后会调用ini,读取所有的块名称,并根据这些名称生成按钮。
return
}


work_mid: ;添加账号的功能
{
gui,new
Gui Add, Text, x8 y8 w55 h23, 账号名称
Gui Add, Edit, vname x72 y8 w120 h21
Gui Add, Text, x8 y40 w55 h23 +0x1, 账号
Gui Add, Edit, vzhang x72 y40 w120 h21
Gui Add, Text, x8 y72 w55 h23 +0x1, 密码
Gui Add, Edit, vpassword x72 y72 w120 h21
Gui Add, Button, gwork_add x8 y104 w186 h23, 确定添加
Gui Show, w202 h370, 添加账号密码
return
}


work_add: ;将输入的信息,保存在两个文本中,再重新运行脚本。
{
Gui, Submit,NoHide ;点击确认添加之后,submit提交
a=%name%:`nreadini("%name%")`nreturn`n ;定义一个变量a,它的内容是 名称 冒号 换行 readini(名称) 换行 return 换行
b=[%name%]`n%zhang%`n%password%`n ;定义一个变量b,它的内容是 名称 换行 账号 换行 密码 换行
FileAppend ,%a%,%A_ScriptDir%\123.ahk ;把变量a,添加到脚本中的最后
FileAppend ,%b%,%A_ScriptDir%\账号密码.ini ;把变量b,添加到ini文件中的最后
Run,%A_ScriptDir%\123.ahk ;重新运行这个脚本,之所以使用run而不使用reload,是因为曾经觉得肯定会扩展开的,所以要把数据分开比较好。现在觉得无所谓啦···
return
}

 


给TA捐赠
共{{data.count}}人
人已捐赠
其他教程

完美的一键多用函数——摩斯密码

2016-11-24 20:59:32

其他案例

[办公]一键弹出优盘的脚本

2016-11-24 23:31:28

2 条回复 A文章作者 M管理员
  1. sunshine

    脚本报错

  2. AHK中文社区

    😀

个人中心
购物车
优惠劵
有新私信 私信列表
搜索