分享一个自己写的IP地址统计软件

Published on 2014 - 08 - 26

分享一个自己用E语言写的IP地址统计软件,非常好用哦,用户点击提交后会将最详细的网卡信息发送到你的邮箱,并且邮件的标题是以 部门+名字 显示的,下面是程序的运行图片跟代码

------------------------------------------------------程序代码-------------------------------------------------------------------------------
.版本 2
.支持库 eAPI
.支持库 internet

.程序集 窗口程序集1
.程序集变量 禁止对开对象, 整数型

.子程序 _按钮1_被单击
.局部变量 _计次, 短整数型

.如果真 (取反 (是否与互联网连接 ()))
检查网络.标题 = “您尚未连接互联网,如果是网络有问题,请联系IT人员处理!朱亭宇分机:8123”
返回 ()
.如果真结束
.如果真 (姓名框.内容 = “”)
信息框 (“您未填写姓名”, 0, )
返回 ()
.如果真结束
.如果真 (部门框.内容 = “”)
信息框 (“您未填写部门”, 0, )
返回 ()
.如果真结束

_计次 = 取数值注册项 (#现行用户, “Software\Microsoft\Internet Explorer\Main\sinashowip”, )

.如果 (注册项是否存在 (#现行用户, “Software\Microsoft\Internet Explorer\Main\sinashowip”))
_计次 = _计次 + 1
.如果 (_计次 < 6)
写注册项 (#现行用户, “Software\Microsoft\Internet Explorer\Main\sinashowip”, _计次)

.否则
    信息框 (“您已经提交5次!请不要恶意提交!程序将终止运行!”, 0, )
    结束 ()
.如果结束
`

.否则
    运行 (“regedit”, 假, )
    写注册项 (#现行用户, “Software\Microsoft\Internet Explorer\Main\sinashowip”, 1)
.如果结束

按钮1.禁止 = 真
按钮1.标题 = “正在提交!”
检查网络.标题 = “您好!辛苦了,正在提交请稍等...”
时钟1.时钟周期 = 6000

时钟2.时钟周期 = 11000

写到文件 (“d:\run.bat”, 到字节集 (“ipconfig /all > d:\EchoIP.txt”))
运行 (“d:\run.bat”, 真, 1)
编辑框1.内容 = 到文本 (读入文件 (“d:\EchoIP.txt”))
发送邮件 (姓名框.内容 + “的网卡信息”, 姓名框.内容 + #换行符 + 部门框.内容 + #换行符 + 编辑框1.内容, “104242427@qq.com”, , , “sinashowip@163.com”, )

删除文件 (“d:\EchoIP.txt”)
删除文件 (“d:\run.bat”)

.子程序 __启动窗口_创建完毕
.局部变量 进程, 进程信息, , "0"
.局部变量 i, 整数型
.局部变量 数量, 整数型

进程 = 取系统进程列表 ()
.计次循环首 (取数组成员数 (进程), i)
    .如果真 (i > 1)
        .如果真 (进程 [i].进程名称 = 取执行文件名 ())
            数量 = 数量 + 1
        .如果真结束

`.如果真结束

.计次循环尾 ()
.如果真 (数量 ≥ 2)
信息框 (“程序已经在运行,请不要重复运行!”, 0, )
结束 ()
.如果真结束

.如果真 (取反 (是否与互联网连接 ()))
按钮1.禁止 = 真
按钮1.标题 = “网络故障!”
检查网络.标题 = “您尚未连接互联网,如果是网络有问题,请联系IT人员处理!朱亭宇分机:8123”
返回 ()
.如果真结束
检查网络.标题 = “您的网络连接正常,可以继续提交!”
连接发信服务器 (“smtp.163.com”, , “sinashowip@163.com”, “tingyu4bao”, )

.子程序 _时钟1_周期事件

按钮1.标题 = “提交成功!”
检查网络.标题 = “提交成功!信息化部全体员工感谢您的配合!”
时钟1.时钟周期 = 0

.子程序 _时钟2_周期事件

按钮1.禁止 = 假
按钮1.标题 = “提交给IT”
检查网络.标题 = “您已经提交成功统计信息,如果您的上一次提交有问题,请重新填写并提交,谢谢!”
时钟2.时钟周期 = 0

.子程序 _程序说明_被选择

信息框 (“以往统计方法是IT人员逐个工位拿笔拿纸抄录,既耽误大家工作,” + #换行符 + “也浪费IT人力与时间,此次第一次尝试由软件统计” + #换行符 + “请各位亲爱的同事们多多配合。3Q!”, 0, “程序说明”)

.子程序 _制作人说明_被选择

信息框 (“新浪Show IT 朱亭宇” + #换行符 + “邮箱:Mail@zhutingyu.com” + #换行符 + “UC号码:10666”, 0, “制作人说明”)

.子程序 _更新日志_被选择

信息框 (“4月8日完成测试,并投入使用” + #换行符 + #换行符 + “V1.3版更新如下(4月4日pm):” + #换行符 + “修改了功能:防恶意提交更改为只允许点击按钮五次,程序可以不限次数运行。” + #换行符 + “优化了使用方式:采用静态编译,文件编译成单文件版本双击即可运行” + #换行符 + #换行符 + “V1.2版本更新如下(4月4日am):” + #换行符 + “1.修改了BUG:打开程序后再断网检测不到” + #换行符 + “2.增加了功能:同时只能运行一个程序(防恶意提交)” + #换行符 + “3.增加了功能:每台电脑只可以运行五次本程序(防恶意提交)” + #换行符 + “4.改进了性能:优化了代码,增加了程序的内存占用量,使程序更稳定” + #换行符 + #换行符 + “V1.1版本更新如下(4月3日):” + #换行符 + “1.增加了功能:两个文本框为必填” + #换行符 + “2.增加了功能:网络链接状态的检测”, 0, “更新日志”)

.子程序 _使用说明_被选择

信息框 (“填写真实信息后,点击提交按钮,信息化部谢谢您的配合!祝您工作顺利!”, 0, “使用说明”)
--------------------------------------自定义DLL----------------------------------------------------------------
.版本 2

.DLL命令 打开事件同步对象, 整数型, "kernel32.dll", "OpenEventA"
.参数 dwDesiredAccess, 整数型, , 填2031619
.参数 bINheritHandle, 逻辑型, , 假
.参数 LpName, 文本型, , 互斥体

.DLL命令 创建事件同步对象, 整数型, "kernel32.dll", "CreateEventA"
.参数 LpEventAttributes, 整数型, , 0
.参数 bManualReset, 逻辑型, , 假
.参数 bInitialstate, 逻辑型, , 假
.参数 LpName, 文本型, , 互斥体

.DLL命令 控制窗口状态, 整数型, "user32.dll", "ShowWindowAsync", , , ShowWindowAsync
.参数 窗口句柄, 整数型, , hwnd,欲接收ShowWindow命令的窗口
.参数 可视性类型, 整数型, , 为窗口指定的一个命令。请用下述任何一个常数:0 隐藏取消激活 1 还原激活 2 最小化激活 3 最大化激活 4 还原 6 最小化取消激活 7 最小化 9 还原激活

.DLL命令 _取窗口进程ID, 整数型, , "GetWindowThreadProcessId", , user32.dll获取与指定窗口关联在一起的一个线程和进程标识符
.参数 窗口句柄, 整数型, , hwnd,指定窗口句柄
.参数 进程标识符, 整数型, 传址, lpdwProcessId,指定一个变量,用于装载拥有那个窗口的一个进程的标识符

.DLL命令 _连接线程输入, 整数型, , "AttachThreadInput", , 允许线程和进程共享输入队列。连接了线程后,输入焦点、窗口激活、鼠标捕获、键盘状态以及输入队列状态都会进入共享状态
.参数 dwthreadthis, , , 欲连接线程的标识符(ID)
.参数 dwthreadforeground, , , 与idAttach线程连接的另一个线程的标识符
.参数 fAttach, 逻辑型, , TRUE(非零)连接,FALSE撤消连接

.DLL命令 _取当前线程, 整数型, , "GetCurrentThreadId", , 获取当前线程一个唯一的线程标识符(返回线程标识符)

.DLL命令 _窗口激活, 整数型, , "SetActiveWindow", , 激活指定的窗口,返回前一个活动窗口的句柄
.参数 hwnd, 整数型, , 待激活窗口的句柄

.DLL命令 _窗口置前台, 整数型, , "SetForegroundWindow", 公开, 将窗口设为系统的前台窗口。可用于改变用户目前正在操作的应用程序 (非零表示成功,零表示失败)
.参数 窗口句柄, 整数型, , 带到前台的窗口

.DLL命令 关闭内核对象_, 整数型, "kernel32.dll", "CloseHandle", , , 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError

.参数 对象句柄, 整数型, , 欲关闭的一个对象的句柄;