用VB做一个远程管理软件(11月28日更新)

随心杂谈 blackfeather

 

假期甚为单调,回想起以前做的远程文件管理,手又痒痒,打算继续做这个东西。原来的那个代码因为本本被格所以丢了,重新写一个吧,试着放弃WINSOCK控件来写。

先挖个坑,占个地。。。

请多关注!~

 

7月23日,控制端主界面制作完毕,控制端初始化制作完毕,修改配置部分制作完毕

7月24日,主机上线部分制作完毕。

7月29日,文件管理完成30%。。。(好几天没更新了,这个纯属凑数。。。)

8月5日,好久没有做这个,忙别的去了。晚上断网了,就写了一些,做的还是文件部分,基本已经成型。发个截个图

8月20日,这几天光跟哥们打DOTA了,也没顾上这个东西。。。修正了WINSOCK控件缓冲区只有8KB的问题,郁闷了一个星期,最后还是用了个自己也不太满意的方案,但是效果还是不错滴。文件管理基本完成了。贴出来一段删除文件夹的代码吧,使用了遍历依次删除,可以删除文件夹中带有 . (一个点)的非法文件夹,别小看这个,我就喜欢把一些东西放到这类文件夹中,文件夹名字改成dir.....(后面一串点),直接打开会报错。

8月26日,文件管理完成了。粗心大意的光出错。还有就是我用使用byte数组来接受数据,然后按需要转换成string类型,接收到的bytesTotal这个变量跟len(string)是不一样滴,一个中文字符时两个字节!做了一些小细节的修改。上张图吧。

 10月9日,又这么久没有动。。。开学了,上课忙啊。把文件(文件夹)属性设置那部分重新做了一下。比如给某个文件添加只读属性的时候,不能光用    SetFileAttributes 文件路径,FILE_ATTRIBUTE_READONLY  来设置,这样子目标文件就会是只有只读属性,原来的就覆盖了。后来随手就写上了+来连接,但是这也不对啊。经研究,用or来运算原始属性值和新属性,这样子就是添加,那去掉呢?想都没想就用了xor。。。后来发现纯粹大脑发热,经研究用了这种方式:原始属性值 and (not 新属性值),经过这个运算就是新属性值。下面贴出来代码。

 11月28日,前段时间在忙考试,都考了8科了。。。这个软件更新的就是重新做了通信协议。原来协议用的是字符串匹配的方式,比如我发送字符串001#,意思就是要求服务端发送计算机信息。后来学习了汇编和硬件数据传输,编程的时候了解了部分windows的特性,想到了一个问题,字符串匹配的话,比如  if strCMD="001#" then 这个简单的判断,需要执行至少四次判断,已字节的方式一一匹配才能返回结果。后来想到了如果我只是用byte的001来表示1号指令请求服务端的计算机信息,那执行的速度会快很多。于是,重新写了通信协议,就是把原来字符串全部换成了byte的值。但是这个时候发送数据的时候就不能用winsock.send strData的方式了,因为byte的0就是NULLCHAR,是字符串的结尾标志。所以发送数据要用byte数据的方式放松。我贴出来我用到的协议,很随意,没有工业级标准那样的高位和低位之分,就是从小到大排的,以后要是有这些项目的话再好好弄通信协议吧,这个软件就是学习的产品。

 

 

 


8月5日截图:

8月26日截图:

 

8月20日贴代码,删除文件夹:


Public Function DelDir(ByVal DTarget As String) As Boolean '老早以前写的Function,又被我翻出来了
Dim D_WFD As WIN32_FIND_DATA
Dim hW As Long
Dim TempFPath As String
Dim TempFName As String
Dim DelFLst As New Collection
Dim DelDLst As New Collection
If Right(DTarget, 1) <> "\" Then
       TempFPath = DTarget & "\"
    Else
       TempFPath = DTarget
End If
hW = FindFirstFile(TempFPath & "*.*", D_WFD)
 
If hW = INVALID_HANDLE_VALUE Then DelDir = False: GoTo Ext
   
        Do
        
         TempFName = Left(D_WFD.cFileName, InStr(D_WFD.cFileName, vbNullChar) - 1)
            If (D_WFD.dwFileAttributes And vbDirectory) Then
             
                       If TempFName <> "." And TempFName <> ".." Then
                             
                              If Right(TempFName, 1) = "." Then TempFName = TempFName & ".\"   '就这一行,就可以删除文件夹中带 . 的非法文件夹            
                              DelDir TempFPath & TempFName
                             
                       End If
               
                 Else
                       SetFileAttributes TempFPath & TempFName, FILE_ATTRIBUTE_ARCHIVE   '为了防止有只读或者系统属性影响
                       If DeleteFile(TempFPath & TempFName) = 0 Then DelDir = False: GoTo Ext    '使用了API
             
            End If
           
            DoEvents
                
        Loop While FindNextFile(hW, D_WFD)
       
         FindClose hW
        
        SetFileAttributes DTarget, FILE_ATTRIBUTE_ARCHIVE
        If RemoveDirectory(DTarget) = 0 Then DelDir = False: GoTo Ext      '使用了API
       
DelDir = True

Ext:
Set DelFLst = Nothing
Set DelDLst = Nothing  '传说中的能释放内存

End Function

----------很早以前写的,感觉这里用了Collection虽然方便,但是影响了速度。。。如果谁看着不顺眼可以改成用string数组。

 

 10月9日贴代码,设置文件/文件夹属性部分的代码:

Public Sub SetFileAttrib(ByVal strPath As String)
Dim fWFD As WIN32_FIND_DATA
Dim hFind As Long
Dim strLen As Integer
Dim strFile As String
'Debug.Print strPath
strFile = Left$(strPath, Len(strPath) - 4)
hFind = FindFirstFile(strFile, fWFD)
If hFind <> INVALID_HANDLE_VALUE Then
    strLen = Len(strPath)
    If Mid$(strPath, strLen - 3, 1) = "Y" Then    '存档就是Y,没有存档属性就是N
            fWFD.dwFileAttributes = fWFD.dwFileAttributes Or FILE_ATTRIBUTE_ARCHIVE
            SetFileAttributes strFile, fWFD.dwFileAttributes
        Else
            fWFD.dwFileAttributes = fWFD.dwFileAttributes And (Not FILE_ATTRIBUTE_ARCHIVE)
            SetFileAttributes strFile, fWFD.dwFileAttributes
    End If
    If Mid$(strPath, strLen - 2, 1) = "Y" Then  '只读
            fWFD.dwFileAttributes = fWFD.dwFileAttributes Or FILE_ATTRIBUTE_READONLY
            SetFileAttributes strFile, fWFD.dwFileAttributes
        Else
            fWFD.dwFileAttributes = fWFD.dwFileAttributes And (Not FILE_ATTRIBUTE_READONLY)
            SetFileAttributes strFile, fWFD.dwFileAttributes
    End If
    If Mid$(strPath, strLen - 1, 1) = "Y" Then  '隐藏
            fWFD.dwFileAttributes = fWFD.dwFileAttributes Or FILE_ATTRIBUTE_HIDDEN
            SetFileAttributes strFile, fWFD.dwFileAttributes
        Else
            fWFD.dwFileAttributes = fWFD.dwFileAttributes And (Not FILE_ATTRIBUTE_HIDDEN)
            SetFileAttributes strFile, fWFD.dwFileAttributes
    End If
    If Mid$(strPath, strLen, 1) = "Y" Then  '系统
            fWFD.dwFileAttributes = fWFD.dwFileAttributes Or FILE_ATTRIBUTE_SYSTEM
            SetFileAttributes strFile, fWFD.dwFileAttributes
        Else
            fWFD.dwFileAttributes = fWFD.dwFileAttributes And (Not FILE_ATTRIBUTE_SYSTEM)
            SetFileAttributes strFile, fWFD.dwFileAttributes
    End If
End If
sckSendData "008*"
End Sub

 

 11月28日贴已完成的通信协议:

        
+===========================================================================
Client发送(Server接收):
255   要求你下线
000   连接OK,请发送密码
001+Y/N   密码是否通过
002   请求驱动器
003+Path  请求目录列表
004   接收到上一个数据包,继续下一个数据包
005+Sourse|Target 复制文件
006+Path  删除
007+Path+N/H  运行文件  H隐藏 N正常
008+Path  文件属性
009+Path+Attrib(存档.只读.隐藏.系统)Y/N
010+Sourse|Target 重命名/剪切文件
011+Sourse|Target 克隆时间

015#+File  请求下载文件
015*   接受完毕上一个数据包,继续下一个数据包
016#+File  请求上传文件
017*+Data  上传文件到服务端,发送文件数据(未完毕)
017#+Data  上传文件到服务端,发送文件数据(最后一个数据包)

+==========================================================================
Server发送(Client接收):
255  我要下线
000+Pass 发送密码
001+Info 发送本机信息 IP|计算机名|内存|OS
002+Driver 发送驱动器  盘符+类型|
003+Dir  发送文件夹信息  name|type|大小|最后修改日期|| 0是文件夹 1是文件(最后一个包)
004  发送文件夹信息(未完毕)
005+Y/N  复制是否成功
006+Y/N  删除成功
007+PID  返回PID
008+Path|AccessTime|CreateTime|ModifyTime|Size|Attrib(存档.隐藏.只读.系统)Y/N
009+Y/N  设置属性是否成功
010+Y/N  重命名/剪切是否成功
011+Y/N  克隆时间是否成功

015*+Data 客户端请求下载文件,发送文件数据(未完毕)
015#+Data 客户端请求下载文件,发送文件数据(最后一个数据包)

===========================================================================

 

 

 

评论列表:

温柔一刀
不错的代码有完整code就好了……
温柔一刀2018/3/5 14:32:53 回复
blackfeather
这段时间一直没空,都快半年没有更新过了,抽空把这个完成了。谢谢各位一直关注。~
blackfeather2010/3/28 22:41:48 回复
lemondian
能给个源码吗?
lemondian@163.com
lemondian2010/2/26 14:36:49 回复
布澜卡
请问有源码可以提供学习一下吗?谢谢啊,邮箱:ksblk001@126.com
布澜卡2009/12/22 23:59:40 回复
黑若
哈哈不错喔也喜欢加点 哈哈 hi.baidu.com/黑若水
黑若2009/11/18 17:29:43 回复
Hovi.Delphic
要是有完整code就好了……
Hovi.Delphic2009/11/17 22:51:31 回复
土狼妹妹
对编程不太了解,学习了。
土狼妹妹2009/11/12 0:38:13 回复

发表评论: