说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

也谈Windows 下的自动存盘 -VB资料

HTML文档下载 WORD文档下载 PDF文档下载
也谈Windows 下的自动存盘 -VB资料
郑州铁路分局机电设备厂
冉林仓
---- 我们知道,所谓自动存盘程序就是为了防止系统发生掉电时或者系统崩溃时防止 文件丢失而编制的小程序。有一些大的应用程序(如 WORD 97 、AUTOCAD 2000 等) 一般都设置了自动存盘功能,有的自动存盘是以时间间隔为存盘周期实现自动存盘, 有的则以用户编辑操作次数为基准进行存盘。然而无论那种方法都不可能避免在系统 崩溃时文件的丢失。在DOS情况由于系统内核小,资源占用少,一般除了程序员外用户 很少发生死机现象,或者程序出现例外而异常退出。windows下则不然,庞大的系统造 就了系统稳定性差,经常出现系统异常退出,造成文件丢失的情况。哪怕你正在输入 汉字(微软拼音),也没有招惹谁,输着输着就会出现系统出现非法错误,请重新启 动程序,如问题仍旧存在,请与软件供应商联系的提示框。无论你自嘘你的软件版有 多正,至少在系统出现BUG方面,它与盗版软件没有什么两样。出现了程序异常退出, 这时候哪怕你有天大的本事,也只有捶胸顿足的份了。反正无论是操作系统的原因或 者是应用程序或者是硬件的原因,谁都不会为我们的文件丢失负责任。我们可怜的用 户只能默默的承受这突如其来的打击。

---- 用户不知道如何存盘的几乎没有,然而要他们时时记住每隔三五分钟存一次盘, 确实有点强人所难,除非他们身边放了一个坏的闹钟,每隔三五分钟响一次提醒他 们,一般情况下,这些事业狂们是不输完画完誓不罢休。越是这样反而欲速则不达, 就在他们接近胜利曙光就要大功告成的时候,系统就会给他们开个不该开的玩笑。鉴 于上面所提到的情况,这些用户迫切需要一种工具软件,工作的进度是用户自己的 事,而存盘则是工具软件的事,有了明显的分工,各负其责,文件再丢,就不会再推 诿扯皮了。

---- 我们知道大多数应用程序都有一个标题条(CAPTION),我们可以通过WINDOWS API 中的GetWindows()函数通过不同的参数调用来穷举系统中正在运行的所有的应用程 序。通过GetWindowsText()及GetWindowsTextLength()获得窗口标题文本与长度。然 后在程序中进行分析标题特征,看一下我们要截获的应用程序是否正在运行,如果正 在运行,我们就可以击活这个应用程序,并向这个应用程序模拟键入存盘热键即可, 完成自动存盘,而这些都是工具程序在后台一个独立的进程中完成。根本不会影响用 户输入。

---- 程序说明:

---- ①.程序使用了下列Windows API调用说明如下:

Private Declare Function GetWindow Lib "user32"
(ByVal hwnd As Long, ByVal
wCmd As Long) As Long

---- 利用当前的窗口句柄获得与指定参数wCmd对应的窗口句柄。wCmd定义如下:
---- GW_CHILD 第一个子窗口

---- GW_HWNDFIRST 子窗口的第一兄弟窗口,其第一个顶层窗口

---- GW_HWNDLAST 子窗口的最后一个兄弟窗口,或者最后一个顶层窗口

---- GW_HWNDNEXT 后继窗口

---- GW_HWNDPREV 先前窗口

---- GW_OWNER 窗口拥有者

---- Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long 将句柄HWND指定的窗口标题放在一个字符串lpString 中,cch 为放入字符串lpString 中的 最大长度。若窗口无标题返回 0。

Private Declare Function GetWindowTextLength Lib
"user32" Alias
"GetWindowTextLengthA"
(ByVal hwnd As Long) As Long

---- 用于获得窗口标题的长度
Private Declare Function RegOpenKeyEx Lib
"advapi32.dll" Alias
"RegOpenKeyExA" (ByVal hKey As Long,
ByVal lpSubKey As String, ByVal
ulOptions As Long, ByVal samDesired As Long,
phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib
"advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal
lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long,
lpData As Any, ByVal cbData As
Long) As Long
Private Declare Function RegQueryValueEx Lib "
advapi32.dll" Alias
"RegQueryValueExA" (ByVal hKey As Long,
ByVal lpValueName As String, ByVal
lpReserved As Long, lpType As Long,
lpData As Any, lpcbData As Long) As
Long
Private Declare Function RegCloseKey Lib
"advapi32.dll" (ByVal hKey As
Long) As Long

---- 上面四个函数用于读写注册表信息。以便完成程序的自动加载。函数的具体应用请参 考源程序和有关书籍。需要说明的是BASIC 中的STRING 变量不同于C++中的以零结尾 的字符串变量,需要在变量名前加入ByVal 声明采用传值方式而非传址方式。使用这 些函数将建立“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\Windows\CurrentVersion\Run 下的键名为“自动存盘程序”键值为应用程序的完整路径。
Private Declare Function SendMessage Lib
"user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long,
ByVal wParam As Long, lParam As
Any) As Long

---- 向窗口发送消息,完成对应的操作。在程序中主要发送SYSCOMMAND 消息实现窗口最小 化。
---- Private Declare Function GetTickCount Lib "kernel32" () As Long

---- 用于返回从上次WINDOWS启动开始到当前的始终嘀嗒数,以诚相待毫秒为单位。

Private Declare Function ShellExecute Lib
"shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal
lpOperation As String, ByVal
lpFile As String, ByVal lpParameters As String,
ByVal lpDirectory As
String, ByVal nShowCmd As Long) As Long

---- 用于执行一个程序或者用一个与之相关联的程序打开一个文档可以用于打开浏览器。
---- ②. Visual Basic 程序调用

---- ⑴sendkeys 语句

---- 将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。

---- 语法

---- SendKeys string[, wait]

---- SendKeys 语句的语法具有以下几个命名参数:

---- 部分 描述

---- string 必要。字符串表达式,指定要发送的按键消息。

---- Wait 可选。指定等待方式的 Boolean 值。如果为 False(缺省值),则控件在按 键发送出去之后立刻返回到过程。如果为 True,则按键消息必须在控件返回到过程之 前加以处理。

---- 为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面 放置一个或多个代码,这些代码列举如下:

按键 代码
SHIFT +
CTRL ^
ALT %

---- 为了说明在按下其它按键时应同时按下 SHIFT、CTRL、及 ALT 的任意组合键,请把那 些按键的码放在括号当中。例如,为了说明按下 E 与 C 的时候同时按下 SHIFT 键, 请使用 "+(EC)"。为了说明在按下 E 的时候同时按下 SHIFT 键,但接着按 C 而不按 SHIFT,则使用 "+EC"。
---- 更多的信息请参考VB 在线帮助。

---- ⑵。AppActivate 语句

---- 激活一应用程序窗口。

---- 语法

---- AppActivate title[, wait]

---- AppActivate 语句的语法具有以下几个命名参数:

---- 部分 描述

---- title 必要。字符串表达式,所要激活的应用程序窗口的标题。可以使用 Shell 函数返回的任务识别码来替换 title,以激活应用程序。

---- wait 可选。Boolean 值,说明在激活另一个应用程序之前调用的应用程序是否有 焦点。如果为 False(缺省),那么,即使调用的应用程序没有焦点,也直接激活指 定的应用程序。如果为 True,则调用的应用程序会等到有焦点后,才激活指定的应用 程序。

---- ⑶。INSTR 语句

---- 返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。

---- 语法

---- InStr([start, ]string1, string2[, compare])

---- InStr 函数的语法具有下面的参数:

---- 部分 说明

---- start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个 字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compare 参数, 则一定要有 start 参数。

---- string1 必要参数。接受搜索的字符串表达式。

---- string2 必要参数。被搜索的字符串表达式。

---- Compare 可选参数。指定字符串比较。此 compare 参数是可以省略的,也可以是 0, 1或 2。指定 0(缺省)做二进制比较。指定 1 做不区分大小写的文本比较。仅对 Microsoft Access,指定 2 来做基于数据库中包含的信息的比较。如果 compare 是 Null,将发生错误。如果省略 compare,Option Compare 的设置将决定比较的类型。 返回值

如果 InStr返回
string1 为零长度 0
string1 为 Null Null
string2 为零长度 start
string2 为 Null Null
string2 找不到 0
在 string1 中找到string2 找到的位置
start > string2 0
说明

---- InStrB 函数作用于包含在字符串中的字节数据。所以 InStrB 返回的是字节位置,而 不是字符位置。
---- 注意一个汉字占用一个字符,与DOS下不一样。

---- DIR()

---- 返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式 或文件属性、或磁盘卷标相匹配。

---- 语法

---- Dir[(pathname[, attributes])]

---- Dir 函数的语法具有以下几个部分:

---- 部分 描述

---- pathname 可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、 以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。

---- attributes 可选参数。常数或数值表达式,其总和用来指定文件属性。如果省 略,则会返回匹配 pathname 的所有文件。

---- 设置值

---- attributes 参数的设置可为:

常数 值 描述

vbNormal 0 常规
vbHidden 2 隐藏
vbSystem 4 系统文件
vbVolume 8 磁盘卷标;如果指定,则其它属性都会忽略
vbDirectory 16 目录或文件夹

---- 注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来 替换真正的数值。
---- ③工程说明。

---- 这个程序有两个窗体一个模块组成。FORM1为主窗体,FORM2窗体主要用于设置需要自 动存盘程序(WORD 、EXCEL、ACESS、POWERPOINT 、VISUAL STUDIO 、AUTOCAD 、CAXA 98 、WORD PAD、FRONTPAGE等等众多应用程序)标题栏包含字符串的特征、 存盘时间间隔数,以及存盘热键。以电子图板CAXA 98为例:

---- 标题栏包含字符串:.exb -Eb-

---- 存盘时间间隔数(秒): 100

---- 存盘热键: CTRL+S

---- 模块主要用于将程序加入系统状态托盘区。它使程序响应左击右击两个事件。

---- FORM1加入了一个时种控件,用于定时检察流逝的时间数。

---- ④程序扩充说明

---- 本文提出了用一个程序操纵另一个程序的构想,特别适用于当你忘记一个文件密 码的时候,你很想穷举所有的可能密码,这对于手工操作是不可能的,你可以使用这 种方法模拟键入,模拟加载应用程序。

---- 对AUTOCAD 的用户可以利用程序中的实现方法,完成一个新图的初始化工作。也 可以利用WM_COPYDATA 消息向AUTOCAD 传送指令和数据。

---- 现列举部分实现片段:

WM_COPYDATA wParam = (WPARAM) (HWND) hwnd;
// 发送窗口的文件柄

lParam = (LPARAM) (PCOPYDATASTRUCT) pcds;
// 数据的结构指针

typedef struct tagCOPYDATASTRUCT { // cds
DWORD dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT;

---- 成员
---- dwData 指定传递到接受程序的32位数据

---- cbData 以字节为单位表示指向LPDATA 成员数据大小。

---- lpData 传递到接受应用程序的数据指针,可以为空指针

---- 程序清单

---- 最后需要说明的是此程序旨在抛砖引玉,希望有时间和精力的朋友对其进行完 善。但是程序千变万化,有了这个程序,你千万不要认为吃了定心丸,就万事大吉 了,记住在录入结束或者画完图的时候,一定要先存盘后编译、运行或者模拟显示打 印输出。注意最后一次存盘是用户自己的事,切记!
苹果和IBM成最佳搭档 微软谷歌或受威胁 OpenStack社区又添新成员 浪潮推动开放云生态系统构建 重度使用AWS及Hadoop,Pinterest的自服务平台打造历程 《近匠》腾讯信鸽:基于大数据的推送 超低功耗'Whisper'架构发布:IoT、可穿戴连接性IP新标准! R的数据分析制霸以及企业级应用盘点 第二届游戏运营技术论坛来袭!与大牛共论云时代的游戏运营之道 云雀科技:飞行器+地图,展望飞行器的新体验 Sandstorm,前Googler和极客名人建立通用开源工具保姆 触控科技CEO陈昊芝:引擎技术推动行业升级 谁能成为Hero,这一次你说了算!——TCL智能电视开发大赛创意阶段评审征集 微信官方在“公开课”上13个热点问题的解答摘要 MDCC 2014移动开发者大会10月开幕:你就是主角! 设计师该如何挣得一席之地? 回到未来:最热门的十大清洁能源技术公司 深度学习:未来机器人的进化途径 搜狗开源内部项目管理系统Cynthia,已被数十家企业采用 沃游戏新版本全新登场 好友PK根本停不下来 腾讯发布首款智能硬件,内部筹建孵化器鼓励创新 触控开发者平台:孕育“十亿开发者俱乐部” 《近匠》大新伙伴:大姨吗防晒小助手,帮你呵护女神 专访阿里云总裁王文斌:做出“用得爽”的工程产品 专访AMD全球副总裁潘晓明:2014全线发力,力争中国市场 搜狗开源内部项目管理平台Cynthia意欲何为? 深度解析浪潮新八路服务器TS860 支持Box2D,开源HTML5 2D游戏引擎FLAG 一周消息树:从程序员到架构师的方法与逻辑 【CTO俱乐部走进海尔】海尔的转型探索之路 十一问MongoDB CTO,谈NoSQL人气王的扩展、事务及运维 腾讯“创业•密码”开发者论坛 ChinaJoy引爆创业者关注 从F1赛车到智能手机,无线充电技术之崛起 100询问:修改boot.ini仍无法实现双重启动. websphere的问题(1)? 我是第一次使用域.为什么无法在域控制器里增加用户?help me! 求助:模板的连接问题 strust 请问:哪里有人民邮电出版社的《个体软件工程》下载 ?(有分送) 存储过程执行出错,请帮忙看看!急! 请问:在sybase中的设备大小的设定,有没有一个标准?? include问题,屡试屡败 请问怎么才能用最简单的方法把程序做成服务? 程序设计文档怎么写啊?求教 不好意思,一个简单的问题 websphere的问题(2)? 请问如何实现模式窗口,就是当打开子窗口主窗口不能操作,除非关闭子窗口,如果有这样的网页也行 关于清华出版社出版的“微软.NET程序设计系列”之《ADO.NET程序设计》的问题,大家来讨论一下 如何用程序实现光驱的弹入弹出? 在线等了,各位帮忙了!! 我运行了一个网络管理软件出现乱码?而别的程序都没有乱码? 对话框上面显示视图,怎么办? 一道四级题有一点不明白的地方,谢谢各位高手帮我解决一下困惑。。 websphere的问题? 在一个对话框CDialog类中访问窗体视图类CFormView中的函数发生错误? 有关简繁体转换的问题 怎么分离这个字符串 aa|bb|cc|dd| ASP连接Oracle9i的连接字符串是什么? 请教:EXCEL中使用VB进行串口编 websphere的问题(4)? 如何在自己写的类的属性、方法在被使用的时候显示一些相关信息? 高分:大侠们,帮我看一下这个设计思路对吗?(在线等待!) 初级问题:请问用ASP开发BS结构程序,应该选什么工具啊 请教各位pb的可执行程序的分发 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 多谢awpking ,请进给你洒分. asp里调ActiveX控件,客户端却不能用,请帮助解决,100分相送。 如何让两个网段的电脑互相访问 在线等!打开文档的问题! HtmlHelp用法问题。急急!!1 只有在这问,关于笔记本网卡的驱动程序 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 菜鸟的问题,大虾解决 本地安全策略打不开,怎么解决? 高分求教,如何让asp.net生成的网页转为pdf输出,在线等待 求救:用JMail发送邮件,用IIS的SMTP虚拟服务器,邮件都堵在Queue目录里发不出去 时间问题 在线等待 !!!没分啦!以后报答!! 为何执行int n=str.GetLength()后,n为0??? 急寻《基于XML电子公文格式规范》 初学 关于datagrid的问题 讨论用例分析技术 .net被我安在D盘,D盘下有一个WINNT目录被我删了,.NET就起不来了,我的系统在C盘 怎样删除表中的重复数据,急!! 如图,在梯形ABCD中,AD//BC,AD=4,DC=5,BC=11,梯形的高为4,动点M从B点出发沿线段BC以每秒1个单位长度向终点C运动,动点N从点C出发沿CDA以每秒2单位向终点A运动,若M、N两点同时出发,当其中一点到达终点 如图,在梯形ABCD中,AD‖BC,AD=3,DC=5,AB=4√2,∠B=45°. 动点M从B点出发沿线段BC以每秒2个单位长度的如图,在梯形ABCD中,AD‖BC,AD=3,DC=5,AB=4√2,∠B=45°. 动点M从B点出发沿线段BC以每秒2个单位长度的速度 ()海()天 ( )海( )天怎么写 已知lim x趋近于无穷(x+a/x-a)的x次方等于9,求常数a给个思路,求别给我写符号因为我实在看不懂 用语言叙述下好吗 我尽量理解 吧长方体截去一个角,剩下的几何体最多有( )个面? 简述马克思主义中国化的历史进程和形成的理论成果? 论述马克思主义的形成与发展1000字以上 把一个长方体截去一个角,剩下的几何体最多有几个面 紧急 试概述马克思主义在中国传播所产生的重大影响 已知数列{an}满足a(n+1)/an=(n+2)/n(n为正整数),a1=1,则an=?不要用数学归纳法 伊拉克西部省份遭遇枪击炸弹袭击 28美政府停摆谈判内幕:众议院领袖称不屑澳新州消防部门提醒当地居民撤离以应对妻子选总统 洪都拉斯被罢黜总统或可重QQ群里热聊\"如何结束生命\" 2浙江省新增1例人感染H7N9禽流感病美“天鹅座”货运飞船与国际空间站对接中亚论坛专家学者呼吁加强双边多边务实外交部:中方欢迎苏丹、南苏丹就多项议报告显示澳洲1/4家庭中女性开始养家印度一农民家园遭洪灾破坏 政府仅给一奔向6000点的楼市富力新城举办中国科技馆之行有志者常立志27个高薪职位将招百人张继科伤退 闫安来机会张继科伤退 闫安来机会老挝客机坠湄公河机上49人全数遇难上黑榜老师可在家中通知学生停课三大百货将成一家海南板块尾盘发力上攻低调性武器罗莉凶猛魔星神帝同居时代唯我独法转世为狐春风沉醉的晚上杀手特种兵美人谋御灵录英雄无敌之死神降临亚婆井前地旅游澳门半岛旅游竹洞天旅游芙蓉湖旅游九天洞旅游滨江公园旅游赭山公园旅游云谷索道旅游苏州丝绸博物馆旅游木兰草原旅游南岩宫旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘