pediy 之 我自己的flashget 面向初学者
flashget地球人都知道吧,偶可是从以前的jetcar一直用过来的。看它的宣传中颇为自豪的是对下载来的文件的管理功能,可以分成软件、游戏、音乐之类来安排。可是偶还是用得不太爽,像偶这样每天down一堆乱七八糟东东的,几个月就能累积起几百个文件,不少珍贵或是超大的东东是绝对舍不得先删了等需要时再下的。于是乎在七八百个压缩包中寻找三天前下载的一份资料就成了我的必修课,痛苦啊~~~~~
最近忽发奇想,flashget的文件管理只是简单的把文件分成了几类,要是把文件按下载的日期来分别放入不同的文件夹,岂不是十分方便?正好借此练练偶的reversing engineer。
先确定大概的方向,flashget有一个预先指定的下载目录,默认时为c:\downloads,如果下载时不加改变就会保存到这里,我们的目标就是根据不同的日期自动改变这个下载目录。
这个设定在什么地方呢,自己找找吧,ini文件里没有,注册表里~~~~找到乐!是hkey_users\.default\software\jetcar\jetcar\download default,里面有个"path"键值就是了。(我的flashget版本为1.60,新版不知有没有变化)
怎么修改呢,我想的方法是在软件启动时从注册表读取信息之前把用系统日期表示的默认下载目录写进注册表中。先用c语言写个,看你的编程功力啦:
代码:
void f() { char path[30]="d:\\downloads\\"; char date[10]={0}; dword dw; hkey hkey; getdateformat(null,date_shortdate,null,null,date,10); regcreatekeyex(hkey_users,".default\\software\\jetcar\\jetcar\\download default",0,0, reg_option_volatile,key_all_access,null,&hkey,&dw); strcat(path,date); regsetvalueex(hkey,"path",0,reg_sz,(byte*)path,30); regclosekey(hkey); }
就把这个函数插进程序刚启动时就行了。呵呵~~~,往人家的程序写代码可不是那么简单的,先做一点准备工作,把需要的常量查出来(偶最讨厌这个!)
hkey_users=80000003
date_shortdate=1
reg_option_volatile=1
key_all_access=1f003f (这个是根据下面一堆值加出来的)
reg_sz=1
#define key_query_value (0x0001)
#define key_set_value (0x0002)
#define key_create_sub_key (0x0004)
#define key_enumerate_sub_keys (0x0008)
#define key_notify (0x0010)
#define key_create_link (0x0020)
#define standard_rights_all (0x001f0000l)
#define key_all_access ((standard_rights_all |\
key_query_value |\
key_set_value |\
key_create_sub_key |\
key_enumerate_sub_keys |\
key_notify |\
key_create_link) \
& \
(~synchronize))
找这个有什么用呢?在我们平时编程时候,不管用vc或是delphi还是masm什么,都会包含一个有大量的常量定义的“头文件”,免去了记忆各种参数值的麻烦,可是现在我们几乎是用机器码写程序,你总不能在hiew里写上push reg_sz吧(或许有高人能给hiew扩充一下也说不定)。