├── .gitignore ├── Example.vb ├── FormMain.Designer.vb ├── FormMain.resx ├── FormMain.vb ├── My Project ├── Application.Designer.vb ├── Application.myapp ├── AssemblyInfo.vb ├── Resources.Designer.vb ├── Resources.resx ├── Settings.Designer.vb ├── Settings.settings └── app.manifest ├── MyVisualBasic.sln ├── MyVisualBasic.vbproj ├── MyVisualBasic ├── Http.vb ├── IO.vb ├── Keyboard.vb ├── Mouse.vb ├── Power.vb ├── Resource.vb ├── Screen.vb ├── Security.vb ├── StringProcessing.vb ├── Task.vb ├── Time.vb └── Window.vb ├── Program.vb ├── README.md ├── exe.config └── windows.ico /.gitignore: -------------------------------------------------------------------------------- 1 | ################################## 2 | ## Visual Basic.NET ## 3 | ################################## 4 | 5 | bin/ 6 | obj/ 7 | 8 | *.suo 9 | *.user 10 | -------------------------------------------------------------------------------- /Example.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 范例代码(暂未整理到 MyVisualBasic 库中的可参考代码) 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Example 8 | 9 | ''' 10 | ''' 内存检测(不断申请256MB空间的Int数组,并反复读写内容,检测内存质量) 11 | ''' 12 | ''' 13 | Public Shared Sub MemoryTest() 14 | System.GC.Collect() 15 | Dim Tested As New ArrayList() 16 | Dim BlockSize As UInt32 = 256 * 1024 * 1024 17 | Dim BlockSizeMB As UInt32 = Int(BlockSize / 1024 / 1024) 18 | Dim TestedGB As UInt32 = 0 19 | While True 'My.Computer.Info.AvailablePhysicalMemory > BlockSize 20 | Dim Testing As UInt32() = Nothing 21 | '初始0 22 | Try 23 | ReDim Preserve Testing(BlockSize / 4 - 1) 24 | Catch ex As System.OutOfMemoryException 25 | ex = New OutOfMemoryException("【内存检测通过】:" & vbCrLf & "测试通过 " & Tested.Count & " * " & BlockSizeMB & " MB(" & TestedGB & "GB)。") 26 | Tested.Clear() 27 | System.GC.Collect() 28 | Throw ex 29 | End Try 30 | For I = 0 To Testing.Length - 1 31 | If Testing(I) <> 0 Then 32 | Throw New Exception("【发现内存错误】初始0值异常:" & vbCrLf & "测试通过 " & Tested.Count & " * " & BlockSizeMB & " MB(" & TestedGB & "GB),错误位置 " & Int(I * 4 / 1024 / 1024) & " MB。") 33 | End If 34 | Next 35 | '重置1 36 | For I = 0 To Testing.Length - 1 37 | Testing(I) = UInt32.MaxValue 38 | Next 39 | For I = 0 To Testing.Length - 1 40 | If Testing(I) <> UInt32.MaxValue Then 41 | Throw New Exception("【发现内存错误】重置1值异常:" & vbCrLf & "测试通过 " & Tested.Count & " * " & BlockSizeMB & " MB(" & TestedGB & "GB),错误位置 " & Int(I * 4 / 1024 / 1024) & " MB。") 42 | End If 43 | Next 44 | '重置0 45 | For I = 0 To Testing.Length - 1 46 | Testing(I) = UInt32.MinValue 47 | Next 48 | For I = 0 To Testing.Length - 1 49 | If Testing(I) <> 0 Then 50 | Throw New Exception("【发现内存错误】重置0值异常:" & vbCrLf & "测试通过 " & Tested.Count & " * " & BlockSizeMB & " MB(" & TestedGB & "GB),错误位置 " & Int(I * 4 / 1024 / 1024) & " MB。") 51 | End If 52 | Next 53 | Tested.Add(Testing) 54 | TestedGB = Tested.Count * BlockSizeMB / 1024 55 | End While 56 | End Sub 57 | 58 | 59 | 60 | ''' 61 | ''' 获取上一次调用Win32 API产生的错误信息(实测:错误信息会一直保留,直到下一次调用Win32 API) 62 | ''' 63 | ''' 错误信息(默认为"0 操作成功完成。") 64 | ''' 65 | Public Shared Function Win32Error() As String 66 | Dim ErrorCode As Int32 = Runtime.InteropServices.Marshal.GetLastWin32Error() 67 | Dim ErrorMessage As String = New System.ComponentModel.Win32Exception(Runtime.InteropServices.Marshal.GetLastWin32Error()).Message 68 | Return ErrorCode & " " & ErrorMessage 69 | End Function 70 | 71 | 72 | 73 | ''' 74 | ''' 在鼠标位置附近,创建一个无边框窗口,实时显示全屏的截图 75 | ''' 76 | ''' 77 | Public Shared Sub CaptureScreen() 78 | Dim CaptureForm As New CaptureForm() 79 | CaptureForm.Show() 80 | End Sub 81 | _ 82 | Private Class CaptureForm 83 | Inherits System.Windows.Forms.Form 84 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 85 | Try 86 | If disposing AndAlso components IsNot Nothing Then 87 | components.Dispose() 88 | End If 89 | Finally 90 | MyBase.Dispose(disposing) 91 | End Try 92 | End Sub 93 | Private components As System.ComponentModel.IContainer 94 | Private Sub InitializeComponent() 95 | Me.components = New System.ComponentModel.Container() 96 | Me.Timer1 = New System.Windows.Forms.Timer(Me.components) 97 | Me.SuspendLayout() 98 | Me.Timer1.Enabled = True 99 | Me.Timer1.Interval = 16 100 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None 101 | Me.ResumeLayout(False) 102 | End Sub 103 | Friend WithEvents Timer1 As System.Windows.Forms.Timer 104 | Private Sub FormMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 105 | Me.TopMost = True 106 | Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None 107 | Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True) 108 | Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True) 109 | Me.Opacity = 0 110 | End Sub 111 | Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick 112 | Timer1.Enabled = False 113 | If Not BackgroundImage Is Nothing Then BackgroundImage.Dispose() 114 | Me.BackgroundImage = My.Screen.ImageThumbnail(0.5) 115 | Me.Size = Me.BackgroundImage.Size 116 | Me.Location = My.Mouse.Position() + New Size(10, 10) 117 | Me.Opacity = 1 118 | Timer1.Enabled = True 119 | End Sub 120 | End Class 121 | 122 | 123 | 124 | ''' 125 | ''' 获取一个窗体的所有的可见子窗体句柄,保存信息并截图 126 | ''' 127 | ''' 窗口句柄(IntPtr) 128 | ''' 129 | Public Shared Sub AnalysisChildren(ByVal hWnd As IntPtr) 130 | My.Window.SetFocus(hWnd) 131 | Dim SavePath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 132 | Dim WindowsName As String = My.Window.GetTitle(hWnd) 133 | SavePath = SavePath & "\" & WindowsName & My.Time.Stamp() 134 | System.IO.Directory.CreateDirectory(SavePath) 135 | My.IO.WriteString("", SavePath & "\Name_ClassName_Left_Top_Width_Height_Child_Father" & ".txt") 136 | Dim Children As New List(Of IntPtr)(My.Window.ListChildren(hWnd)) 137 | Dim I As Int32 = 0 138 | While (I < Children.Count) 139 | Dim Child As IntPtr = Children(I) 140 | Dim Rectangle As Rectangle = My.Window.GetRectangle(Child) 141 | If Rectangle.Width > 0 And Rectangle.Height > 0 Then 142 | Dim Name As String = My.Window.GetTitle(Child) 143 | Dim ClassName As String = My.Window.GetClassName(Child) 144 | Dim Father As IntPtr = My.Window.FindParent(Child) 145 | Dim Image As Image = My.Screen.Image(Rectangle) 146 | Image.Save(SavePath & "\" & Name & "_" & ClassName & "_" & Rectangle.Left & "_" & Rectangle.Top & "_" & Rectangle.Width & "_" & Rectangle.Height & "_" & Child.ToString() & "_" & Father.ToString() & ".png") 147 | Image.Dispose() 148 | End If 149 | I = I + 1 150 | End While 151 | End Sub 152 | 153 | 154 | 155 | ''' 156 | ''' 对当前目录下的,所有用.NET Reflector从“.vb”转换生成的“.cs”文件,进行简单的修正 157 | ''' 158 | ''' 159 | Public Shared Sub CheckVBToCSharp() 160 | Dim Dialog1 As New FolderBrowserDialog 161 | Dialog1.Description = "请选择反编译出的 C# 代码的路径" 162 | Dialog1.SelectedPath = "F:\Desktop\新建文件夹\MyVisualBasic\My" 163 | If Dialog1.ShowDialog() = DialogResult.OK Then 164 | Dim CSFiles As String() = My.IO.ListFile(Dialog1.SelectedPath) 165 | For FI = 0 To CSFiles.Length - 1 166 | Dim File As String = CSFiles(FI) 167 | Dim Codes As String() = My.IO.ReadStringArray(File) 168 | For CI = 0 To Codes.Length - 1 169 | Dim Code As String = Codes(CI) 170 | If (Code = "") Then 171 | Codes(CI) = " " 172 | End If 173 | If Code.Contains("ProjectData.SetProjectError(exception1);") Then 174 | Codes(CI) = "" 175 | Continue For 176 | End If 177 | If Code.Contains("Exception exception = exception1;") Then 178 | Codes(CI) = "" 179 | Continue For 180 | End If 181 | If Code.Contains("ProjectData.ClearProjectError();") Then 182 | Codes(CI) = "" 183 | Continue For 184 | End If 185 | If Code.Contains("using Microsoft.VisualBasic.CompilerServices;") Then 186 | Codes(CI) = "" 187 | Continue For 188 | End If 189 | Code = Code.Replace("namespace MyVisualBasic.My", "namespace My") 190 | Code = Code.Replace("catch (Exception exception1)", "catch (Exception ex)") 191 | Code = Code.Replace("catch (Exception exception3)", "catch (Exception ex)") 192 | Code = Code.Replace("catch (Exception exception5)", "catch (Exception ex)") 193 | Code = Code.Replace("string str;", "string result;") 194 | Code = Code.Replace("str = ", "result = ") 195 | Code = Code.Replace("return str;", "return result;") 196 | Code = Code.Replace("byte[] buffer;", "byte[] result;") 197 | Code = Code.Replace("buffer = ", "result = ") 198 | Code = Code.Replace("return buffer;", "return result;") 199 | Code = Code.Replace("bool flag;", "bool result;") 200 | Code = Code.Replace("flag = ", "result = ") 201 | Code = Code.Replace("return flag;", "return result;") 202 | Codes(CI) = Code 203 | Next 204 | Codes = My.StringProcessing.SelectNotEmpty(Codes) 205 | My.IO.WriteStringArray(Codes, File) 206 | Next 207 | End If 208 | End Sub 209 | 210 | 211 | 212 | ''' 213 | ''' 文件列表式备份(保存文件的绝对路径、名称、后缀、大小、哈希值、ED2K链接等) 214 | ''' 215 | ''' 是否读取文件内容,计算哈希值(较慢) 216 | ''' 217 | Public Shared Sub FileListBackup(Optional ByVal CalculateHash As Boolean = False) 218 | Dim Dialog1 As New FolderBrowserDialog 219 | Dialog1.Description = "请选择要备份的文件夹路径" 220 | If Dialog1.ShowDialog() = DialogResult.OK Then 221 | Dim DirInfo As New System.IO.DirectoryInfo(Dialog1.SelectedPath) 222 | Dim SavePath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 223 | SavePath = SavePath & "\" & "【" & DirInfo.Name & "】" & My.Time.Stamp() & ".log" 224 | My.IO.WriteString("【备份时间:" & Now & "】" & vbCrLf, SavePath) 225 | My.IO.AppendString("【备份路径:" & DirInfo.FullName & "】" & vbCrLf, SavePath) 226 | My.IO.AppendString("【本地时区:" & TimeZone.CurrentTimeZone.StandardName & " " & TimeZone.CurrentTimeZone.GetUtcOffset(Now).ToString() & "】" & vbCrLf, SavePath) 227 | Dim Files As String() = My.IO.ListFile(Dialog1.SelectedPath) 228 | My.IO.AppendString("【文件数目:" & Files.Length & "】" & vbCrLf, SavePath) 229 | If CalculateHash = False Then 230 | My.IO.AppendString("【属性说明:完整路径、文件名、文件后缀<快捷方式指向位置>、文件大小、创建时间、修改时间、访问时间】" & vbCrLf, SavePath) 231 | Else 232 | My.IO.AppendString("【属性说明:完整路径、文件名、文件后缀<快捷方式指向位置>、文件大小、创建时间、修改时间、访问时间、ED2K下载链接、MD5值、SHA1值、SHA256值、SHA384值、SHA512值】" & vbCrLf, SavePath) 233 | End If 234 | For I = 0 To Files.Length - 1 235 | Dim File As String = Files(I) 236 | Dim FileInfo As New System.IO.FileInfo(File) 237 | Dim Buffer As New System.Text.StringBuilder() 238 | Buffer.Append(vbCrLf) 239 | Buffer.Append("""" & (I + 1) & """") 240 | Buffer.Append(" ") 241 | Buffer.Append("""" & FileInfo.FullName & """") 242 | Buffer.Append(" ") 243 | Buffer.Append("""" & FileInfo.Name & """") 244 | Buffer.Append(" ") 245 | If FileInfo.Extension.ToLower() <> ".lnk" Then 246 | Buffer.Append("""" & FileInfo.Extension & """") 247 | Buffer.Append(" ") 248 | Else 249 | Dim Link As String = My.IO.ReadLinkFile(File) 250 | Buffer.Append("""" & FileInfo.Extension & "<" & Link & ">" & """") 251 | Buffer.Append(" ") 252 | File = Link 253 | End If 254 | Buffer.Append("""" & FileInfo.Length & """") 255 | Buffer.Append(" ") 256 | Buffer.Append("""" & FileInfo.CreationTime() & """") 257 | Buffer.Append(" ") 258 | Buffer.Append("""" & FileInfo.LastWriteTime() & """") 259 | Buffer.Append(" ") 260 | Buffer.Append("""" & FileInfo.LastAccessTime() & """") 261 | Buffer.Append(" ") 262 | If CalculateHash Then 263 | Dim Source As Byte() = My.IO.ReadByte(File) 264 | Buffer.Append("""" & My.Security.Generate_ED2K_Link(FileInfo.Name, Source) & """") 265 | Buffer.Append(" ") 266 | Buffer.Append("""" & My.Security.MD5_Encode(Source) & """") 267 | Buffer.Append(" ") 268 | Buffer.Append("""" & My.Security.SHA1_Encode(Source) & """") 269 | Buffer.Append(" ") 270 | Buffer.Append("""" & My.Security.SHA256_Encode(Source) & """") 271 | Buffer.Append(" ") 272 | Buffer.Append("""" & My.Security.SHA384_Encode(Source) & """") 273 | Buffer.Append(" ") 274 | Buffer.Append("""" & My.Security.SHA512_Encode(Source) & """") 275 | Buffer.Append(" ") 276 | End If 277 | My.IO.AppendString(Buffer.ToString(), SavePath) 278 | Next 279 | End If 280 | 281 | End Sub 282 | 283 | End Class 284 | 285 | End Namespace -------------------------------------------------------------------------------- /FormMain.Designer.vb: -------------------------------------------------------------------------------- 1 |  _ 2 | Partial Class FormMain 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form 重写 Dispose,以清理组件列表。 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Windows 窗体设计器所必需的 18 | Private components As System.ComponentModel.IContainer 19 | 20 | '注意: 以下过程是 Windows 窗体设计器所必需的 21 | '可以使用 Windows 窗体设计器修改它。 22 | '不要使用代码编辑器修改它。 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FormMain)) 27 | Me.Timer1 = New System.Windows.Forms.Timer(Me.components) 28 | Me.Timer2 = New System.Windows.Forms.Timer(Me.components) 29 | Me.SuspendLayout() 30 | ' 31 | 'Timer1 32 | ' 33 | Me.Timer1.Enabled = True 34 | Me.Timer1.Interval = 2000 35 | ' 36 | 'Timer2 37 | ' 38 | Me.Timer2.Interval = 2000 39 | ' 40 | 'FormMain 41 | ' 42 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None 43 | Me.ClientSize = New System.Drawing.Size(584, 412) 44 | Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) 45 | Me.Name = "FormMain" 46 | Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen 47 | Me.Text = "FormMain" 48 | Me.ResumeLayout(False) 49 | 50 | End Sub 51 | Friend WithEvents Timer1 As System.Windows.Forms.Timer 52 | Friend WithEvents Timer2 As System.Windows.Forms.Timer 53 | 54 | End Class 55 | -------------------------------------------------------------------------------- /FormMain.vb: -------------------------------------------------------------------------------- 1 | Public Class FormMain 2 | 3 | Private Sub FormMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 4 | Dim Thread As New Threading.Thread(New Threading.ThreadStart(AddressOf My.Example.MemoryTest)) 5 | Thread.Start() 6 | Application.Exit() 7 | 8 | If (1 - 1 = 0) Then Return 9 | 10 | Dim A As Integer, B As Integer = A / B 11 | Application.Exit() 12 | Process.GetCurrentProcess().Kill() 13 | 14 | End Sub 15 | 16 | '2秒 17 | Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick 18 | Timer1.Enabled = False 19 | 20 | Dim 阴阳师 As IntPtr = My.Window.FindByTitle("阴阳师-网易游戏") 21 | If 阴阳师 <> IntPtr.Zero Then 22 | My.Window.SetCenterScreen(阴阳师) 23 | My.Window.SetFocus(阴阳师) 24 | My.Mouse.MoveToPixel(950, 500) 25 | My.Mouse.LeftClick() 26 | My.Mouse.LeftClick() 27 | My.Mouse.MoveToPixel(1380, 750) 28 | My.Mouse.LeftClick() 29 | End If 30 | 31 | Timer2.Enabled = True 32 | End Sub 33 | 34 | '2秒 35 | Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick 36 | Timer2.Enabled = False 37 | Timer1.Enabled = True 38 | End Sub 39 | 40 | End Class 41 | -------------------------------------------------------------------------------- /My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' 此代码由工具生成。 4 | ' 运行时版本:4.0.30319.42000 5 | ' 6 | ' 对此文件的更改可能会导致不正确的行为,并且如果 7 | ' 重新生成代码,这些更改将会丢失。 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | FormMain 5 | true 6 | 0 7 | true 8 | 0 9 | true 10 | -------------------------------------------------------------------------------- /My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System 2 | Imports System.Reflection 3 | Imports System.Runtime.InteropServices 4 | 5 | ' 有关程序集的常规信息通过下列特性集 6 | ' 控制。更改这些特性值可修改 7 | ' 与程序集关联的信息。 8 | 9 | ' 查看程序集特性的值 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | '如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 21 | 22 | 23 | ' 程序集的版本信息由下面四个值组成: 24 | ' 25 | ' 主版本 26 | ' 次版本 27 | ' 内部版本号 28 | ' 修订号 29 | ' 30 | ' 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, 31 | ' 方法是按如下所示使用“*”: 32 | ' 33 | 34 | 35 | -------------------------------------------------------------------------------- /My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' 此代码由工具生成。 4 | ' 运行时版本:4.0.30319.42000 5 | ' 6 | ' 对此文件的更改可能会导致不正确的行为,并且如果 7 | ' 重新生成代码,这些更改将会丢失。 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | '此类是由 StronglyTypedResourceBuilder 19 | '类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 20 | '若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen 21 | '(以 /str 作为命令选项),或重新生成 VS 项目。 22 | ''' 23 | ''' 一个强类型的资源类,用于查找本地化的字符串等。 24 | ''' 25 | _ 29 | Friend Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' 返回此类使用的缓存的 ResourceManager 实例。 37 | ''' 38 | _ 39 | Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyVisualBasic.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' 使用此强类型资源类,为所有资源查找 51 | ''' 重写当前线程的 CurrentUICulture 属性。 52 | ''' 53 | _ 54 | Friend Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | End Module 63 | End Namespace 64 | -------------------------------------------------------------------------------- /My Project/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' 此代码由工具生成。 4 | ' 运行时版本:4.0.30319.42000 5 | ' 6 | ' 对此文件的更改可能会导致不正确的行为,并且如果 7 | ' 重新生成代码,这些更改将会丢失。 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings 自动保存功能" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | End Class 57 | End Namespace 58 | 59 | Namespace My 60 | 61 | _ 64 | Friend Module MySettingsProperty 65 | 66 | _ 67 | Friend ReadOnly Property Settings() As Global.MyVisualBasic.My.MySettings 68 | Get 69 | Return Global.MyVisualBasic.My.MySettings.Default 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /My Project/app.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 47 | -------------------------------------------------------------------------------- /MyVisualBasic.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyVisualBasic", "MyVisualBasic.vbproj", "{D11C7AB7-8AC5-4ABE-9B50-DD76460AD9F8}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|x86 = Debug|x86 9 | Release|x86 = Release|x86 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {D11C7AB7-8AC5-4ABE-9B50-DD76460AD9F8}.Debug|x86.ActiveCfg = Debug|x86 13 | {D11C7AB7-8AC5-4ABE-9B50-DD76460AD9F8}.Debug|x86.Build.0 = Debug|x86 14 | {D11C7AB7-8AC5-4ABE-9B50-DD76460AD9F8}.Release|x86.ActiveCfg = Release|x86 15 | {D11C7AB7-8AC5-4ABE-9B50-DD76460AD9F8}.Release|x86.Build.0 = Release|x86 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /MyVisualBasic.vbproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | x86 6 | 7 | 8 | 2.0 9 | {D11C7AB7-8AC5-4ABE-9B50-DD76460AD9F8} 10 | WinExe 11 | MyVisualBasic.Program 12 | MyVisualBasic 13 | MyVisualBasic 14 | 512 15 | WindowsFormsWithCustomSubMain 16 | v2.0 17 | false 18 | publish\ 19 | true 20 | Disk 21 | false 22 | Foreground 23 | 7 24 | Days 25 | false 26 | false 27 | true 28 | 0 29 | 1.0.0.%2a 30 | false 31 | true 32 | 33 | 34 | AnyCPU 35 | true 36 | full 37 | true 38 | true 39 | bin\Debug\ 40 | MyVisualBasic.xml 41 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 42 | AllRules.ruleset 43 | 44 | 45 | false 46 | true 47 | 48 | 49 | x86 50 | pdbonly 51 | false 52 | true 53 | true 54 | bin\Release\ 55 | MyVisualBasic.xml 56 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 57 | 58 | 59 | false 60 | 61 | 62 | On 63 | 64 | 65 | Binary 66 | 67 | 68 | Off 69 | 70 | 71 | On 72 | 73 | 74 | LocalIntranet 75 | 76 | 77 | false 78 | 79 | 80 | My Project\app.manifest 81 | 82 | 83 | windows.ico 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | Form 103 | 104 | 105 | Form 106 | 107 | 108 | FormMain.vb 109 | Form 110 | 111 | 112 | True 113 | Application.myapp 114 | 115 | 116 | 117 | True 118 | True 119 | Resources.resx 120 | 121 | 122 | True 123 | Settings.settings 124 | True 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | FormMain.vb 143 | 144 | 145 | VbMyResourcesResXFileCodeGenerator 146 | Resources.Designer.vb 147 | My.Resources 148 | Designer 149 | 150 | 151 | 152 | 153 | Designer 154 | 155 | 156 | MyApplicationCodeGenerator 157 | Application.Designer.vb 158 | 159 | 160 | SettingsSingleFileGenerator 161 | My 162 | Settings.Designer.vb 163 | 164 | 165 | 166 | 167 | False 168 | .NET Framework 3.5 SP1 Client Profile 169 | false 170 | 171 | 172 | False 173 | .NET Framework 3.5 SP1 174 | true 175 | 176 | 177 | False 178 | Windows Installer 3.1 179 | true 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 194 | -------------------------------------------------------------------------------- /MyVisualBasic/Http.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' HTTP网络请求相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Http 8 | 9 | ''' 10 | ''' 获取字符串 11 | ''' 12 | ''' 网址链接 13 | ''' 结果字符串(失败返回空字符串) 14 | ''' 15 | Public Shared Function GetString(ByVal URL As String) As String 16 | Dim Client As System.Net.WebClient = New System.Net.WebClient() 17 | Client.Encoding = System.Text.Encoding.UTF8 18 | Try 19 | Return Client.DownloadString(URL) 20 | Catch ex As Exception 21 | Return "" 22 | End Try 23 | End Function 24 | ''' 25 | ''' 获取字符串 26 | ''' 27 | ''' 网址链接 28 | ''' 使用特定的字符编码(默认UTF-8) 29 | ''' 结果字符串(失败返回空字符串) 30 | ''' 31 | Public Shared Function GetString(ByVal URL As String, ByVal Encoding As System.Text.Encoding) As String 32 | Dim Client As System.Net.WebClient = New System.Net.WebClient() 33 | Client.Encoding = Encoding 34 | Try 35 | Return Client.DownloadString(URL) 36 | Catch ex As Exception 37 | Return "" 38 | End Try 39 | End Function 40 | 41 | 42 | 43 | ''' 44 | ''' 获取字节数组 45 | ''' 46 | ''' 网址链接 47 | ''' 结果Byte数组(失败返回空Byte数组) 48 | ''' 49 | Public Shared Function GetByte(ByVal URL As String) As Byte() 50 | Dim Client As System.Net.WebClient = New System.Net.WebClient() 51 | Try 52 | Return Client.DownloadData(URL) 53 | Catch ex As Exception 54 | Return New Byte() {} 55 | End Try 56 | End Function 57 | 58 | 59 | 60 | ''' 61 | ''' 下载文件 62 | ''' 63 | ''' 文件链接 64 | ''' 保存到的文件路径(可以是相对路径) 65 | ''' 是否下载成功 66 | ''' 67 | Public Shared Function DownloadFile(ByVal URL As String, ByVal FilePath As String) As Boolean 68 | Dim Client As System.Net.WebClient = New System.Net.WebClient() 69 | Try 70 | Client.DownloadFile(New System.Uri(URL), FilePath) 71 | Return True 72 | Catch ex As Exception 73 | Return False 74 | End Try 75 | End Function 76 | 77 | End Class 78 | 79 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/IO.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 磁盘文件读写相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class IO 8 | 9 | ''' 10 | ''' 读取文件为Byte数组 11 | ''' 12 | ''' 文件路径(可以是相对路径) 13 | ''' 结果Byte数组(失败返回空Byte数组) 14 | ''' 15 | Public Shared Function ReadByte(ByVal FilePath As String) As Byte() 16 | Dim Reader As System.IO.FileStream 17 | Try 18 | Reader = New System.IO.FileStream(FilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read) 19 | Dim Temp(Reader.Length - 1) As Byte 20 | Reader.Read(Temp, 0, Reader.Length) 21 | Reader.Dispose() 22 | Return Temp 23 | Catch ex As Exception 24 | Return New Byte() {} 25 | End Try 26 | End Function 27 | 28 | ''' 29 | ''' 将Byte数组写入文件(覆盖) 30 | ''' 31 | ''' Byte数组 32 | ''' 文件路径(可以是相对路径) 33 | ''' 是否写入成功 34 | ''' 35 | Public Shared Function WriteByte(ByVal Source As Byte(), ByVal FilePath As String) As Boolean 36 | Dim Writer As System.IO.FileStream 37 | Try 38 | Writer = New System.IO.FileStream(FilePath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite) 39 | Writer.Write(Source, 0, Source.Length) 40 | Writer.Dispose() 41 | Return True 42 | Catch ex As Exception 43 | Return False 44 | End Try 45 | End Function 46 | 47 | ''' 48 | ''' 将Byte数组写入文件(追加) 49 | ''' 50 | ''' Byte数组 51 | ''' 文件路径(可以是相对路径) 52 | ''' 是否写入成功 53 | ''' 54 | Public Shared Function AppendByte(ByVal Source As Byte(), ByVal FilePath As String) As Boolean 55 | Dim Writer As System.IO.FileStream 56 | Try 57 | Writer = New System.IO.FileStream(FilePath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite) 58 | Writer.Write(Source, Writer.Length, Source.Length) 59 | Writer.Dispose() 60 | Return True 61 | Catch ex As Exception 62 | Return False 63 | End Try 64 | End Function 65 | 66 | 67 | 68 | ''' 69 | ''' 读取文件为字符串(UTF-8) 70 | ''' 71 | ''' 文件路径(可以是相对路径) 72 | ''' 结果字符串(失败返回空字符串) 73 | ''' 74 | Public Shared Function ReadString(ByVal FilePath As String) As String 75 | Dim Reader As System.IO.StreamReader 76 | Try 77 | Reader = New System.IO.StreamReader(FilePath, System.Text.Encoding.UTF8) 78 | Dim Temp As String = Reader.ReadToEnd() 79 | Reader.Dispose() 80 | Return Temp 81 | Catch ex As Exception 82 | Return "" 83 | End Try 84 | End Function 85 | 86 | ''' 87 | ''' 将字符串写入文件(覆盖,不包含UTF8的BOM头) 88 | ''' 89 | ''' 字符串 90 | ''' 文件路径(可以是相对路径) 91 | ''' 是否写入成功 92 | ''' 93 | Public Shared Function WriteString(ByVal Source As String, ByVal FilePath As String) As Boolean 94 | Dim Writer As System.IO.StreamWriter 95 | Try 96 | Writer = New System.IO.StreamWriter(FilePath, False, New System.Text.UTF8Encoding(False)) 97 | Writer.Write(Source) 98 | Writer.Dispose() 99 | Return True 100 | Catch ex As Exception 101 | Return False 102 | End Try 103 | End Function 104 | 105 | ''' 106 | ''' 将字符串写入文件(追加,不包含UTF8的BOM头) 107 | ''' 108 | ''' 字符串 109 | ''' 文件路径(可以是相对路径) 110 | ''' 是否写入成功 111 | ''' 112 | Public Shared Function AppendString(ByVal Source As String, ByVal FilePath As String) As Boolean 113 | Dim Writer As System.IO.StreamWriter 114 | Try 115 | Writer = New System.IO.StreamWriter(FilePath, True, New System.Text.UTF8Encoding(False)) 116 | Writer.Write(Source) 117 | Writer.Dispose() 118 | Return True 119 | Catch ex As Exception 120 | Return False 121 | End Try 122 | End Function 123 | 124 | 125 | 126 | ''' 127 | ''' 读取文件中的一维字符串数组(UTF-8,注意文件的字符串内容为空时,返回空String数组) 128 | ''' 129 | ''' 文件路径(可以是相对路径) 130 | ''' 结果字符串数组(失败返回空String数组) 131 | ''' 132 | Public Shared Function ReadStringArray(ByVal FilePath As String) As String() 133 | If System.IO.File.Exists(FilePath) = False Then 134 | Return New String() {} 135 | End If 136 | Dim FileInfo As New System.IO.FileInfo(FilePath) 137 | If FileInfo.Length = 0 Then 138 | Return New String() {} 139 | End If 140 | Dim Reader As System.IO.StreamReader 141 | Try 142 | Reader = New System.IO.StreamReader(FilePath, System.Text.Encoding.UTF8) 143 | Dim Temp As String = Reader.ReadToEnd() 144 | Reader.Dispose() 145 | If Temp.Length = 0 Then 146 | Return New String() {} 147 | Else 148 | Temp = Temp.Replace(Chr(13) + Chr(10), Chr(10)) 149 | Dim Result As String() = Temp.Split(New Char() {Chr(10)}) 150 | For I = 0 To Result.Length - 1 151 | Result(I) = Result(I).Replace("\\", "\@") 152 | Result(I) = Result(I).Replace("\r", Chr(13)) 153 | Result(I) = Result(I).Replace("\n", Chr(10)) 154 | Result(I) = Result(I).Replace("\@", "\") 155 | Next 156 | Return Result 157 | End If 158 | Catch ex As Exception 159 | Return New String() {} 160 | End Try 161 | End Function 162 | 163 | ''' 164 | ''' 将一维字符串数组写入文件(覆盖,不包含UTF8的BOM头,注意数组的字符串内容为空时,不会实际创建或写入文件) 165 | ''' 166 | ''' 字符串数组 167 | ''' 文件路径(可以是相对路径) 168 | ''' 是否写入成功 169 | ''' 170 | Public Shared Function WriteStringArray(ByVal StringArray As String(), ByVal FilePath As String) As Boolean 171 | If StringArray.Length = 0 Then 172 | Return False 173 | End If 174 | For I = 0 To StringArray.Length - 1 175 | StringArray(I) = StringArray(I).Replace("\", "\\") 176 | StringArray(I) = StringArray(I).Replace(Chr(13), "\r") 177 | StringArray(I) = StringArray(I).Replace(Chr(10), "\n") 178 | Next 179 | Dim Builder As System.Text.StringBuilder 180 | Dim Writer As System.IO.StreamWriter 181 | Try 182 | Builder = New System.Text.StringBuilder() 183 | Builder.Append(StringArray(0)) 184 | For I = 1 To StringArray.Length - 1 185 | Builder.Append(vbCrLf & StringArray(I)) 186 | Next 187 | If Builder.Length = 0 Then 188 | Return False 189 | End If 190 | Writer = New System.IO.StreamWriter(FilePath, False, New System.Text.UTF8Encoding(False)) 191 | Writer.Write(Builder) 192 | Writer.Dispose() 193 | Return True 194 | Catch ex As Exception 195 | Return False 196 | End Try 197 | End Function 198 | 199 | ''' 200 | ''' 将一维字符串数组写入文件(追加,不包含UTF8的BOM头,注意数组的字符串内容为空时,不会实际创建或写入文件) 201 | ''' 202 | ''' 字符串数组 203 | ''' 文件路径(可以是相对路径) 204 | ''' 是否写入成功 205 | ''' 206 | Public Shared Function AppendStringArray(ByVal StringArray As String(), ByVal FilePath As String) As Boolean 207 | If StringArray.Length = 0 Then 208 | Return False 209 | End If 210 | For I = 0 To StringArray.Length - 1 211 | StringArray(I) = StringArray(I).Replace("\", "\\") 212 | StringArray(I) = StringArray(I).Replace(Chr(13), "\r") 213 | StringArray(I) = StringArray(I).Replace(Chr(10), "\n") 214 | Next 215 | Dim Builder As System.Text.StringBuilder 216 | Dim Writer As System.IO.StreamWriter 217 | Try 218 | Builder = New System.Text.StringBuilder() 219 | If System.IO.File.Exists(FilePath) Then 220 | Dim FileInfo As New System.IO.FileInfo(FilePath) 221 | If FileInfo.Length > 0 Then 222 | Builder.Append(vbCrLf) 223 | End If 224 | End If 225 | Builder.Append(StringArray(0)) 226 | For I = 1 To StringArray.Length - 1 227 | Builder.Append(vbCrLf & StringArray(I)) 228 | Next 229 | If Builder.Length = 0 Then 230 | Return False 231 | End If 232 | Writer = New System.IO.StreamWriter(FilePath, True, New System.Text.UTF8Encoding(False)) 233 | Writer.Write(Builder) 234 | Writer.Dispose() 235 | Return True 236 | Catch ex As Exception 237 | Return False 238 | End Try 239 | End Function 240 | 241 | 242 | 243 | ''' 244 | ''' 获取指定目录下的全部文件的路径列表 245 | ''' 246 | ''' 要搜索的文件夹路径(默认为程序运行的当前文件夹) 247 | ''' 包含所有文件路径的结果字符串数组(失败返回空String数组) 248 | ''' 249 | Public Shared Function ListFile(Optional ByVal SearchDirectory As String = ".\") As String() 250 | Dim FileList As List(Of String) = New List(Of String) 251 | Dim Directory As List(Of String) = New List(Of String) 252 | Try 253 | For Each Temp As String In System.IO.Directory.GetFiles(SearchDirectory) 254 | FileList.Add(Temp) 255 | Next 256 | For Each Temp As String In System.IO.Directory.GetDirectories(SearchDirectory) 257 | Directory.Add(Temp) 258 | Next 259 | Dim Index As Integer = 0 260 | While Directory.Count > Index 261 | SearchDirectory = Directory(Index) 262 | Index = Index + 1 263 | For Each Temp As String In System.IO.Directory.GetFiles(SearchDirectory) 264 | FileList.Add(Temp) 265 | Next 266 | For Each Temp As String In System.IO.Directory.GetDirectories(SearchDirectory) 267 | Directory.Add(Temp) 268 | Next 269 | End While 270 | Return FileList.ToArray() 271 | Catch ex As Exception 272 | Return New String() {} 273 | End Try 274 | End Function 275 | 276 | 277 | 278 | ''' 279 | ''' 创建快捷方式文件(覆盖) 280 | ''' 281 | ''' 快捷方式指向的路径(可以是相对路径,如"1.exe") 282 | ''' 快捷方式文件的路径(可以是相对路径,如"1.lnk") 283 | ''' 打开程序的参数(例如"/?") 284 | ''' 鼠标悬停在快捷方式上的描述 285 | ''' 快捷方式的起始位置(默认设置为快捷方式指向的路径的父目录) 286 | ''' 是否创建成功 287 | ''' 288 | Public Shared Function WriteLinkFile(ByVal TargetPath As String, ByVal LinkFilePath As String, Optional ByVal Arguments As String = "", Optional ByVal Description As String = "", Optional ByVal WorkingDirectory As String = "") As Boolean 289 | Try 290 | If System.IO.File.Exists(LinkFilePath) = True Then 291 | System.IO.File.Delete(LinkFilePath) 292 | End If 293 | If TargetPath.Contains(":") = False Then 294 | TargetPath = System.IO.Directory.GetCurrentDirectory + "\" + TargetPath 295 | End If 296 | If WorkingDirectory = "" Then 297 | WorkingDirectory = System.IO.Directory.GetParent(LinkFilePath).FullName 298 | End If 299 | Dim Shortcut As Object = CreateObject("WScript.Shell").CreateShortcut(LinkFilePath) 300 | Shortcut.TargetPath = TargetPath 301 | Shortcut.IconLocation = TargetPath 302 | Shortcut.Arguments = Arguments 303 | Shortcut.Description = Description 304 | Shortcut.WorkingDirectory = WorkingDirectory 305 | Shortcut.Save() 306 | Shortcut = Nothing 307 | Return True 308 | Catch ex As Exception 309 | Return False 310 | End Try 311 | End Function 312 | 313 | ''' 314 | ''' 读取快捷方式指向的路径(获得完整的绝对路径) 315 | ''' 316 | ''' 快捷方式文件的路径(可以是相对路径,如"1.lnk") 317 | ''' 结果字符串(失败返回空字符串"") 318 | ''' 319 | Public Shared Function ReadLinkFile(ByVal LinkFilePath As String) As String 320 | Try 321 | Dim Shortcut As Object = CreateObject("WScript.Shell").CreateShortcut(LinkFilePath) 322 | Return Shortcut.TargetPath 323 | Catch ex As Exception 324 | Return "" 325 | End Try 326 | End Function 327 | 328 | End Class 329 | 330 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/Keyboard.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 模拟键盘操作相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Keyboard 8 | Private Declare Sub keybd_event Lib "user32.dll" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Int32, ByVal dwExtraInfo As UInt32) 9 | Private Declare Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" (ByVal wCode As UInt32, ByVal wMapType As UInt32) As UInt32 10 | _ 11 | Private Enum KeyEvent As Int32 12 | Down = 0 13 | Up = 2 14 | End Enum 15 | 16 | ''' 17 | ''' 按下单个键位(保持按下状态,要注意,按下+释放才是一次完整的按键过程) 18 | ''' 19 | ''' 键位(Windows.Forms.Keys) 20 | ''' 是否执行成功 21 | ''' 22 | Public Shared Function Down(ByVal Key As Keys) As Boolean 23 | Try 24 | keybd_event(Key, MapVirtualKey(Key, 0), KeyEvent.Down, 0) 25 | Return True 26 | Catch ex As Exception 27 | Return False 28 | End Try 29 | End Function 30 | ''' 31 | ''' 释放单个键位(取消按下状态,要注意,按下+释放才是一次完整的按键过程) 32 | ''' 33 | ''' 键位(Windows.Forms.Keys) 34 | ''' 是否执行成功 35 | ''' 36 | Public Shared Function Up(ByVal Key As Keys) As Boolean 37 | Try 38 | keybd_event(Key, MapVirtualKey(Key, 0), KeyEvent.Up, 0) 39 | Return True 40 | Catch ex As Exception 41 | Return False 42 | End Try 43 | End Function 44 | 45 | ''' 46 | ''' 点击单个键位(包括按下+释放过程) 47 | ''' 48 | ''' 键位(Windows.Forms.Keys) 49 | ''' 是否执行成功 50 | ''' 51 | Public Shared Function Click(ByVal Key As Keys) As Boolean 52 | Try 53 | keybd_event(Key, MapVirtualKey(Key, 0), KeyEvent.Down, 0) 54 | keybd_event(Key, MapVirtualKey(Key, 0), KeyEvent.Up, 0) 55 | Return True 56 | Catch ex As Exception 57 | Return False 58 | End Try 59 | End Function 60 | ''' 61 | ''' 点击多个键位,完成组合键(包括按下+释放过程) 62 | ''' 63 | ''' 键位数组(Windows.Forms.Keys) 64 | ''' 是否执行成功 65 | ''' 66 | Public Shared Function Click(ByVal Keys As Keys()) As Boolean 67 | Try 68 | For Each Key As Keys In Keys 69 | keybd_event(Key, MapVirtualKey(Key, 0), KeyEvent.Down, 0) 70 | Next 71 | For Each Key As Keys In Keys 72 | keybd_event(Key, MapVirtualKey(Key, 0), KeyEvent.Up, 0) 73 | Next 74 | Return True 75 | Catch ex As Exception 76 | Return False 77 | End Try 78 | End Function 79 | ''' 80 | ''' 点击多个键位,完成组合键(包括按下+释放过程) 81 | ''' 82 | ''' 键位1(Windows.Forms.Keys) 83 | ''' 键位2(Windows.Forms.Keys) 84 | ''' 键位3(Windows.Forms.Keys) 85 | ''' 键位4(Windows.Forms.Keys) 86 | ''' 是否执行成功 87 | ''' 88 | Public Shared Function Click(Keys1 As Keys, ByVal Keys2 As Keys, Optional ByVal Keys3 As Keys = Nothing, Optional ByVal Keys4 As Keys = Nothing) As Boolean 89 | Try 90 | Dim Temp As New List(Of Keys) 91 | Temp.Add(Keys1) 92 | Temp.Add(Keys2) 93 | If Keys3 <> Nothing Then 94 | Temp.Add(Keys3) 95 | End If 96 | If Keys4 <> Nothing Then 97 | Temp.Add(Keys4) 98 | End If 99 | For Each Key As Keys In Temp 100 | keybd_event(Key, MapVirtualKey(Key, 0), KeyEvent.Down, 0) 101 | Next 102 | For Each Key As Keys In Temp 103 | keybd_event(Key, MapVirtualKey(Key, 0), KeyEvent.Up, 0) 104 | Next 105 | Return True 106 | Catch ex As Exception 107 | Return False 108 | End Try 109 | End Function 110 | 111 | 112 | 113 | Private Declare Function GetAsyncKeyState Lib "user32.dll" Alias "GetAsyncKeyState" (ByVal vKey As Int32) As Int16 114 | _ 115 | Private Enum KeyState As Int16 116 | Down1 = -32767 117 | Down2 = -32768 118 | End Enum 119 | 120 | ''' 121 | ''' 判断单个键位是否处于按下状态 122 | ''' 123 | ''' 键位(Windows.Forms.Keys) 124 | ''' 是否处于按下状态 125 | ''' 126 | Public Shared Function CheckDown(ByVal Key As Keys) As Boolean 127 | Dim Temp As Int16 = GetAsyncKeyState(Key) 128 | If Temp = KeyState.Down1 Or Temp = KeyState.Down2 Then 129 | Return True 130 | Else 131 | Return False 132 | End If 133 | End Function 134 | 135 | ''' 136 | ''' 设置CapsLock的状态 137 | ''' 138 | ''' 是否打开CapsLock 139 | ''' 是否执行成功 140 | ''' 141 | Public Shared Function SetCapsLock(ByVal State As Boolean) As Boolean 142 | Try 143 | If Not My.Computer.Keyboard.CapsLock = State Then 144 | keybd_event(Keys.CapsLock, MapVirtualKey(Keys.CapsLock, 0), KeyEvent.Down, 0) 145 | keybd_event(Keys.CapsLock, MapVirtualKey(Keys.CapsLock, 0), KeyEvent.Up, 0) 146 | End If 147 | Return True 148 | Catch ex As Exception 149 | Return False 150 | End Try 151 | End Function 152 | ''' 153 | ''' 设置ScrollLock的状态 154 | ''' 155 | ''' 是否打开ScrollLock 156 | ''' 是否执行成功 157 | ''' 158 | Public Shared Function SetScrollLock(ByVal State As Boolean) As Boolean 159 | Try 160 | If Not My.Computer.Keyboard.ScrollLock = State Then 161 | keybd_event(Keys.Scroll, MapVirtualKey(Keys.Scroll, 0), KeyEvent.Down, 0) 162 | keybd_event(Keys.Scroll, MapVirtualKey(Keys.Scroll, 0), KeyEvent.Up, 0) 163 | End If 164 | Return True 165 | Catch ex As Exception 166 | Return False 167 | End Try 168 | End Function 169 | ''' 170 | ''' 设置NumLock的状态 171 | ''' 172 | ''' 是否打开NumLock 173 | ''' 是否执行成功 174 | ''' 175 | Public Shared Function SetNumLock(ByVal State As Boolean) As Boolean 176 | Try 177 | If Not My.Computer.Keyboard.NumLock = State Then 178 | keybd_event(Keys.NumLock, MapVirtualKey(Keys.NumLock, 0), KeyEvent.Down, 0) 179 | keybd_event(Keys.NumLock, MapVirtualKey(Keys.NumLock, 0), KeyEvent.Up, 0) 180 | End If 181 | Return True 182 | Catch ex As Exception 183 | Return False 184 | End Try 185 | End Function 186 | 187 | 188 | 189 | ''' 190 | ''' 点击多个键位,输入一段字符串(包括按下+释放过程,限定字符串内容) 191 | ''' 192 | ''' 键位字符串(只支持输入字母、数字、空格、换行、键盘上有的英文特殊符号,其它字符会被忽略) 193 | ''' 输入每个字符的时间间隔(单位毫秒,默认值为0,无时间间隔) 194 | ''' 是否执行成功 195 | ''' 196 | Public Shared Function Input(ByVal KeyString As String, Optional ByVal MillisecondsInterval As Integer = 0) As Boolean 197 | Dim AscString As String = "QWERTYUIOP" & "ASDFGHJKL" & "ZXCVBNM" & "1234567890" & " " & vbCrLf 198 | Dim LowerString As String = "qwertyuiop" & "asdfghjkl" & "zxcvbnm" 199 | Dim OemString As String = ";=,-./`[\]'" 200 | Dim ShiftOemString As String = ":+<_>?~{|}""" 201 | Dim OemKeys As Keys() = New Keys() {Keys.Oem1, Keys.Oemplus, Keys.Oemcomma, Keys.OemMinus, Keys.OemPeriod, Keys.Oem2, Keys.Oem3, Keys.Oem4, Keys.Oem5, Keys.Oem6, Keys.Oem7} 202 | Dim ShiftNumString As String = "!@#$%^&*()" 203 | Dim NumKeys As Keys() = New Keys() {Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9, Keys.D0} 204 | Try 205 | Dim KeyArray As Char() = KeyString.ToCharArray() 206 | For N = 0 To KeyArray.Length - 1 207 | Dim Key As Char = KeyArray(N) 208 | If N > 0 And MillisecondsInterval <> 0 Then 209 | Try 210 | System.Threading.Thread.Sleep(MillisecondsInterval) 211 | Catch ex As Exception 212 | End Try 213 | End If 214 | If AscString.Contains(Key) Then 215 | '大写字母、数字、空格(虚拟键码VK值,与字符ASCII值相同) 216 | If Not My.Computer.Keyboard.CapsLock = True Then 217 | keybd_event(Keys.CapsLock, MapVirtualKey(Keys.CapsLock, 0), KeyEvent.Down, 0) 218 | keybd_event(Keys.CapsLock, MapVirtualKey(Keys.CapsLock, 0), KeyEvent.Up, 0) 219 | End If 220 | keybd_event(Asc(Key), MapVirtualKey(Asc(Key), 0), KeyEvent.Down, 0) 221 | keybd_event(Asc(Key), MapVirtualKey(Asc(Key), 0), KeyEvent.Up, 0) 222 | ElseIf LowerString.Contains(Key) Then 223 | '小写字母 224 | If Not My.Computer.Keyboard.CapsLock = False Then 225 | keybd_event(Keys.CapsLock, MapVirtualKey(Keys.CapsLock, 0), KeyEvent.Down, 0) 226 | keybd_event(Keys.CapsLock, MapVirtualKey(Keys.CapsLock, 0), KeyEvent.Up, 0) 227 | End If 228 | Key = Key.ToString.ToUpper() 229 | keybd_event(Asc(Key), MapVirtualKey(Asc(Key), 0), KeyEvent.Down, 0) 230 | keybd_event(Asc(Key), MapVirtualKey(Asc(Key), 0), KeyEvent.Up, 0) 231 | ElseIf OemString.Contains(Key) Then 232 | 'OEM键特殊符号 233 | Dim I As Integer = OemString.IndexOf(Key) 234 | keybd_event(OemKeys(I), MapVirtualKey(OemKeys(I), 0), KeyEvent.Down, 0) 235 | keybd_event(OemKeys(I), MapVirtualKey(OemKeys(I), 0), KeyEvent.Up, 0) 236 | ElseIf ShiftOemString.Contains(Key) Then 237 | 'Shift+OEM键特殊符号 238 | Dim I As Integer = ShiftOemString.IndexOf(Key) 239 | keybd_event(Keys.ShiftKey, MapVirtualKey(Keys.ShiftKey, 0), KeyEvent.Down, 0) 240 | keybd_event(OemKeys(I), MapVirtualKey(OemKeys(I), 0), KeyEvent.Down, 0) 241 | keybd_event(OemKeys(I), MapVirtualKey(OemKeys(I), 0), KeyEvent.Up, 0) 242 | keybd_event(Keys.ShiftKey, MapVirtualKey(Keys.ShiftKey, 0), KeyEvent.Up, 0) 243 | ElseIf ShiftNumString.Contains(Key) Then 244 | 'Shift+数字键特殊符号 245 | Dim I As Integer = ShiftNumString.IndexOf(Key) 246 | keybd_event(Keys.ShiftKey, MapVirtualKey(Keys.ShiftKey, 0), KeyEvent.Down, 0) 247 | keybd_event(NumKeys(I), MapVirtualKey(NumKeys(I), 0), KeyEvent.Down, 0) 248 | keybd_event(NumKeys(I), MapVirtualKey(NumKeys(I), 0), KeyEvent.Up, 0) 249 | keybd_event(Keys.ShiftKey, MapVirtualKey(Keys.ShiftKey, 0), KeyEvent.Up, 0) 250 | End If 251 | Next 252 | Return True 253 | Catch ex As Exception 254 | Return False 255 | End Try 256 | End Function 257 | 258 | ''' 259 | ''' 连续复制粘贴字符,输入一段字符串(使用Ctrl+V组合键,速度太快时可能出错) 260 | ''' 261 | ''' 要输入的字符串 262 | ''' 输入每个字符的时间间隔(单位毫秒,默认值为100,实测,在值较小、系统卡顿时,可能会发生字符混乱,建议设置为20以上) 263 | ''' 是否执行成功 264 | ''' 265 | Public Shared Function PasteDelay(ByVal Source As String, Optional ByVal MillisecondsInterval As Integer = 100) As Boolean 266 | Try 267 | Dim UpperString As String = "QWERTYUIOP" & "ASDFGHJKL" & "ZXCVBNM" 268 | For I = 0 To Source.Length - 1 269 | If I > 0 And MillisecondsInterval <> 0 Then 270 | Try 271 | System.Threading.Thread.Sleep(MillisecondsInterval) 272 | Catch ex As Exception 273 | End Try 274 | End If 275 | If UpperString.Contains(Source(I)) Then 276 | '大写字母 277 | If Not My.Computer.Keyboard.CapsLock = True Then 278 | keybd_event(Keys.CapsLock, MapVirtualKey(Keys.CapsLock, 0), KeyEvent.Down, 0) 279 | keybd_event(Keys.CapsLock, MapVirtualKey(Keys.CapsLock, 0), KeyEvent.Up, 0) 280 | End If 281 | End If 282 | System.Windows.Forms.Clipboard.SetText(Source(I)) 283 | keybd_event(Keys.ControlKey, MapVirtualKey(Keys.ControlKey, 0), KeyEvent.Down, 0) 284 | keybd_event(Keys.V, MapVirtualKey(Keys.V, 0), KeyEvent.Down, 0) 285 | keybd_event(Keys.V, MapVirtualKey(Keys.V, 0), KeyEvent.Up, 0) 286 | keybd_event(Keys.ControlKey, MapVirtualKey(Keys.ControlKey, 0), KeyEvent.Up, 0) 287 | Next 288 | Return True 289 | Catch ex As Exception 290 | Return False 291 | End Try 292 | End Function 293 | 294 | 295 | 296 | ''' 297 | ''' 复制粘贴,输入一段字符串(使用Ctrl+V组合键) 298 | ''' 299 | ''' 要输入的字符串 300 | ''' 是否执行成功 301 | ''' 302 | Public Shared Function Paste(ByVal Source As String) As Boolean 303 | Try 304 | System.Windows.Forms.Clipboard.SetText(Source) 305 | keybd_event(Keys.ControlKey, MapVirtualKey(Keys.ControlKey, 0), KeyEvent.Down, 0) 306 | keybd_event(Keys.V, MapVirtualKey(Keys.V, 0), KeyEvent.Down, 0) 307 | keybd_event(Keys.V, MapVirtualKey(Keys.V, 0), KeyEvent.Up, 0) 308 | keybd_event(Keys.ControlKey, MapVirtualKey(Keys.ControlKey, 0), KeyEvent.Up, 0) 309 | Return True 310 | Catch ex As Exception 311 | Return False 312 | End Try 313 | End Function 314 | ''' 315 | ''' 复制粘贴,输入一个图片(使用Ctrl+V组合键) 316 | ''' 317 | ''' 要输入的图片 318 | ''' 是否执行成功 319 | ''' 320 | Public Shared Function Paste(ByVal Source As Bitmap) As Boolean 321 | Try 322 | System.Windows.Forms.Clipboard.SetImage(Source) 323 | keybd_event(Keys.ControlKey, MapVirtualKey(Keys.ControlKey, 0), KeyEvent.Down, 0) 324 | keybd_event(Keys.V, MapVirtualKey(Keys.V, 0), KeyEvent.Down, 0) 325 | keybd_event(Keys.V, MapVirtualKey(Keys.V, 0), KeyEvent.Up, 0) 326 | keybd_event(Keys.ControlKey, MapVirtualKey(Keys.ControlKey, 0), KeyEvent.Up, 0) 327 | Return True 328 | Catch ex As Exception 329 | Return False 330 | End Try 331 | End Function 332 | 333 | End Class 334 | 335 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/Mouse.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 模拟鼠标操作相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Mouse 8 | 9 | Private Declare Sub mouse_event Lib "user32.dll" Alias "mouse_event" (ByVal dwFlags As Int32, ByVal dX As Int32, ByVal dY As Int32, ByVal dwData As Int32, ByVal dwExtraInfo As UInt32) 10 | _ 11 | Private Enum MouseEvent As Int32 12 | Move = 1 13 | LeftButtonDown = 2 14 | LeftButtonUp = 4 15 | RightButtonDown = 8 16 | RightButtonUp = 16 17 | MiddleButtonDown = 32 18 | MiddleButtonUp = 64 19 | Wheel = 2048 20 | AbsoluteLocation = 32768 21 | AbsoluteScale = 65535 22 | End Enum 23 | 24 | ''' 25 | ''' 移动鼠标位置,位移一定的像素点距离 26 | ''' 27 | ''' 横向位移(向右为正方向) 28 | ''' 纵向位移(向下为正方向) 29 | ''' 是否执行成功 30 | ''' 31 | Public Shared Function MoveByPixel(ByVal x As Integer, ByVal y As Integer) As Boolean 32 | Try 33 | mouse_event(MouseEvent.Move, x, y, 0, 0) 34 | Return True 35 | Catch ex As Exception 36 | Return False 37 | End Try 38 | End Function 39 | ''' 40 | ''' 移动鼠标位置,位移一定的屏幕百分比 41 | ''' 42 | ''' 横向位移(百分比,向右为正方向) 43 | ''' 纵向位移(百分比,向下为正方向) 44 | ''' 是否执行成功 45 | ''' 46 | Public Shared Function MoveByPercent(ByVal x As Double, ByVal y As Double) As Boolean 47 | Try 48 | mouse_event(MouseEvent.Move, x * My.Computer.Screen.Bounds.Width, y * My.Computer.Screen.Bounds.Height, 0, 0) 49 | Return True 50 | Catch ex As Exception 51 | Return False 52 | End Try 53 | End Function 54 | ''' 55 | ''' 移动鼠标位置,到指定的像素点坐标 56 | ''' 57 | ''' 横坐标(原点为屏幕左上角,向右为正方向) 58 | ''' 纵坐标(原点为屏幕左上角,向下为正方向) 59 | ''' 是否执行成功 60 | ''' 61 | Public Shared Function MoveToPixel(ByVal x As Integer, ByVal y As Integer) As Boolean 62 | Try 63 | mouse_event(MouseEvent.Move Or MouseEvent.AbsoluteLocation, x / My.Computer.Screen.Bounds.Width * MouseEvent.AbsoluteScale, y / My.Computer.Screen.Bounds.Height * MouseEvent.AbsoluteScale, 0, 0) 64 | Return True 65 | Catch ex As Exception 66 | Return False 67 | End Try 68 | End Function 69 | ''' 70 | ''' 移动鼠标位置,到指定的屏幕百分比坐标 71 | ''' 72 | ''' 横坐标(百分比,原点为屏幕左上角,向右为正方向) 73 | ''' 纵坐标(百分比,原点为屏幕左上角,向下为正方向) 74 | ''' 是否执行成功 75 | ''' 76 | Public Shared Function MoveToPercent(ByVal x As Double, ByVal y As Double) As Boolean 77 | Try 78 | mouse_event(MouseEvent.Move Or MouseEvent.AbsoluteLocation, x * MouseEvent.AbsoluteScale, y * MouseEvent.AbsoluteScale, 0, 0) 79 | Return True 80 | Catch ex As Exception 81 | Return False 82 | End Try 83 | End Function 84 | 85 | 86 | 87 | ''' 88 | ''' 获取鼠标位置,像素点坐标值 89 | ''' 90 | ''' 结果坐标值(原点为屏幕左上角,X向右为正方向,Y向下为正方向) 91 | ''' 92 | Public Shared Function Position() As Point 93 | Return Windows.Forms.Control.MousePosition 94 | End Function 95 | ''' 96 | ''' 获取鼠标位置的显示颜色,像素点Color值 97 | ''' 98 | ''' 结果颜色值(System.Drawing.Color) 99 | ''' 100 | Public Shared Function PositionColor() As Color 101 | Dim ScreenArea As Rectangle = My.Computer.Screen.Bounds 102 | Dim Temp As New Bitmap(ScreenArea.Width, ScreenArea.Height) 103 | Dim Graphics As Graphics = Graphics.FromImage(Temp) 104 | Dim Result As Color 105 | Graphics.CopyFromScreen(0, 0, 0, 0, ScreenArea.Size) 106 | Graphics.Dispose() 107 | Result = Temp.GetPixel(Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y) 108 | Temp.Dispose() 109 | Return Result 110 | End Function 111 | ''' 112 | ''' 移动鼠标位置,到指定的像素点坐标 113 | ''' 114 | ''' 位置坐标(原点为屏幕左上角,X向右为正方向,Y向下为正方向) 115 | ''' 是否执行成功 116 | ''' 117 | Public Shared Function MoveToPosition(ByVal Position As Point) As Boolean 118 | Try 119 | mouse_event(MouseEvent.Move Or MouseEvent.AbsoluteLocation, Position.X / My.Computer.Screen.Bounds.Width * MouseEvent.AbsoluteScale, Position.Y / My.Computer.Screen.Bounds.Height * MouseEvent.AbsoluteScale, 0, 0) 120 | Return True 121 | Catch ex As Exception 122 | Return False 123 | End Try 124 | End Function 125 | 126 | 127 | 128 | ''' 129 | ''' 按下鼠标左键(保持按下状态) 130 | ''' 131 | ''' 是否执行成功 132 | ''' 133 | Public Shared Function LeftDown() As Boolean 134 | Try 135 | mouse_event(MouseEvent.LeftButtonDown, 0, 0, 0, 0) 136 | Return True 137 | Catch ex As Exception 138 | Return False 139 | End Try 140 | End Function 141 | ''' 142 | ''' 释放鼠标左键(取消按下状态) 143 | ''' 144 | ''' 是否执行成功 145 | ''' 146 | Public Shared Function LeftUp() As Boolean 147 | Try 148 | mouse_event(MouseEvent.LeftButtonUp, 0, 0, 0, 0) 149 | Return True 150 | Catch ex As Exception 151 | Return False 152 | End Try 153 | End Function 154 | ''' 155 | ''' 鼠标左键单击 156 | ''' 157 | ''' 是否执行成功 158 | ''' 159 | Public Shared Function LeftClick() As Boolean 160 | Try 161 | mouse_event(MouseEvent.LeftButtonDown Or MouseEvent.LeftButtonUp, 0, 0, 0, 0) 162 | Return True 163 | Catch ex As Exception 164 | Return False 165 | End Try 166 | End Function 167 | ''' 168 | ''' 鼠标左键双击 169 | ''' 170 | ''' 是否执行成功 171 | ''' 172 | Public Shared Function LeftDoubleClick() As Boolean 173 | Try 174 | mouse_event(MouseEvent.LeftButtonDown Or MouseEvent.LeftButtonUp, 0, 0, 0, 0) 175 | mouse_event(MouseEvent.LeftButtonDown Or MouseEvent.LeftButtonUp, 0, 0, 0, 0) 176 | Return True 177 | Catch ex As Exception 178 | Return False 179 | End Try 180 | End Function 181 | 182 | ''' 183 | ''' 按下鼠标中键(保持按下状态) 184 | ''' 185 | ''' 是否执行成功 186 | ''' 187 | Public Shared Function MiddleDown() As Boolean 188 | Try 189 | mouse_event(MouseEvent.MiddleButtonDown, 0, 0, 0, 0) 190 | Return True 191 | Catch ex As Exception 192 | Return False 193 | End Try 194 | End Function 195 | ''' 196 | ''' 释放鼠标中键(取消按下状态) 197 | ''' 198 | ''' 是否执行成功 199 | ''' 200 | Public Shared Function MiddleUp() As Boolean 201 | Try 202 | mouse_event(MouseEvent.MiddleButtonUp, 0, 0, 0, 0) 203 | Return True 204 | Catch ex As Exception 205 | Return False 206 | End Try 207 | End Function 208 | ''' 209 | ''' 鼠标中键单击 210 | ''' 211 | ''' 是否执行成功 212 | ''' 213 | Public Shared Function MiddleClick() As Boolean 214 | Try 215 | mouse_event(MouseEvent.MiddleButtonDown Or MouseEvent.MiddleButtonUp, 0, 0, 0, 0) 216 | Return True 217 | Catch ex As Exception 218 | Return False 219 | End Try 220 | End Function 221 | ''' 222 | ''' 鼠标中键双击 223 | ''' 224 | ''' 是否执行成功 225 | ''' 226 | Public Shared Function MiddleDoubleClick() As Boolean 227 | Try 228 | mouse_event(MouseEvent.MiddleButtonDown Or MouseEvent.MiddleButtonUp, 0, 0, 0, 0) 229 | mouse_event(MouseEvent.MiddleButtonDown Or MouseEvent.MiddleButtonUp, 0, 0, 0, 0) 230 | Return True 231 | Catch ex As Exception 232 | Return False 233 | End Try 234 | End Function 235 | 236 | ''' 237 | ''' 按下鼠标右键(保持按下状态) 238 | ''' 239 | ''' 是否执行成功 240 | ''' 241 | Public Shared Function RightDown() As Boolean 242 | Try 243 | mouse_event(MouseEvent.RightButtonDown, 0, 0, 0, 0) 244 | Return True 245 | Catch ex As Exception 246 | Return False 247 | End Try 248 | End Function 249 | ''' 250 | ''' 释放鼠标右键(取消按下状态) 251 | ''' 252 | ''' 是否执行成功 253 | ''' 254 | Public Shared Function RightUp() As Boolean 255 | Try 256 | mouse_event(MouseEvent.RightButtonUp, 0, 0, 0, 0) 257 | Return True 258 | Catch ex As Exception 259 | Return False 260 | End Try 261 | End Function 262 | ''' 263 | ''' 鼠标右键单击 264 | ''' 265 | ''' 是否执行成功 266 | ''' 267 | Public Shared Function RightClick() As Boolean 268 | Try 269 | mouse_event(MouseEvent.RightButtonDown Or MouseEvent.RightButtonUp, 0, 0, 0, 0) 270 | Return True 271 | Catch ex As Exception 272 | Return False 273 | End Try 274 | End Function 275 | ''' 276 | ''' 鼠标右键双击 277 | ''' 278 | ''' 是否执行成功 279 | ''' 280 | Public Shared Function RightDoubleClick() As Boolean 281 | Try 282 | mouse_event(MouseEvent.RightButtonDown Or MouseEvent.RightButtonUp, 0, 0, 0, 0) 283 | mouse_event(MouseEvent.RightButtonDown Or MouseEvent.RightButtonUp, 0, 0, 0, 0) 284 | Return True 285 | Catch ex As Exception 286 | Return False 287 | End Try 288 | End Function 289 | 290 | 291 | 292 | ''' 293 | ''' 鼠标滚轮向下滚动 294 | ''' 295 | ''' 滚动距离(单位为像素) 296 | ''' 是否执行成功 297 | ''' 298 | Public Shared Function WheelDown(ByVal ScrollValue As Integer) As Boolean 299 | Try 300 | mouse_event(MouseEvent.Wheel, 0, 0, -ScrollValue, 0) 301 | Return True 302 | Catch ex As Exception 303 | Return False 304 | End Try 305 | End Function 306 | ''' 307 | ''' 鼠标滚轮向上滚动 308 | ''' 309 | ''' 滚动距离(单位为像素) 310 | ''' 是否执行成功 311 | ''' 312 | Public Shared Function WheelUp(ByVal ScrollValue As Integer) As Boolean 313 | Try 314 | mouse_event(MouseEvent.Wheel, 0, 0, ScrollValue, 0) 315 | Return True 316 | Catch ex As Exception 317 | Return False 318 | End Try 319 | End Function 320 | 321 | End Class 322 | 323 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/Power.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 电源管理计划相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Power 8 | 9 | ''' 10 | ''' 设定关机计划(同步阻塞,注意会覆盖之前设定的关机/重启计划) 11 | ''' 12 | ''' 延时时间(单位秒,最大值315360000,10年,默认值为0,立即执行) 13 | ''' 是否执行成功 14 | ''' 15 | Public Shared Function ShutDown(Optional ByVal DelaySecond As Integer = 0) As Boolean 16 | Try 17 | Dim p As New Process 18 | p.StartInfo.FileName = "cmd.exe" 19 | p.StartInfo.UseShellExecute = False 20 | p.StartInfo.RedirectStandardInput = True 21 | p.StartInfo.RedirectStandardOutput = True 22 | p.StartInfo.RedirectStandardError = True 23 | p.StartInfo.CreateNoWindow = True 24 | p.Start() 25 | p.StandardInput.WriteLine("shutdown -a >nul 2>nul") 26 | p.StandardInput.WriteLine("shutdown -s -t " & DelaySecond & " >nul 2>nul") 27 | p.StandardInput.WriteLine("exit") 28 | p.StandardOutput.ReadToEnd() 29 | p.StandardOutput.Close() 30 | p.Dispose() 31 | Return True 32 | Catch ex As Exception 33 | Return False 34 | End Try 35 | End Function 36 | ''' 37 | ''' 设定关机计划(异步执行,注意会覆盖之前设定的关机/重启计划) 38 | ''' 39 | ''' 延时时间(单位秒,最大值315360000,10年,默认值为0,立即执行) 40 | ''' 是否执行成功 41 | ''' 42 | Public Shared Function ShutDownAsync(Optional ByVal DelaySecond As Integer = 0) As Boolean 43 | Try 44 | Shell("shutdown -a", AppWinStyle.Hide, False) 45 | Shell("shutdown -s -t " & DelaySecond, AppWinStyle.Hide, False) 46 | Return True 47 | Catch ex As Exception 48 | Return False 49 | End Try 50 | End Function 51 | 52 | 53 | 54 | ''' 55 | ''' 设定重启计划(同步阻塞,注意会覆盖之前设定的关机/重启计划) 56 | ''' 57 | ''' 延时时间(单位秒,最大值315360000,10年,默认值为0,立即执行) 58 | ''' 是否执行成功 59 | ''' 60 | Public Shared Function Reboot(Optional ByVal DelaySecond As Integer = 0) As Boolean 61 | Try 62 | Dim p As New Process 63 | p.StartInfo.FileName = "cmd.exe" 64 | p.StartInfo.UseShellExecute = False 65 | p.StartInfo.RedirectStandardInput = True 66 | p.StartInfo.RedirectStandardOutput = True 67 | p.StartInfo.RedirectStandardError = True 68 | p.StartInfo.CreateNoWindow = True 69 | p.Start() 70 | p.StandardInput.WriteLine("shutdown -a >nul 2>nul") 71 | p.StandardInput.WriteLine("shutdown -r -t " & DelaySecond & " >nul 2>nul") 72 | p.StandardInput.WriteLine("exit") 73 | p.StandardOutput.ReadToEnd() 74 | p.StandardOutput.Close() 75 | p.Dispose() 76 | Return True 77 | Catch ex As Exception 78 | Return False 79 | End Try 80 | End Function 81 | ''' 82 | ''' 设定重启计划(异步执行,注意会覆盖之前设定的关机/重启计划) 83 | ''' 84 | ''' 延时时间(单位秒,最大值315360000,10年,默认值为0,立即执行) 85 | ''' 是否执行成功 86 | ''' 87 | Public Shared Function RebootAsync(Optional ByVal DelaySecond As Integer = 0) As Boolean 88 | Try 89 | Shell("shutdown -a", AppWinStyle.Hide, False) 90 | Shell("shutdown -r -t " & DelaySecond, AppWinStyle.Hide, False) 91 | Return True 92 | Catch ex As Exception 93 | Return False 94 | End Try 95 | End Function 96 | 97 | 98 | 99 | ''' 100 | ''' 取消所有计划(同步阻塞,之前没有关机/重启计划时则无效果) 101 | ''' 102 | ''' 是否执行成功 103 | ''' 104 | Public Shared Function AbortPlan() As Boolean 105 | Try 106 | Dim p As New Process 107 | p.StartInfo.FileName = "cmd.exe" 108 | p.StartInfo.UseShellExecute = False 109 | p.StartInfo.RedirectStandardInput = True 110 | p.StartInfo.RedirectStandardOutput = True 111 | p.StartInfo.RedirectStandardError = True 112 | p.StartInfo.CreateNoWindow = True 113 | p.Start() 114 | p.StandardInput.WriteLine("shutdown -a >nul 2>nul") 115 | p.StandardInput.WriteLine("exit") 116 | p.StandardOutput.ReadToEnd() 117 | p.StandardOutput.Close() 118 | p.Dispose() 119 | Return True 120 | Catch ex As Exception 121 | Return False 122 | End Try 123 | End Function 124 | ''' 125 | ''' 取消所有计划(异步执行,之前没有关机/重启计划时则无效果) 126 | ''' 127 | ''' 是否执行成功 128 | ''' 129 | Public Shared Function AbortPlanAsync() As Boolean 130 | Try 131 | Shell("shutdown -a", AppWinStyle.Hide, False) 132 | Return True 133 | Catch ex As Exception 134 | Return False 135 | End Try 136 | End Function 137 | 138 | 139 | 140 | ''' 141 | ''' 锁定电脑(同步阻塞,立即执行) 142 | ''' 143 | ''' 是否执行成功 144 | ''' 145 | Public Shared Function Lock() As Boolean 146 | Try 147 | Shell("rundll32.exe user32.dll LockWorkStation", AppWinStyle.Hide, True) 148 | Return True 149 | Catch ex As Exception 150 | Return False 151 | End Try 152 | End Function 153 | ''' 154 | ''' 注销用户(同步阻塞,立即执行) 155 | ''' 156 | ''' 是否执行成功 157 | ''' 158 | Public Shared Function Logout() As Boolean 159 | Try 160 | Shell("shutdown -l", AppWinStyle.Hide, True) 161 | Return True 162 | Catch ex As Exception 163 | Return False 164 | End Try 165 | End Function 166 | ''' 167 | ''' 休眠电脑(同步阻塞,立即执行,注意系统必须启用了休眠功能才会有效果) 168 | ''' 169 | ''' 是否执行成功 170 | ''' 171 | Public Shared Function Hibernate() As Boolean 172 | Try 173 | Shell("shutdown -h", AppWinStyle.Hide, True) 174 | Return True 175 | Catch ex As Exception 176 | Return False 177 | End Try 178 | End Function 179 | 180 | End Class 181 | 182 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/Resource.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 程序资源文件相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Resource 8 | 9 | ''' 10 | ''' 读取程序嵌入的资源文件(注意必须在解决方案资源管理器中,将资源文件的"属性"-"生成操作"设置为"嵌入的资源") 11 | ''' 12 | ''' 资源文件名称(注意这个参数的值为资源文件在工程内的相对路径,例如A.zip文件在Resources文件夹内,则此处的参数应为"Resources.A.zip") 13 | ''' 结果Byte数组(失败返回空Byte数组) 14 | ''' 15 | Public Shared Function ReadByte(ByVal ResourceName As String) As Byte() 16 | Dim Reader As System.IO.Stream 17 | Try 18 | Dim MyAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 19 | Reader = MyAssembly.GetManifestResourceStream(MyAssembly.GetName().Name & "." & ResourceName) 20 | Dim Temp(Reader.Length - 1) As Byte 21 | Reader.Read(Temp, 0, Temp.Length) 22 | Reader.Dispose() 23 | Return Temp 24 | Catch ex As Exception 25 | Return New Byte() {} 26 | End Try 27 | End Function 28 | 29 | ''' 30 | ''' 读取程序嵌入的图片类型的资源文件(注意必须在解决方案资源管理器中,将资源文件的"属性"-"生成操作"设置为"嵌入的资源") 31 | ''' 32 | ''' 资源文件名称(注意这个参数的值为资源文件在工程内的相对路径,例如A.jpg文件在Resources文件夹内,则此处的参数应为"Resources.A.jpg") 33 | ''' 结果图片(失败返回1*1个像素,#00000000透明色的图片) 34 | ''' 35 | Public Shared Function ReadPicture(ByVal ResourceName As String) As Bitmap 36 | Try 37 | Dim MyAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 38 | Return New Bitmap(MyAssembly.GetManifestResourceStream(MyAssembly.GetName().Name & "." & ResourceName)) 39 | Catch ex As Exception 40 | Return New Bitmap(1, 1) 41 | End Try 42 | End Function 43 | 44 | ''' 45 | ''' 读取程序嵌入的文本类型的资源文件(注意必须在解决方案资源管理器中,将资源文件的"属性"-"生成操作"设置为"嵌入的资源") 46 | ''' 47 | ''' 资源文件名称(注意这个参数的值为资源文件在工程内的相对路径,例如A.txt文件在Resources文件夹内,则此处的参数应为"Resources.A.txt") 48 | ''' 结果字符串(失败返回空字符串) 49 | ''' 50 | Public Shared Function ReadString(ByVal ResourceName As String) As String 51 | Dim Reader As System.IO.Stream 52 | Try 53 | Dim MyAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 54 | Reader = MyAssembly.GetManifestResourceStream(MyAssembly.GetName().Name & "." & ResourceName) 55 | Dim Temp(Reader.Length - 1) As Byte 56 | Reader.Read(Temp, 0, Temp.Length) 57 | Reader.Dispose() 58 | Return System.Text.Encoding.UTF8.GetString(Temp) 59 | Catch ex As Exception 60 | Return "" 61 | End Try 62 | End Function 63 | ''' 64 | ''' 读取程序嵌入的文本类型的资源文件(注意必须在解决方案资源管理器中,将资源文件的"属性"-"生成操作"设置为"嵌入的资源") 65 | ''' 66 | ''' 资源文件名称(注意这个参数的值为资源文件在工程内的相对路径,例如A.txt文件在Resources文件夹内,则此处的参数应为"Resources.A.txt") 67 | ''' 使用特定的字符编码(默认UTF-8) 68 | ''' 结果字符串(失败返回空字符串) 69 | ''' 70 | Public Shared Function ReadString(ByVal ResourceName As String, ByVal Encoding As System.Text.Encoding) As String 71 | Dim Reader As System.IO.Stream 72 | Try 73 | Dim MyAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 74 | Reader = MyAssembly.GetManifestResourceStream(MyAssembly.GetName().Name & "." & ResourceName) 75 | Dim Temp(Reader.Length - 1) As Byte 76 | Reader.Read(Temp, 0, Temp.Length) 77 | Reader.Dispose() 78 | Return System.Text.Encoding.UTF8.GetString(Temp) 79 | Catch ex As Exception 80 | Return "" 81 | End Try 82 | End Function 83 | 84 | ''' 85 | ''' 读取程序嵌入的字符串数组类型的资源文件(注意必须在解决方案资源管理器中,将资源文件的"属性"-"生成操作"设置为"嵌入的资源") 86 | ''' 87 | ''' 资源文件名称(注意这个参数的值为资源文件在工程内的相对路径,例如A.txt文件在Resources文件夹内,则此处的参数应为"Resources.A.txt") 88 | ''' 结果字符串数组(失败返回空String数组) 89 | ''' 90 | Public Shared Function ReadStringArray(ByVal ResourceName As String) As String() 91 | Dim Reader As System.IO.Stream 92 | Try 93 | Dim MyAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 94 | Reader = MyAssembly.GetManifestResourceStream(MyAssembly.GetName().Name & "." & ResourceName) 95 | Dim I(CInt(Reader.Length - 1)) As Byte 96 | Reader.Read(I, 0, I.Length) 97 | Reader.Dispose() 98 | Return System.Text.Encoding.UTF8.GetString(I).Replace(Chr(13) + Chr(10), Chr(10)).Split(New Char() {Chr(10)}) 99 | Catch ex As Exception 100 | Return New String() {} 101 | End Try 102 | End Function 103 | ''' 104 | ''' 读取程序嵌入的字符串数组类型的资源文件(注意必须在解决方案资源管理器中,将资源文件的"属性"-"生成操作"设置为"嵌入的资源") 105 | ''' 106 | ''' 资源文件名称(注意这个参数的值为资源文件在工程内的相对路径,例如A.txt文件在Resources文件夹内,则此处的参数应为"Resources.A.txt") 107 | ''' 使用特定的字符编码(默认UTF-8) 108 | ''' 结果字符串数组(失败返回空String数组) 109 | ''' 110 | Public Shared Function ReadStringArray(ByVal ResourceName As String, ByVal Encoding As System.Text.Encoding) As String() 111 | Dim Reader As System.IO.Stream 112 | Try 113 | Dim MyAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 114 | Reader = MyAssembly.GetManifestResourceStream(MyAssembly.GetName().Name & "." & ResourceName) 115 | Dim I(CInt(Reader.Length - 1)) As Byte 116 | Reader.Read(I, 0, I.Length) 117 | Reader.Dispose() 118 | Return Encoding.GetString(I).Replace(Chr(13) + Chr(10), Chr(10)).Split(New Char() {Chr(10)}) 119 | Catch ex As Exception 120 | Return New String() {} 121 | End Try 122 | End Function 123 | 124 | End Class 125 | 126 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/Screen.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 屏幕截图相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Screen 8 | 9 | ''' 10 | ''' 获取屏幕截图(全屏区域的截图) 11 | ''' 12 | ''' 结果图片(失败返回1*1个像素,#00000000透明色的图片) 13 | ''' 14 | Public Shared Function Image() As Bitmap 15 | Try 16 | Dim ScreenArea As Rectangle = My.Computer.Screen.Bounds 17 | Dim Temp As New Bitmap(ScreenArea.Width, ScreenArea.Height) 18 | Dim Graphics As Graphics = Graphics.FromImage(Temp) 19 | Graphics.CopyFromScreen(0, 0, 0, 0, ScreenArea.Size) 20 | Graphics.Dispose() 21 | Return Temp 22 | Catch ex As Exception 23 | Return New Bitmap(1, 1) 24 | End Try 25 | End Function 26 | 27 | ''' 28 | ''' 获取屏幕截图(指定区域的截图) 29 | ''' 30 | ''' 指定区域(System.Drawing.Rectangle) 31 | ''' 结果图片(失败返回1*1个像素,#00000000透明色的图片) 32 | ''' 33 | Public Shared Function Image(ByVal Area As Rectangle) As Bitmap 34 | Try 35 | Dim Temp As New Bitmap(Area.Width, Area.Height) 36 | Dim Graphics As Graphics = Graphics.FromImage(Temp) 37 | Graphics.CopyFromScreen(Area.Left, Area.Top, 0, 0, Area.Size) 38 | Graphics.Dispose() 39 | Return Temp 40 | Catch ex As Exception 41 | Return New Bitmap(1, 1) 42 | End Try 43 | End Function 44 | 45 | ''' 46 | ''' 获取屏幕截图(全屏区域的缩略图) 47 | ''' 48 | ''' 缩略比例(应大于0,且小于等于1) 49 | ''' 结果图片(失败返回1*1个像素,#00000000透明色的图片) 50 | ''' 51 | Public Shared Function ImageThumbnail(ByVal Scale As Double) As Bitmap 52 | If Scale <= 0 Or Scale > 1 Then 53 | Return New Bitmap(1, 1) 54 | End If 55 | Try 56 | Dim Thumbnail As Bitmap 57 | Dim ScreenArea As Rectangle = My.Computer.Screen.Bounds 58 | Dim Temp As New Bitmap(ScreenArea.Width, ScreenArea.Height) 59 | Dim Graphics As Graphics = Graphics.FromImage(Temp) 60 | Graphics.CopyFromScreen(0, 0, 0, 0, ScreenArea.Size) 61 | Graphics.Dispose() 62 | Thumbnail = Temp.GetThumbnailImage(ScreenArea.Width * Scale, ScreenArea.Height * Scale, Nothing, New System.IntPtr(0)) 63 | Temp.Dispose() 64 | Return Thumbnail 65 | Catch ex As Exception 66 | Return New Bitmap(1, 1) 67 | End Try 68 | End Function 69 | 70 | ''' 71 | ''' 获取屏幕截图(指定区域的缩略图) 72 | ''' 73 | ''' 指定区域(System.Drawing.Rectangle) 74 | ''' 缩略比例(应大于0,且小于等于1) 75 | ''' 结果图片(失败返回1*1个像素,#00000000透明色的图片) 76 | ''' 77 | Public Shared Function ImageThumbnail(ByVal Area As Rectangle, ByVal Scale As Double) As Bitmap 78 | If Scale <= 0 Or Scale > 1 Then 79 | Return New Bitmap(1, 1) 80 | End If 81 | Try 82 | Dim Thumbnail As Bitmap 83 | Dim Temp As New Bitmap(Area.Width, Area.Height) 84 | Dim Graphics As Graphics = Graphics.FromImage(Temp) 85 | Graphics.CopyFromScreen(Area.Left, Area.Top, 0, 0, Area.Size) 86 | Graphics.Dispose() 87 | Thumbnail = Temp.GetThumbnailImage(Area.Width * Scale, Area.Height * Scale, Nothing, New System.IntPtr(0)) 88 | Temp.Dispose() 89 | Return Thumbnail 90 | Catch ex As Exception 91 | Return New Bitmap(1, 1) 92 | End Try 93 | End Function 94 | 95 | 96 | 97 | ''' 98 | ''' 获取屏幕区域 99 | ''' 100 | ''' 结果区域值(System.Drawing.Rectangle) 101 | ''' 102 | Public Shared Function Area() As System.Drawing.Rectangle 103 | Return My.Computer.Screen.Bounds 104 | End Function 105 | ''' 106 | ''' 获取屏幕区域大小 107 | ''' 108 | ''' 结果大小值(System.Drawing.Size) 109 | ''' 110 | Public Shared Function Size() As Size 111 | Return My.Computer.Screen.Bounds.Size 112 | End Function 113 | ''' 114 | ''' 获取屏幕中心点坐标 115 | ''' 116 | ''' 结果坐标值(System.Drawing.Point) 117 | ''' 118 | Public Shared Function CenterPoint() As Point 119 | Return New Point(My.Computer.Screen.Bounds.Width / 2, My.Computer.Screen.Bounds.Height / 2) 120 | End Function 121 | 122 | ''' 123 | ''' 获取屏幕工作区域 124 | ''' 125 | ''' 结果区域值(System.Drawing.Rectangle) 126 | ''' 127 | Public Shared Function WorkingArea() As System.Drawing.Rectangle 128 | Return My.Computer.Screen.WorkingArea 129 | End Function 130 | ''' 131 | ''' 获取屏幕工作区域大小 132 | ''' 133 | ''' 结果大小值(System.Drawing.Size) 134 | ''' 135 | Public Shared Function WorkingAreaSize() As Size 136 | Return My.Computer.Screen.WorkingArea.Size 137 | End Function 138 | ''' 139 | ''' 获取屏幕工作区域中心点坐标 140 | ''' 141 | ''' 结果坐标值(System.Drawing.Point) 142 | ''' 143 | Public Shared Function WorkingAreaCenterPoint() As Point 144 | Return New Point(My.Computer.Screen.WorkingArea.Width / 2, My.Computer.Screen.WorkingArea.Height / 2) 145 | End Function 146 | 147 | End Class 148 | 149 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/Security.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 编码解码、加密解密相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Security 8 | 9 | ''' 10 | ''' URL编码 11 | ''' 12 | ''' 要编码的字符串 13 | ''' 编码后的结果字符串 14 | ''' 15 | Public Shared Function URL_Encode(ByVal Source As String) As String 16 | Return System.Web.HttpUtility.UrlEncode(Source, System.Text.Encoding.UTF8) 17 | End Function 18 | ''' 19 | ''' URL编码 20 | ''' 21 | ''' 要编码的字符串 22 | ''' 使用特定的字符编码(默认UTF-8) 23 | ''' 编码后的结果字符串 24 | ''' 25 | Public Shared Function URL_Encode(ByVal Source As String, ByVal Encoding As System.Text.Encoding) As String 26 | Return System.Web.HttpUtility.UrlEncode(Source, Encoding) 27 | End Function 28 | 29 | ''' 30 | ''' URL解码 31 | ''' 32 | ''' 要解码的字符串 33 | ''' 解码后的结果字符串 34 | ''' 35 | Public Shared Function URL_Decode(ByVal Source As String) As String 36 | Return System.Web.HttpUtility.UrlDecode(Source, System.Text.Encoding.UTF8) 37 | End Function 38 | ''' 39 | ''' URL解码 40 | ''' 41 | ''' 要解码的字符串 42 | ''' 使用特定的字符编码(默认UTF-8) 43 | ''' 解码后的结果字符串 44 | ''' 45 | Public Shared Function URL_Decode(ByVal Source As String, ByVal Encoding As System.Text.Encoding) As String 46 | Return System.Web.HttpUtility.UrlDecode(Source, Encoding) 47 | End Function 48 | 49 | 50 | 51 | ''' 52 | ''' Base64编码(编码结果的字符串中包含字母A-Z,a-z,数字0-9,符号+/=) 53 | ''' 54 | ''' 要编码的字符串 55 | ''' 编码后的结果字符串 56 | ''' 57 | Public Shared Function Base64_Encode(ByVal Source As String) As String 58 | Return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Source)) 59 | End Function 60 | ''' 61 | ''' Base64编码(编码结果的字符串中包含字母A-Z,a-z,数字0-9,符号+/=) 62 | ''' 63 | ''' 要编码的字符串 64 | ''' 使用特定的字符编码(默认UTF-8) 65 | ''' 编码后的结果字符串 66 | ''' 67 | Public Shared Function Base64_Encode(ByVal Source As String, ByVal Encoding As System.Text.Encoding) As String 68 | Return Convert.ToBase64String(Encoding.GetBytes(Source)) 69 | End Function 70 | 71 | ''' 72 | ''' Base64解码(要解码的字符串可以包含字母A-Z,a-z,数字0-9,符号+/=) 73 | ''' 74 | ''' 要解码的字符串 75 | ''' 解码后的结果字符串 76 | ''' 77 | Public Shared Function Base64_Decode(ByVal Source As String) As String 78 | Return System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(Source)) 79 | End Function 80 | ''' 81 | ''' Base64解码(要解码的字符串可以包含字母A-Z,a-z,数字0-9,符号+/=) 82 | ''' 83 | ''' 要解码的字符串 84 | ''' 使用特定的字符编码(默认UTF-8) 85 | ''' 解码后的结果字符串 86 | ''' 87 | Public Shared Function Base64_Decode(ByVal Source As String, ByVal Encoding As System.Text.Encoding) As String 88 | Return Encoding.GetString(Convert.FromBase64String(Source)) 89 | End Function 90 | 91 | 92 | 93 | ''' 94 | ''' Base64编码(用于URL的改进Base64编码,编码结果的字符串中包含字母A-Z,a-z,数字0-9,符号-_=) 95 | ''' 96 | ''' 要编码的字符串 97 | ''' 编码后的结果字符串 98 | ''' 99 | Public Shared Function Base64_URL_Encode(ByVal Source As String) As String 100 | Return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Source)).Replace("+", "-").Replace("/", "_") 101 | End Function 102 | ''' 103 | ''' Base64编码(用于URL的改进Base64编码,编码结果的字符串中包含字母A-Z,a-z,数字0-9,符号-_=) 104 | ''' 105 | ''' 要编码的字符串 106 | ''' 使用特定的字符编码(默认UTF-8) 107 | ''' 编码后的结果字符串 108 | ''' 109 | Public Shared Function Base64_URL_Encode(ByVal Source As String, ByVal Encoding As System.Text.Encoding) As String 110 | Return Convert.ToBase64String(Encoding.GetBytes(Source)).Replace("+", "-").Replace("/", "_") 111 | End Function 112 | 113 | ''' 114 | ''' Base64解码(用于URL的改进Base64解码,要解码的字符串可以包含字母A-Z,a-z,数字0-9,符号-_=) 115 | ''' 116 | ''' 要解码的字符串 117 | ''' 解码后的结果字符串 118 | ''' 119 | Public Shared Function Base64_URL_Decode(ByVal Source As String) As String 120 | Return System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(Source.Replace("-", "+").Replace("_", "/"))) 121 | End Function 122 | ''' 123 | ''' Base64解码(用于URL的改进Base64解码,要解码的字符串可以包含字母A-Z,a-z,数字0-9,符号-_=) 124 | ''' 125 | ''' 要解码的字符串 126 | ''' 使用特定的字符编码(默认UTF-8) 127 | ''' 解码后的结果字符串 128 | ''' 129 | Public Shared Function Base64_URL_Decode(ByVal Source As String, ByVal Encoding As System.Text.Encoding) As String 130 | Return Encoding.GetString(Convert.FromBase64String(Source.Replace("-", "+").Replace("_", "/"))) 131 | End Function 132 | 133 | 134 | ''' 135 | ''' MD5加密(摘要结果为32位16进制字符串) 136 | ''' 137 | ''' 要加密的Byte数组 138 | ''' 是否将结果转换为大写字母形式 139 | ''' 加密后的结果字符串 140 | ''' 141 | Public Shared Function MD5_Encode(ByVal Source As Byte(), Optional ByVal ToUpper As Boolean = True) As String 142 | If ToUpper Then 143 | Return BitConverter.ToString((New System.Security.Cryptography.MD5CryptoServiceProvider).ComputeHash(Source)).Replace("-", "").ToUpper() 144 | Else 145 | Return BitConverter.ToString((New System.Security.Cryptography.MD5CryptoServiceProvider).ComputeHash(Source)).Replace("-", "").ToLower() 146 | End If 147 | End Function 148 | ''' 149 | ''' MD5加密(摘要结果为32位16进制字符串) 150 | ''' 151 | ''' 要加密的字符串 152 | ''' 是否将结果转换为大写字母形式 153 | ''' 加密后的结果字符串 154 | ''' 155 | Public Shared Function MD5_Encode(ByVal Source As String, Optional ByVal ToUpper As Boolean = True) As String 156 | If ToUpper Then 157 | Return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Source, "MD5").ToUpper() 158 | Else 159 | Return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Source, "MD5").ToLower() 160 | End If 161 | End Function 162 | 163 | 164 | 165 | ''' 166 | ''' SHA1加密(摘要结果为40位16进制字符串) 167 | ''' 168 | ''' 要加密的Byte数组 169 | ''' 是否将结果转换为大写字母形式 170 | ''' 加密后的结果字符串 171 | ''' 172 | Public Shared Function SHA1_Encode(ByVal Source As Byte(), Optional ByVal ToUpper As Boolean = True) As String 173 | If ToUpper Then 174 | Return BitConverter.ToString((New System.Security.Cryptography.SHA1CryptoServiceProvider).ComputeHash(Source)).Replace("-", "").ToUpper() 175 | Else 176 | Return BitConverter.ToString((New System.Security.Cryptography.SHA1CryptoServiceProvider).ComputeHash(Source)).Replace("-", "").ToLower() 177 | End If 178 | End Function 179 | ''' 180 | ''' SHA1加密(摘要结果为40位16进制字符串) 181 | ''' 182 | ''' 要加密的字符串 183 | ''' 是否将结果转换为大写字母形式 184 | ''' 加密后的结果字符串 185 | ''' 186 | Public Shared Function SHA1_Encode(ByVal Source As String, Optional ByVal ToUpper As Boolean = True) As String 187 | If ToUpper Then 188 | Return BitConverter.ToString((New System.Security.Cryptography.SHA1CryptoServiceProvider).ComputeHash(System.Text.Encoding.UTF8.GetBytes(Source))).Replace("-", "").ToUpper() 189 | Else 190 | Return BitConverter.ToString((New System.Security.Cryptography.SHA1CryptoServiceProvider).ComputeHash(System.Text.Encoding.UTF8.GetBytes(Source))).Replace("-", "").ToLower() 191 | End If 192 | End Function 193 | 194 | 195 | 196 | ''' 197 | ''' SHA256加密(摘要结果为64位16进制字符串) 198 | ''' 199 | ''' 要加密的Byte数组 200 | ''' 是否将结果转换为大写字母形式 201 | ''' 加密后的结果字符串 202 | ''' 203 | Public Shared Function SHA256_Encode(ByVal Source As Byte(), Optional ByVal ToUpper As Boolean = True) As String 204 | If ToUpper Then 205 | Return BitConverter.ToString((New System.Security.Cryptography.SHA256Managed).ComputeHash(Source)).Replace("-", "").ToUpper() 206 | Else 207 | Return BitConverter.ToString((New System.Security.Cryptography.SHA256Managed).ComputeHash(Source)).Replace("-", "").ToLower() 208 | End If 209 | End Function 210 | ''' 211 | ''' SHA256加密(摘要结果为64位16进制字符串) 212 | ''' 213 | ''' 要加密的字符串 214 | ''' 是否将结果转换为大写字母形式 215 | ''' 加密后的结果字符串 216 | ''' 217 | Public Shared Function SHA256_Encode(ByVal Source As String, Optional ByVal ToUpper As Boolean = True) As String 218 | If ToUpper Then 219 | Return BitConverter.ToString((New System.Security.Cryptography.SHA256Managed).ComputeHash(System.Text.Encoding.UTF8.GetBytes(Source))).Replace("-", "").ToUpper() 220 | Else 221 | Return BitConverter.ToString((New System.Security.Cryptography.SHA256Managed).ComputeHash(System.Text.Encoding.UTF8.GetBytes(Source))).Replace("-", "").ToLower() 222 | End If 223 | End Function 224 | 225 | 226 | 227 | ''' 228 | ''' SHA384加密(摘要结果为96位16进制字符串) 229 | ''' 230 | ''' 要加密的Byte数组 231 | ''' 是否将结果转换为大写字母形式 232 | ''' 加密后的结果字符串 233 | ''' 234 | Public Shared Function SHA384_Encode(ByVal Source As Byte(), Optional ByVal ToUpper As Boolean = True) As String 235 | If ToUpper Then 236 | Return BitConverter.ToString((New System.Security.Cryptography.SHA384Managed).ComputeHash(Source)).Replace("-", "").ToUpper() 237 | Else 238 | Return BitConverter.ToString((New System.Security.Cryptography.SHA384Managed).ComputeHash(Source)).Replace("-", "").ToLower() 239 | End If 240 | End Function 241 | ''' 242 | ''' SHA384加密(摘要结果为96位16进制字符串) 243 | ''' 244 | ''' 要加密的字符串 245 | ''' 是否将结果转换为大写字母形式 246 | ''' 加密后的结果字符串 247 | ''' 248 | Public Shared Function SHA384_Encode(ByVal Source As String, Optional ByVal ToUpper As Boolean = True) As String 249 | If ToUpper Then 250 | Return BitConverter.ToString((New System.Security.Cryptography.SHA384Managed).ComputeHash(System.Text.Encoding.UTF8.GetBytes(Source))).Replace("-", "").ToUpper() 251 | Else 252 | Return BitConverter.ToString((New System.Security.Cryptography.SHA384Managed).ComputeHash(System.Text.Encoding.UTF8.GetBytes(Source))).Replace("-", "").ToLower() 253 | End If 254 | End Function 255 | 256 | 257 | 258 | ''' 259 | ''' SHA512加密(摘要结果为128位16进制字符串) 260 | ''' 261 | ''' 要加密的Byte数组 262 | ''' 是否将结果转换为大写字母形式 263 | ''' 加密后的结果字符串 264 | ''' 265 | Public Shared Function SHA512_Encode(ByVal Source As Byte(), Optional ByVal ToUpper As Boolean = True) As String 266 | If ToUpper Then 267 | Return BitConverter.ToString((New System.Security.Cryptography.SHA512Managed).ComputeHash(Source)).Replace("-", "").ToUpper() 268 | Else 269 | Return BitConverter.ToString((New System.Security.Cryptography.SHA512Managed).ComputeHash(Source)).Replace("-", "").ToLower() 270 | End If 271 | End Function 272 | ''' 273 | ''' SHA512加密(摘要结果为128位16进制字符串) 274 | ''' 275 | ''' 要加密的字符串 276 | ''' 是否将结果转换为大写字母形式 277 | ''' 加密后的结果字符串 278 | ''' 279 | Public Shared Function SHA512_Encode(ByVal Source As String, Optional ByVal ToUpper As Boolean = True) As String 280 | If ToUpper Then 281 | Return BitConverter.ToString((New System.Security.Cryptography.SHA512Managed).ComputeHash(System.Text.Encoding.UTF8.GetBytes(Source))).Replace("-", "").ToUpper() 282 | Else 283 | Return BitConverter.ToString((New System.Security.Cryptography.SHA512Managed).ComputeHash(System.Text.Encoding.UTF8.GetBytes(Source))).Replace("-", "").ToLower() 284 | End If 285 | End Function 286 | 287 | 288 | 289 | ''' 290 | ''' DES加密 291 | ''' 292 | ''' 要加密的Byte数组 293 | ''' 加密密钥(8的整数倍字节数的字符串) 294 | ''' 加密后的结果Byte数组(失败返回空Byte数组) 295 | ''' 296 | Public Shared Function DES_Encode(ByVal Source As Byte(), ByVal SecretKey As String) As Byte() 297 | Dim DES As New System.Security.Cryptography.DESCryptoServiceProvider() 298 | Try 299 | DES.Key = System.Text.Encoding.UTF8.GetBytes(SecretKey) 300 | DES.IV = System.Text.Encoding.UTF8.GetBytes(SecretKey) 301 | Catch ex As System.ArgumentException '加密失败(通常是由于SecretKey的字节数不是8的倍数) 302 | Return New Byte() {} 303 | End Try 304 | Dim MemoryStream As New System.IO.MemoryStream() 305 | Dim CryptoStream As New System.Security.Cryptography.CryptoStream(MemoryStream, DES.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write) 306 | CryptoStream.Write(Source, 0, Source.Length) 307 | CryptoStream.FlushFinalBlock() 308 | Return MemoryStream.ToArray() 309 | End Function 310 | ''' 311 | ''' DES加密 312 | ''' 313 | ''' 要加密的字符串 314 | ''' 加密密钥(8的整数倍字节数的字符串) 315 | ''' 加密后的结果Byte数组(失败返回空Byte数组) 316 | ''' 317 | Public Shared Function DES_Encode(ByVal Source As String, ByVal SecretKey As String) As Byte() 318 | Dim DES As New System.Security.Cryptography.DESCryptoServiceProvider() 319 | Try 320 | DES.Key = System.Text.Encoding.UTF8.GetBytes(SecretKey) 321 | DES.IV = System.Text.Encoding.UTF8.GetBytes(SecretKey) 322 | Catch ex As System.ArgumentException '加密失败(通常是由于SecretKey的字节数不是8的倍数) 323 | Return New Byte() {} 324 | End Try 325 | Dim MemoryStream As New System.IO.MemoryStream() 326 | Dim CryptoStream As New System.Security.Cryptography.CryptoStream(MemoryStream, DES.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write) 327 | CryptoStream.Write(System.Text.Encoding.UTF8.GetBytes(Source), 0, System.Text.Encoding.UTF8.GetBytes(Source).Length) 328 | CryptoStream.FlushFinalBlock() 329 | Return MemoryStream.ToArray() 330 | End Function 331 | 332 | ''' 333 | ''' DES解密 334 | ''' 335 | ''' 要解密的Byte数组 336 | ''' 解密密钥(8的整数倍字节数的字符串) 337 | ''' 解密后的结果Byte数组(失败返回空Byte数组) 338 | ''' 339 | Public Shared Function DES_Decode(ByVal Source As Byte(), ByVal SecretKey As String) As Byte() 340 | Dim DES As New System.Security.Cryptography.DESCryptoServiceProvider() 341 | Try 342 | DES.Key = System.Text.Encoding.UTF8.GetBytes(SecretKey) 343 | DES.IV = System.Text.Encoding.UTF8.GetBytes(SecretKey) 344 | Catch ex As System.ArgumentException '解密失败(通常是由于SecretKey的字节数不是8的倍数) 345 | Return New Byte() {} 346 | End Try 347 | Dim MemoryStream As New System.IO.MemoryStream() 348 | Dim CryptoStream As New System.Security.Cryptography.CryptoStream(MemoryStream, DES.CreateDecryptor, System.Security.Cryptography.CryptoStreamMode.Write) 349 | CryptoStream.Write(Source, 0, Source.Length) 350 | Try 351 | CryptoStream.FlushFinalBlock() 352 | Catch ex As System.Security.Cryptography.CryptographicException '解密失败(通常是由于SecretKey不匹配) 353 | Return New Byte() {} 354 | End Try 355 | Return MemoryStream.ToArray() 356 | End Function 357 | ''' 358 | ''' DES解密 359 | ''' 360 | ''' 要解密的Byte数组 361 | ''' 解密密钥(8的整数倍字节数的字符串) 362 | ''' 解密后的结果字符串(失败返回空字符串) 363 | ''' 364 | Public Shared Function DES_Decode_String(ByVal Source As Byte(), ByVal SecretKey As String) As String 365 | Dim DES As New System.Security.Cryptography.DESCryptoServiceProvider() 366 | Try 367 | DES.Key = System.Text.Encoding.UTF8.GetBytes(SecretKey) 368 | DES.IV = System.Text.Encoding.UTF8.GetBytes(SecretKey) 369 | Catch ex As System.ArgumentException '解密失败(通常是由于SecretKey的字节数不是8的倍数) 370 | Return "" 371 | End Try 372 | Dim MemoryStream As New System.IO.MemoryStream() 373 | Dim CryptoStream As New System.Security.Cryptography.CryptoStream(MemoryStream, DES.CreateDecryptor, System.Security.Cryptography.CryptoStreamMode.Write) 374 | CryptoStream.Write(Source, 0, Source.Length) 375 | Try 376 | CryptoStream.FlushFinalBlock() 377 | Catch ex As System.Security.Cryptography.CryptographicException '解密失败(通常是由于SecretKey不匹配) 378 | Return "" 379 | End Try 380 | Return System.Text.Encoding.UTF8.GetString(MemoryStream.ToArray()) 381 | End Function 382 | 383 | 384 | 385 | ''' 386 | ''' RSA加密(使用本函数库内置的密钥) 387 | ''' 388 | ''' 要加密的字符串 389 | ''' 加密后的结果Byte数组 390 | ''' 391 | Public Shared Function RSA_Encode(ByVal Source As String) As Byte() 392 | Dim RSA As New System.Security.Cryptography.RSACryptoServiceProvider 393 | RSA.FromXmlString("pZGIiC3CxVYpTJ4dLylSy2TLXW+R9EyRZ39ekSosvRKf7iPuz4oPlHqjssh4Glbj/vTUIMFzHFC/9zC56GggNLfZBjh6fc3adq5cXGKlU74kAyM2z7gdYlUHtLT/GwDp4YcQKeSb9GjcvsXbUp0mrzI/axzueLIqK+R07rnv3yc=AQAB") 394 | Return RSA.Encrypt(System.Text.Encoding.UTF8.GetBytes(Source), True) 395 | End Function 396 | 397 | ''' 398 | ''' RSA解密(使用本函数库内置的密钥) 399 | ''' 400 | ''' 要解密的Byte数组 401 | ''' 解密后的结果字符串(失败返回空字符串) 402 | ''' 403 | Public Shared Function RSA_Decode(ByVal Source As Byte()) As String 404 | Dim RSA As New System.Security.Cryptography.RSACryptoServiceProvider 405 | RSA.FromXmlString("pZGIiC3CxVYpTJ4dLylSy2TLXW+R9EyRZ39ekSosvRKf7iPuz4oPlHqjssh4Glbj/vTUIMFzHFC/9zC56GggNLfZBjh6fc3adq5cXGKlU74kAyM2z7gdYlUHtLT/GwDp4YcQKeSb9GjcvsXbUp0mrzI/axzueLIqK+R07rnv3yc=AQAB

0wCnxVUMgu+Uqp3UJ18bp9Ahdad36wDMwa0tmHxZJUvBZEfcYpsxmSHLpTUBCcAIg2eJL5g/iK9LrIwDBvUZ+w==

yOB6ZwG9TuXMRPCA9cFTKCoHEsreDZluptHEfG3HvnS1lp5xwRCHXVuh7VWOM0G2gnZ/JWwWIfcqf30UTWvTxQ==BTc67nHPwVzSu/TyzZZYRKmsahAdsr1uUktJmT9ZpMZenW/5Tqavby2arxbEU81faIAir/5/c42BvV4opP9iCQ==QETR5LMBxoRvXn80Q2yfFnKb4L9XXDKC3IywuL7G8YCVuKLo8kQ/ivcOT8jXvj6ADi2rcGWsjyFtT2zNWhftoQ==jwpY6fpkzwtLOABZQncXMC4h7VbYrx+sZeSrBFXAgw1WMSs9YsT6EQcDRjpGt7JAkP14nSTSIVJNd23jZURCLw==cw6SqcfbLVV198d9EnQOFEgkRvcsn2/CMAFET27WjkHuIAiagWE4+H7NWYWUaQFvCZNMAsNMYiX/cSFMYCRUFBBgkPqaqQ3+3qCs/kKiWpDjRwX8eXrMAnWniFDEoxc229Mxl4QZrcYKVRxrCIq8wKamuoWgwN0M+3CAiLwLvNk=
") 406 | Try 407 | Return System.Text.Encoding.UTF8.GetString(RSA.Decrypt(Source, True)) 408 | Catch ex As Exception 409 | Return "" 410 | End Try 411 | End Function 412 | 413 | 414 | 415 | ''' 416 | ''' 二进制形式化(只由0和1组成的,8的整数倍位数的2进制字符串) 417 | ''' 418 | ''' 要编码的Byte数组 419 | ''' 是否将结果每8位以空格隔开 420 | ''' 编码后的结果字符串 421 | ''' 422 | Public Shared Function Binary_Encode(ByVal Source As Byte(), Optional ByVal ContainSpace As Boolean = True) As String 423 | Dim Result As String = "" 424 | If ContainSpace Then 425 | For Each SourceByte In Source 426 | Result = Result & Convert.ToString(SourceByte, 2).PadLeft(8, "0") & " " 427 | Next 428 | Else 429 | For Each SourceByte In Source 430 | Result = Result & Convert.ToString(SourceByte, 2).PadLeft(8, "0") 431 | Next 432 | End If 433 | Return Result.Trim() 434 | End Function 435 | ''' 436 | ''' 二进制形式化(只由0和1组成的,8的整数倍位数的2进制字符串) 437 | ''' 438 | ''' 要编码的字符串 439 | ''' 是否将结果每8位以空格隔开 440 | ''' 编码后的结果字符串 441 | ''' 442 | Public Shared Function Binary_Encode(ByVal Source As String, Optional ByVal ContainSpace As Boolean = True) As String 443 | Dim Result As String = "" 444 | If ContainSpace Then 445 | For Each SourceByte In System.Text.Encoding.UTF8.GetBytes(Source) 446 | Result = Result & Convert.ToString(SourceByte, 2).PadLeft(8, "0") & " " 447 | Next 448 | Else 449 | For Each SourceByte In System.Text.Encoding.UTF8.GetBytes(Source) 450 | Result = Result & Convert.ToString(SourceByte, 2).PadLeft(8, "0") 451 | Next 452 | End If 453 | Return Result.Trim() 454 | End Function 455 | ''' 456 | ''' 二进制形式化(只由0和1组成的,8的整数倍位数的2进制字符串) 457 | ''' 458 | ''' 要编码的字符串 459 | ''' 使用特定的字符编码(默认UTF-8) 460 | ''' 是否将结果每8位以空格隔开 461 | ''' 编码后的结果字符串 462 | ''' 463 | Public Shared Function Binary_Encode(ByVal Source As String, ByVal Encoding As System.Text.Encoding, Optional ByVal ContainSpace As Boolean = True) As String 464 | Dim Result As String = "" 465 | If ContainSpace Then 466 | For Each SourceByte In Encoding.GetBytes(Source) 467 | Result = Result & Convert.ToString(SourceByte, 2).PadLeft(8, "0") & " " 468 | Next 469 | Else 470 | For Each SourceByte In Encoding.GetBytes(Source) 471 | Result = Result & Convert.ToString(SourceByte, 2).PadLeft(8, "0") 472 | Next 473 | End If 474 | Return Result.Trim() 475 | End Function 476 | 477 | ''' 478 | ''' 二进制反形式化(将只由0和1组成的,8的整数倍位数的2进制字符串,转换为原始意义的Byte数组) 479 | ''' 480 | ''' 要解码的字符串 481 | ''' 解码后的结果Byte数组 482 | ''' 483 | Public Shared Function Binary_Decode(ByVal Source As String) As Byte() 484 | Source = Source.Replace(" ", "") 485 | Dim Result(Source.Length / 8 - 1) As Byte 486 | For I = 0 To Source.Length / 8 - 1 487 | Dim SourceByte As String = Source.Substring(I * 8, 8) 488 | Result(I) = Convert.ToByte(SourceByte, 2) 489 | Next 490 | Return Result 491 | End Function 492 | ''' 493 | ''' 二进制反形式化(将只由0和1组成的,8的整数倍位数的2进制字符串,转换为原始意义的字符串) 494 | ''' 495 | ''' 要解码的字符串 496 | ''' 解码后的结果字符串 497 | ''' 498 | Public Shared Function Binary_Decode_String(ByVal Source As String) As String 499 | Source = Source.Replace(" ", "") 500 | Dim Result(Source.Length / 8 - 1) As Byte 501 | For I = 0 To Source.Length / 8 - 1 502 | Dim SourceByte As String = Source.Substring(I * 8, 8) 503 | Result(I) = Convert.ToByte(SourceByte, 2) 504 | Next 505 | Return System.Text.Encoding.UTF8.GetString(Result) 506 | End Function 507 | ''' 508 | ''' 二进制反形式化(将只由0和1组成的,8的整数倍位数的2进制字符串,转换为原始意义的字符串) 509 | ''' 510 | ''' 要解码的字符串 511 | ''' 使用特定的字符编码(默认UTF-8) 512 | ''' 解码后的结果字符串 513 | ''' 514 | Public Shared Function Binary_Decode_String(ByVal Source As String, ByVal Encoding As System.Text.Encoding) As String 515 | Source = Source.Replace(" ", "") 516 | Dim Result(Source.Length / 8 - 1) As Byte 517 | For I = 0 To Source.Length / 8 - 1 518 | Dim SourceByte As String = Source.Substring(I * 8, 8) 519 | Result(I) = Convert.ToByte(SourceByte, 2) 520 | Next 521 | Return Encoding.GetString(Result) 522 | End Function 523 | 524 | 525 | 526 | ''' 527 | ''' 二进制非处理(将二进制形式的0替换为1,1替换为0) 528 | ''' 529 | ''' 要编码的Byte数组 530 | ''' 编码后的结果Byte数组 531 | ''' 532 | Public Shared Function Binary_Not(ByVal Source As Byte()) As Byte() 533 | Dim Temp As String = "" 534 | For Each SourceByte In Source 535 | Temp = Temp & Convert.ToString(SourceByte, 2).PadLeft(8, "0") 536 | Next 537 | Temp = Temp.Replace("0", "2") 538 | Temp = Temp.Replace("1", "0") 539 | Temp = Temp.Replace("2", "1") 540 | Dim Result(Temp.Length / 8 - 1) As Byte 541 | For I = 0 To Temp.Length / 8 - 1 542 | Dim SourceByte As String = Temp.Substring(I * 8, 8).Remove(0, Temp.Substring(I * 8, 8).IndexOf("1")) 543 | Result(I) = Convert.ToByte(SourceByte, 2) 544 | Next 545 | Return Result 546 | End Function 547 | 548 | 549 | 550 | ''' 551 | ''' 十六进制编码(由0-F组成的,2的整数倍位数的16进制字符串) 552 | ''' 553 | ''' 要编码的Byte数组 554 | ''' 是否将结果转换为大写字母形式 555 | ''' 编码后的结果字符串 556 | ''' 557 | Public Shared Function Hex_Encode(ByVal Source As Byte(), Optional ByVal ToUpper As Boolean = True) As String 558 | If ToUpper Then 559 | Return BitConverter.ToString(Source).Replace("-", "").ToUpper() 560 | Else 561 | Return BitConverter.ToString(Source).Replace("-", "").ToLower() 562 | End If 563 | End Function 564 | ''' 565 | ''' 十六进制编码(由0-F组成的,2的整数倍位数的16进制字符串) 566 | ''' 567 | ''' 要编码的Int32值 568 | ''' 是否将结果转换为大写字母形式 569 | ''' 编码后的结果字符串 570 | ''' 571 | Public Shared Function Hex_Encode(ByVal Source As Int32, Optional ByVal ToUpper As Boolean = True) As String 572 | If ToUpper Then 573 | Return Source.ToString("X8") 574 | Else 575 | Return Source.ToString("x8") 576 | End If 577 | End Function 578 | ''' 579 | ''' 十六进制编码(由0-F组成的,2的整数倍位数的16进制字符串) 580 | ''' 581 | ''' 要编码的字符串 582 | ''' 是否将结果转换为大写字母形式 583 | ''' 编码后的结果字符串 584 | ''' 585 | Public Shared Function Hex_Encode(ByVal Source As String, Optional ByVal ToUpper As Boolean = True) As String 586 | If ToUpper Then 587 | Return BitConverter.ToString(System.Text.Encoding.UTF8.GetBytes(Source)).Replace("-", "").ToUpper() 588 | Else 589 | Return BitConverter.ToString(System.Text.Encoding.UTF8.GetBytes(Source)).Replace("-", "").ToLower() 590 | End If 591 | End Function 592 | ''' 593 | ''' 十六进制编码(由0-F组成的,2的整数倍位数的16进制字符串) 594 | ''' 595 | ''' 要编码的字符串 596 | ''' 使用特定的字符编码(默认UTF-8) 597 | ''' 是否将结果转换为大写字母形式 598 | ''' 编码后的结果字符串 599 | ''' 600 | Public Shared Function Hex_Encode(ByVal Source As String, ByVal Encoding As System.Text.Encoding, Optional ByVal ToUpper As Boolean = True) As String 601 | If ToUpper Then 602 | Return BitConverter.ToString(Encoding.GetBytes(Source)).Replace("-", "").ToUpper() 603 | Else 604 | Return BitConverter.ToString(Encoding.GetBytes(Source)).Replace("-", "").ToLower() 605 | End If 606 | End Function 607 | 608 | ''' 609 | ''' 十六进制解码(将由0-F组成的,2的整数倍位数的16进制字符串,转换为原始意义的Byte数组) 610 | ''' 611 | ''' 要解码的字符串 612 | ''' 解码后的结果Byte数组 613 | ''' 614 | Public Shared Function Hex_Decode(ByVal Source As String) As Byte() 615 | Dim Result(Source.Length / 2 - 1) As Byte 616 | For I = 0 To Source.Length / 2 - 1 617 | Dim SourceByte As String = Source.Substring(I * 2, 2) 618 | Result(I) = Convert.ToByte(SourceByte, 16) 619 | Next 620 | Return Result 621 | End Function 622 | ''' 623 | ''' 十六进制解码(将由0-F组成的,2的整数倍位数的16进制字符串,转换为原始意义的Int32值) 624 | ''' 625 | ''' 要解码的字符串 626 | ''' 解码后的结果Int32值 627 | ''' 628 | Public Shared Function Hex_Decode_Int32(ByVal Source As String) As String 629 | Return Int32.Parse(Source, System.Globalization.NumberStyles.HexNumber) 630 | End Function 631 | ''' 632 | ''' 十六进制解码(将由0-F组成的,2的整数倍位数的16进制字符串,转换为原始意义的字符串) 633 | ''' 634 | ''' 要解码的字符串 635 | ''' 解码后的结果字符串 636 | ''' 637 | Public Shared Function Hex_Decode_String(ByVal Source As String) As String 638 | Dim Result(Source.Length / 2 - 1) As Byte 639 | For I = 0 To Source.Length / 2 - 1 640 | Dim SourceByte As String = Source.Substring(I * 2, 2) 641 | Result(I) = Convert.ToByte(SourceByte, 16) 642 | Next 643 | Return System.Text.Encoding.UTF8.GetString(Result) 644 | End Function 645 | ''' 646 | ''' 十六进制解码(将由0-F组成的,2的整数倍位数的16进制字符串,转换为原始意义的字符串) 647 | ''' 648 | ''' 要解码的字符串 649 | ''' 使用特定的字符编码(默认UTF-8) 650 | ''' 解码后的结果字符串 651 | ''' 652 | Public Shared Function Hex_Decode_String(ByVal Source As String, ByVal Encoding As System.Text.Encoding) As String 653 | Dim Result(Source.Length / 2 - 1) As Byte 654 | For I = 0 To Source.Length / 2 - 1 655 | Dim SourceByte As String = Source.Substring(I * 2, 2) 656 | Result(I) = Convert.ToByte(SourceByte, 16) 657 | Next 658 | Return System.Text.Encoding.UTF8.GetString(Result) 659 | End Function 660 | 661 | 662 | 663 | Public Class MD4_Hash_Algorithm 664 | Private Const BlockSize As Integer = 512 / 8 665 | Private Context As UInt32() = New UInt32() {&H67452301UI, &HEFCDAB89UI, &H98BADCFEUI, &H10325476UI} 666 | Private ProcessedCount As Integer = 0 667 | Private InputBuffer(BlockSize - 1) As Byte 668 | Private WorkBuffer(BlockSize / 4 - 1) As UInt32 669 | Public Sub New(ByVal InputBytes As Byte()) 670 | Update(InputBytes) 671 | End Sub 672 | Private Sub Update(ByVal InputBytes As Byte()) 673 | Dim UnhashedBufferLength As Integer = ProcessedCount Mod BlockSize 674 | Dim PartLength As Integer = BlockSize - UnhashedBufferLength 675 | Dim Index As Integer = 0 676 | If InputBytes.Length >= PartLength Then 677 | Array.Copy(InputBytes, Index, InputBuffer, UnhashedBufferLength, PartLength) 678 | Transform(InputBuffer, 0) 679 | Index = PartLength 680 | Do While (Index + BlockSize - 1) < InputBytes.Length 681 | Transform(InputBytes, Index) 682 | Index += BlockSize 683 | Loop 684 | UnhashedBufferLength = 0 685 | End If 686 | If Index < InputBytes.Length Then 687 | Array.Copy(InputBytes, Index, InputBuffer, UnhashedBufferLength, InputBytes.Length - Index) 688 | End If 689 | ProcessedCount += InputBytes.Length 690 | End Sub 691 | Private Sub Transform(ByRef Block As Byte(), ByVal Offset As Integer) 692 | For I = 0 To 15 693 | If Offset >= Block.Length Then 694 | Exit For 695 | End If 696 | WorkBuffer(I) = (CType(Block(Offset + 0), UInt32) And Byte.MaxValue) 697 | WorkBuffer(I) = WorkBuffer(I) Or ((CType(Block(Offset + 1), UInt32) And Byte.MaxValue) << 8) 698 | WorkBuffer(I) = WorkBuffer(I) Or ((CType(Block(Offset + 2), UInt32) And Byte.MaxValue) << 16) 699 | WorkBuffer(I) = WorkBuffer(I) Or ((CType(Block(Offset + 3), UInt32) And Byte.MaxValue) << 24) 700 | Offset += 4 701 | Next 702 | Dim A As UInt32 = Context(0) 703 | Dim B As UInt32 = Context(1) 704 | Dim C As UInt32 = Context(2) 705 | Dim D As UInt32 = Context(3) 706 | A = Round1(A, B, C, D, WorkBuffer(0), 3) 707 | D = Round1(D, A, B, C, WorkBuffer(1), 7) 708 | C = Round1(C, D, A, B, WorkBuffer(2), 11) 709 | B = Round1(B, C, D, A, WorkBuffer(3), 19) 710 | A = Round1(A, B, C, D, WorkBuffer(4), 3) 711 | D = Round1(D, A, B, C, WorkBuffer(5), 7) 712 | C = Round1(C, D, A, B, WorkBuffer(6), 11) 713 | B = Round1(B, C, D, A, WorkBuffer(7), 19) 714 | A = Round1(A, B, C, D, WorkBuffer(8), 3) 715 | D = Round1(D, A, B, C, WorkBuffer(9), 7) 716 | C = Round1(C, D, A, B, WorkBuffer(10), 11) 717 | B = Round1(B, C, D, A, WorkBuffer(11), 19) 718 | A = Round1(A, B, C, D, WorkBuffer(12), 3) 719 | D = Round1(D, A, B, C, WorkBuffer(13), 7) 720 | C = Round1(C, D, A, B, WorkBuffer(14), 11) 721 | B = Round1(B, C, D, A, WorkBuffer(15), 19) 722 | A = Round2(A, B, C, D, WorkBuffer(0), 3) 723 | D = Round2(D, A, B, C, WorkBuffer(4), 5) 724 | C = Round2(C, D, A, B, WorkBuffer(8), 9) 725 | B = Round2(B, C, D, A, WorkBuffer(12), 13) 726 | A = Round2(A, B, C, D, WorkBuffer(1), 3) 727 | D = Round2(D, A, B, C, WorkBuffer(5), 5) 728 | C = Round2(C, D, A, B, WorkBuffer(9), 9) 729 | B = Round2(B, C, D, A, WorkBuffer(13), 13) 730 | A = Round2(A, B, C, D, WorkBuffer(2), 3) 731 | D = Round2(D, A, B, C, WorkBuffer(6), 5) 732 | C = Round2(C, D, A, B, WorkBuffer(10), 9) 733 | B = Round2(B, C, D, A, WorkBuffer(14), 13) 734 | A = Round2(A, B, C, D, WorkBuffer(3), 3) 735 | D = Round2(D, A, B, C, WorkBuffer(7), 5) 736 | C = Round2(C, D, A, B, WorkBuffer(11), 9) 737 | B = Round2(B, C, D, A, WorkBuffer(15), 13) 738 | A = Round3(A, B, C, D, WorkBuffer(0), 3) 739 | D = Round3(D, A, B, C, WorkBuffer(8), 9) 740 | C = Round3(C, D, A, B, WorkBuffer(4), 11) 741 | B = Round3(B, C, D, A, WorkBuffer(12), 15) 742 | A = Round3(A, B, C, D, WorkBuffer(2), 3) 743 | D = Round3(D, A, B, C, WorkBuffer(10), 9) 744 | C = Round3(C, D, A, B, WorkBuffer(6), 11) 745 | B = Round3(B, C, D, A, WorkBuffer(14), 15) 746 | A = Round3(A, B, C, D, WorkBuffer(1), 3) 747 | D = Round3(D, A, B, C, WorkBuffer(9), 9) 748 | C = Round3(C, D, A, B, WorkBuffer(5), 11) 749 | B = Round3(B, C, D, A, WorkBuffer(13), 15) 750 | A = Round3(A, B, C, D, WorkBuffer(3), 3) 751 | D = Round3(D, A, B, C, WorkBuffer(11), 9) 752 | C = Round3(C, D, A, B, WorkBuffer(7), 11) 753 | B = Round3(B, C, D, A, WorkBuffer(15), 15) 754 | Context(0) = &HFFFFFFFFUI And (Context(0) + Convert.ToInt64(A)) 755 | Context(1) = &HFFFFFFFFUI And (Context(1) + Convert.ToInt64(B)) 756 | Context(2) = &HFFFFFFFFUI And (Context(2) + Convert.ToInt64(C)) 757 | Context(3) = &HFFFFFFFFUI And (Context(3) + Convert.ToInt64(D)) 758 | End Sub 759 | Private Function Round1(ByVal P1 As UInt32, ByVal P2 As UInt32, ByVal P3 As UInt32, ByVal P4 As UInt32, ByVal X As UInt32, ByVal S As Integer) As UInt32 760 | Dim T As UInt32 = &HFFFFFFFFUI And (&HFFFFFFFFUI And (Convert.ToInt64(P1) + ((P2 And P3) Or ((Not P2) And P4))) + Convert.ToInt64(X)) 761 | Return T << S Or T >> (32 - S) 762 | End Function 763 | Private Function Round2(ByVal P1 As UInt32, ByVal P2 As UInt32, ByVal P3 As UInt32, ByVal P4 As UInt32, ByVal X As UInt32, ByVal S As Integer) As UInt32 764 | Dim T As UInt32 = &HFFFFFFFFUI And (&HFFFFFFFFUI And (Convert.ToInt64(P1) + ((P2 And (P3 Or P4)) Or (P3 And P4))) + Convert.ToInt64(X) + &H5A827999UI) 765 | Return T << S Or T >> (32 - S) 766 | End Function 767 | Private Function Round3(ByVal P1 As UInt32, ByVal P2 As UInt32, ByVal P3 As UInt32, ByVal P4 As UInt32, ByVal X As UInt32, ByVal S As Integer) As UInt32 768 | Dim T As UInt32 = &HFFFFFFFFUI And (&HFFFFFFFFUI And (Convert.ToInt64(P1) + (P2 Xor P3 Xor P4)) + Convert.ToInt64(X) + &H6ED9EBA1UI) 769 | Return T << S Or T >> (32 - S) 770 | End Function 771 | Public Function DigestResult() As Byte() 772 | Dim UnhashedBufferLength As Integer = CType(ProcessedCount Mod BlockSize, Integer) 773 | Dim PaddingLength As Integer 774 | If UnhashedBufferLength < 56 Then 775 | PaddingLength = 56 - UnhashedBufferLength 776 | Else 777 | PaddingLength = 120 - UnhashedBufferLength 778 | End If 779 | Dim Tail(PaddingLength + 8 - 1) As Byte 780 | Tail(0) = CType(128, Byte) 781 | BitConverter.GetBytes(ProcessedCount * 8).CopyTo(Tail, PaddingLength) 782 | Update(Tail) 783 | Dim Result(16 - 1) As Byte 784 | For I As Integer = 0 To 3 785 | BitConverter.GetBytes(Context(I)).CopyTo(Result, I * 4) 786 | Next 787 | Return Result 788 | End Function 789 | End Class 790 | ''' 791 | ''' MD4加密(摘要结果为32位16进制字符串) 792 | ''' 793 | ''' 要加密的Byte数组 794 | ''' 是否将结果转换为大写字母形式 795 | ''' 加密后的结果字符串 796 | ''' 797 | Public Shared Function MD4_Encode(ByVal Source As Byte(), Optional ByVal ToUpper As Boolean = True) As String 798 | Dim MD4 As MD4_Hash_Algorithm = New MD4_Hash_Algorithm(Source) 799 | If ToUpper Then 800 | Return BitConverter.ToString(MD4.DigestResult()).Replace("-", "").ToUpper() 801 | Else 802 | Return BitConverter.ToString(MD4.DigestResult()).Replace("-", "").ToLower() 803 | End If 804 | End Function 805 | ''' 806 | ''' MD4加密(摘要结果为32位16进制字符串) 807 | ''' 808 | ''' 要加密的字符串 809 | ''' 是否将结果转换为大写字母形式 810 | ''' 加密后的结果字符串 811 | ''' 812 | Public Shared Function MD4_Encode(ByVal Source As String, Optional ByVal ToUpper As Boolean = True) As String 813 | Dim MD4 As MD4_Hash_Algorithm = New MD4_Hash_Algorithm(System.Text.Encoding.UTF8.GetBytes(Source)) 814 | If ToUpper Then 815 | Return BitConverter.ToString(MD4.DigestResult()).Replace("-", "").ToUpper() 816 | Else 817 | Return BitConverter.ToString(MD4.DigestResult()).Replace("-", "").ToLower() 818 | End If 819 | End Function 820 | 821 | 822 | 823 | ''' 824 | ''' MD4混合加密(用于ED2K链接中的文件哈希值的计算,摘要结果为32位16进制字符串) 825 | ''' 826 | ''' 要加密的Byte数组 827 | ''' 是否将结果转换为大写字母形式 828 | ''' 加密后的结果字符串 829 | ''' 830 | Public Shared Function MD4_ED2K_Encode(ByVal Source As Byte(), Optional ByVal ToUpper As Boolean = True) As String 831 | Dim ChunkSize As Integer = 9728000 832 | Dim ChunkCount As Integer = Math.Ceiling(Source.Length / ChunkSize) 833 | Dim ChunkBuffer(ChunkSize - 1) As Byte 834 | Dim ChunkHash As New List(Of Byte) 835 | For I = 0 To ChunkCount - 1 836 | If Source.Length - (ChunkSize * I) > ChunkSize Then 837 | Array.Copy(Source, ChunkSize * I, ChunkBuffer, 0, ChunkSize) 838 | Dim Chunk_MD4 As MD4_Hash_Algorithm = New MD4_Hash_Algorithm(ChunkBuffer) 839 | ChunkHash.AddRange(Chunk_MD4.DigestResult()) 840 | For J = 0 To ChunkBuffer.Length - 1 841 | ChunkBuffer(J) = 0 842 | Next 843 | Else 844 | ReDim ChunkBuffer(Source.Length - (ChunkSize * I) - 1) 845 | Array.Copy(Source, ChunkSize * I, ChunkBuffer, 0, ChunkBuffer.Length) 846 | Dim Chunk_MD4 As MD4_Hash_Algorithm = New MD4_Hash_Algorithm(ChunkBuffer) 847 | ChunkHash.AddRange(Chunk_MD4.DigestResult()) 848 | End If 849 | Next 850 | If ChunkCount = 1 Then 851 | If ToUpper Then 852 | Return BitConverter.ToString(ChunkHash.ToArray()).Replace("-", "").ToUpper() 853 | Else 854 | Return BitConverter.ToString(ChunkHash.ToArray()).Replace("-", "").ToLower() 855 | End If 856 | Else 857 | Dim Total_MD4 As MD4_Hash_Algorithm = New MD4_Hash_Algorithm(ChunkHash.ToArray()) 858 | If ToUpper Then 859 | Return BitConverter.ToString(Total_MD4.DigestResult()).Replace("-", "").ToUpper() 860 | Else 861 | Return BitConverter.ToString(Total_MD4.DigestResult()).Replace("-", "").ToLower() 862 | End If 863 | End If 864 | End Function 865 | 866 | ''' 867 | ''' 根据文件的名称、大小、哈希值,生成文件的ED2K下载链接 868 | ''' 869 | ''' 文件名称(不能为空字符串) 870 | ''' 文件大小(必须大于0) 871 | ''' 文件哈希值(用于ED2K链接中的MD4混合哈希值) 872 | ''' 生成的ED2K链接结果字符串(失败返回空字符串) 873 | ''' 874 | Public Shared Function Generate_ED2K_Link(ByVal FileName As String, ByVal FileLength As Integer, ByVal FileHash As String) As String 875 | If FileName = "" OrElse FileHash.Length <> 32 OrElse FileLength <= 0 Then 876 | Return "" 877 | End If 878 | FileName = System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) 879 | Return "ed2k://|file|" & FileName & "|" & FileLength & "|" & FileHash & "|/" 880 | End Function 881 | ''' 882 | ''' 根据文件的名称和字节内容,生成文件的ED2K下载链接 883 | ''' 884 | ''' 文件名称(不能为空字符串) 885 | ''' 文件内容(不能为空Byte数组) 886 | ''' 生成的ED2K链接结果字符串(失败返回空字符串) 887 | ''' 888 | Public Shared Function Generate_ED2K_Link(ByVal FileName As String, ByVal Source As Byte()) As String 889 | If FileName = "" OrElse Source.Length = 0 Then 890 | Return "" 891 | End If 892 | FileName = System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) 893 | Dim ChunkSize As Integer = 9728000 894 | Dim ChunkCount As Integer = Math.Ceiling(Source.Length / ChunkSize) 895 | Dim ChunkBuffer(ChunkSize - 1) As Byte 896 | Dim ChunkHash As New List(Of Byte) 897 | For I = 0 To ChunkCount - 1 898 | If Source.Length - (ChunkSize * I) > ChunkSize Then 899 | Array.Copy(Source, ChunkSize * I, ChunkBuffer, 0, ChunkSize) 900 | Dim Chunk_MD4 As MD4_Hash_Algorithm = New MD4_Hash_Algorithm(ChunkBuffer) 901 | ChunkHash.AddRange(Chunk_MD4.DigestResult()) 902 | For J = 0 To ChunkBuffer.Length - 1 903 | ChunkBuffer(J) = 0 904 | Next 905 | Else 906 | ReDim ChunkBuffer(Source.Length - (ChunkSize * I) - 1) 907 | Array.Copy(Source, ChunkSize * I, ChunkBuffer, 0, ChunkBuffer.Length) 908 | Dim Chunk_MD4 As MD4_Hash_Algorithm = New MD4_Hash_Algorithm(ChunkBuffer) 909 | ChunkHash.AddRange(Chunk_MD4.DigestResult()) 910 | End If 911 | Next 912 | Dim FileHash As String 913 | If ChunkCount = 1 Then 914 | FileHash = BitConverter.ToString(ChunkHash.ToArray()).Replace("-", "") 915 | Else 916 | Dim Total_MD4 As MD4_Hash_Algorithm = New MD4_Hash_Algorithm(ChunkHash.ToArray()) 917 | FileHash = BitConverter.ToString(Total_MD4.DigestResult()).Replace("-", "") 918 | End If 919 | Return "ed2k://|file|" & FileName & "|" & Source.Length & "|" & FileHash & "|/" 920 | End Function 921 | 922 | End Class 923 | 924 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/StringProcessing.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 字符串处理相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class StringProcessing 8 | 9 | ''' 10 | ''' 搜索字符串(搜寻第一个开始字符串,再向后搜寻第一个结束字符串,取出中间的部分) 11 | ''' 12 | ''' 要搜索的字符串 13 | ''' 开始位置的字符串(结果中不包含这一部分) 14 | ''' 结束位置的字符串(结果中不包含这一部分) 15 | ''' 结果字符串(失败返回空字符串) 16 | ''' 17 | Public Shared Function Find(ByVal Source As String, ByVal BeginString As String, ByVal EndString As String) As String 18 | If Source.Contains(BeginString) = False Then 19 | Return "" 20 | End If 21 | Source = Source.Substring(Source.IndexOf(BeginString) + BeginString.Length) 22 | If Source.Contains(EndString) = False Then 23 | Return "" 24 | End If 25 | Return Source.Substring(0, Source.IndexOf(EndString)) 26 | End Function 27 | 28 | ''' 29 | ''' 搜索字符串(重复:搜寻开始字符串,再向后搜寻结束字符串,取出中间的部分) 30 | ''' 31 | ''' 要搜索的字符串 32 | ''' 开始位置的字符串(结果中不包含这一部分) 33 | ''' 结束位置的字符串(结果中不包含这一部分) 34 | ''' 结果字符串数组(失败返回空String数组) 35 | ''' 36 | Public Shared Function FindAll(ByVal Source As String, ByVal BeginString As String, ByVal EndString As String) As String() 37 | Dim Result As List(Of String) = New List(Of String) 38 | While (Source.Contains(BeginString)) 39 | Source = Source.Substring(Source.IndexOf(BeginString) + BeginString.Length) 40 | If Source.Contains(EndString) = False Then 41 | Exit While 42 | Else 43 | Result.Add(Source.Substring(0, Source.IndexOf(EndString))) 44 | Source = Source.Substring(Source.IndexOf(EndString) + EndString.Length) 45 | End If 46 | End While 47 | Return Result.ToArray() 48 | End Function 49 | 50 | 51 | 52 | ''' 53 | ''' 搜索字符串(搜寻最后一个裁剪标志字符串,取出之后的部分) 54 | ''' 55 | ''' 要搜索的字符串 56 | ''' 裁剪位置的标志字符串(结果中不包含这一部分) 57 | ''' 结果字符串(失败返回空字符串) 58 | ''' 59 | Public Shared Function FindAfter(ByVal Source As String, ByVal CutString As String) As String 60 | If Source.Contains(CutString) = False Then 61 | Return "" 62 | End If 63 | Return Source.Substring(Source.LastIndexOf(CutString) + CutString.Length) 64 | End Function 65 | 66 | ''' 67 | ''' 搜索字符串(搜寻第一个裁剪标志字符串,取出之前的部分) 68 | ''' 69 | ''' 要搜索的字符串 70 | ''' 裁剪位置的标志字符串(结果中不包含这一部分) 71 | ''' 结果字符串(失败返回空字符串) 72 | ''' 73 | Public Shared Function FindBefore(ByVal Source As String, ByVal CutString As String) As String 74 | If Source.Contains(CutString) = False Then 75 | Return "" 76 | End If 77 | Return Source.Substring(0, Source.IndexOf(CutString)) 78 | End Function 79 | 80 | 81 | 82 | ''' 83 | ''' 搜索字符串数组,取出不为空字符串""的元素,返回新数组(包括空格和制表符) 84 | ''' 85 | ''' 要搜索的字符串数组 86 | ''' 结果字符串数组(失败返回空String数组) 87 | ''' 88 | Public Shared Function SelectNotEmpty(ByVal Source As String()) As String() 89 | Dim Result As List(Of String) = New List(Of String) 90 | For I = 0 To Source.Length - 1 91 | If Source(I) <> "" Then 92 | Result.Add(Source(I)) 93 | End If 94 | Next 95 | Return Result.ToArray() 96 | End Function 97 | 98 | End Class 99 | 100 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/Task.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 进程管理相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Task 8 | 9 | ''' 10 | ''' 运行程序(同步阻塞,TaskName程序会获得鼠标焦点,直到TaskName程序结束才继续向下执行) 11 | ''' 12 | ''' 程序名称(例如"notepad"或"notepad.exe") 13 | ''' 是否执行成功 14 | ''' 15 | Public Shared Function Run(ByVal TaskName As String) As Boolean 16 | Try 17 | If TaskName.ToLower.EndsWith(".exe") = False Then 18 | TaskName = TaskName & ".exe" 19 | End If 20 | Dim p As New Process 21 | p.StartInfo.FileName = "cmd.exe" 22 | p.StartInfo.UseShellExecute = False 23 | p.StartInfo.RedirectStandardInput = True 24 | p.StartInfo.RedirectStandardOutput = True 25 | p.StartInfo.RedirectStandardError = True 26 | p.StartInfo.CreateNoWindow = True 27 | p.Start() 28 | p.StandardInput.WriteLine("start """""""" " & """" & TaskName & """" & " >nul 2>nul") 29 | p.StandardInput.WriteLine("exit") 30 | p.StandardOutput.ReadToEnd() 31 | p.StandardOutput.Close() 32 | p.Dispose() 33 | Return True 34 | Catch ex As Exception 35 | Return False 36 | End Try 37 | End Function 38 | ''' 39 | ''' 运行程序(异步执行,多次调用本函数会打开多个TaskName程序) 40 | ''' 41 | ''' 程序名称(例如"notepad"或"notepad.exe") 42 | ''' TaskName程序是否获得鼠标焦点(程序运行后,有些可能会遮挡焦点窗体,如“记事本”、“画图”,有些甚至会强制抢占焦点,如“计算器”) 43 | ''' 是否执行成功 44 | ''' 45 | Public Shared Function RunAsync(ByVal TaskName As String, Optional ByVal MouseFocus As Boolean = True) As Boolean 46 | Try 47 | If TaskName.ToLower.EndsWith(".exe") = False Then 48 | TaskName = TaskName & ".exe" 49 | End If 50 | If MouseFocus Then 51 | Shell(TaskName, AppWinStyle.NormalFocus, False) 52 | Else 53 | Shell(TaskName, AppWinStyle.NormalNoFocus, False) 54 | End If 55 | Return True 56 | Catch ex As Exception 57 | Return False 58 | End Try 59 | End Function 60 | 61 | 62 | 63 | ''' 64 | ''' 关闭程序(同步阻塞,强制结束所有的TaskName程序的进程树) 65 | ''' 66 | ''' 程序名称(例如"notepad"或"notepad.exe") 67 | ''' 是否执行成功 68 | ''' 69 | Public Shared Function Kill(ByVal TaskName As String) As Boolean 70 | Try 71 | If TaskName.ToLower.EndsWith(".exe") = False Then 72 | TaskName = TaskName & ".exe" 73 | End If 74 | Dim p As New Process 75 | p.StartInfo.FileName = "cmd.exe" 76 | p.StartInfo.UseShellExecute = False 77 | p.StartInfo.RedirectStandardInput = True 78 | p.StartInfo.RedirectStandardOutput = True 79 | p.StartInfo.RedirectStandardError = True 80 | p.StartInfo.CreateNoWindow = True 81 | p.Start() 82 | p.StandardInput.WriteLine("taskkill /f /t /im " & """" & TaskName & """" & " >nul 2>nul") 83 | p.StandardInput.WriteLine("exit") 84 | p.StandardOutput.ReadToEnd() 85 | p.StandardOutput.Close() 86 | p.Dispose() 87 | Return True 88 | Catch ex As Exception 89 | Return False 90 | End Try 91 | End Function 92 | ''' 93 | ''' 关闭程序(异步执行,强制结束所有的TaskName程序的进程树) 94 | ''' 95 | ''' 程序名称(例如"notepad"或"notepad.exe") 96 | ''' 是否执行成功 97 | ''' 98 | Public Shared Function KillAsync(ByVal TaskName As String) As Boolean 99 | Try 100 | If TaskName.ToLower.EndsWith(".exe") = False Then 101 | TaskName = TaskName & ".exe" 102 | End If 103 | Shell("taskkill /f /t /im " & """" & TaskName & """", AppWinStyle.Hide, False) 104 | Return True 105 | Catch ex As Exception 106 | Return False 107 | End Try 108 | End Function 109 | 110 | 111 | 112 | ''' 113 | ''' 获取进程名称列表(全部进程,包括"Idle"进程,返回结果的字符串中不含".exe"后缀) 114 | ''' 115 | ''' 结果字符串数组(失败返回空String数组) 116 | ''' 117 | Public Shared Function ListName() As String() 118 | Dim Processes As Process() = Process.GetProcesses() 119 | Dim TaskList As List(Of String) = New List(Of String)(Processes.Length) 120 | For Each P In Processes 121 | TaskList.Add(P.ProcessName) 122 | Next 123 | Return TaskList.ToArray() 124 | End Function 125 | ''' 126 | ''' 获取窗口标题列表(有窗体的进程,只能获取到进程的主窗体的标题) 127 | ''' 128 | ''' 结果字符串数组(失败返回空String数组) 129 | ''' 130 | Public Shared Function ListTitle() As String() 131 | Dim Processes As Process() = Process.GetProcesses() 132 | Dim TaskList As List(Of String) = New List(Of String)(Processes.Length) 133 | For Each P In Processes 134 | If P.MainWindowTitle <> "" Then 135 | TaskList.Add(P.MainWindowTitle) 136 | End If 137 | Next 138 | Return TaskList.ToArray() 139 | End Function 140 | ''' 141 | ''' 获取进程文件路径列表(部分进程获取不到) 142 | ''' 143 | ''' 结果字符串数组(失败返回空String数组) 144 | ''' 145 | Public Shared Function ListFilePath() As String() 146 | Dim Processes As Process() = Process.GetProcesses() 147 | Dim TaskList As List(Of String) = New List(Of String)(Processes.Length) 148 | For Each P In Processes 149 | Try 150 | TaskList.Add(P.MainModule.FileName) 151 | Catch ex As Exception 152 | 'MsgBox(P.ProcessName & ex.ToString()) 153 | End Try 154 | Next 155 | Return TaskList.ToArray() 156 | End Function 157 | 158 | 159 | 160 | ''' 161 | ''' 根据进程名称,获取进程 162 | ''' 163 | ''' 进程名称(不含".exe"后缀) 164 | ''' 结果进程(Process,失败返回Nothing) 165 | ''' 166 | Public Shared Function FindByName(ByVal TaskName As String) As Process 167 | Dim Processes As Process() = Process.GetProcesses() 168 | For Each P In Processes 169 | If P.ProcessName.ToLower() = TaskName.ToLower() Then 170 | Return P 171 | End If 172 | Next 173 | Return Nothing 174 | End Function 175 | ''' 176 | ''' 根据进程文件路径,获取进程 177 | ''' 178 | ''' 文件路径(可以是相对路径) 179 | ''' 结果进程(Process,失败返回Nothing) 180 | ''' 181 | Public Shared Function FindByFilePath(ByVal FilePath As String) As Process 182 | Dim Processes As Process() = Process.GetProcesses() 183 | If FilePath.Contains(":") = False Then 184 | FilePath = System.IO.Directory.GetCurrentDirectory + "\" + FilePath 185 | End If 186 | For Each P In Processes 187 | Try 188 | If P.MainModule.FileName.ToLower() = FilePath.ToLower() Then 189 | Return P 190 | End If 191 | Catch ex As Exception 192 | 'MsgBox(P.ProcessName & ex.ToString()) 193 | End Try 194 | Next 195 | Return Nothing 196 | End Function 197 | ''' 198 | ''' 搜索窗口标题,获取进程(优先搜索字符串完全相同的,然后搜索包含有指定字符串的) 199 | ''' 200 | ''' 窗口标题(字符串不必完全相同) 201 | ''' 结果进程(Process,失败返回Nothing) 202 | ''' 203 | Public Shared Function SearchByTitle(ByVal Title As String) As Process 204 | Dim Processes As Process() = Process.GetProcesses() 205 | For Each P In Processes 206 | If P.MainWindowTitle.ToLower() = Title.ToLower() Then 207 | Return P 208 | End If 209 | Next 210 | For Each P In Processes 211 | If P.MainWindowTitle.ToLower().Contains(Title.ToLower()) Then 212 | Return P 213 | End If 214 | Next 215 | Return Nothing 216 | End Function 217 | 218 | 219 | 220 | Private Declare Function SuspendThread Lib "kernel32.dll" Alias "SuspendThread" (ByVal hThread As IntPtr) As Int32 221 | Private Declare Function ResumeThread Lib "kernel32.dll" Alias "ResumeThread" (ByVal hThread As IntPtr) As Int32 222 | Private Declare Function OpenThread Lib "kernel32.dll" Alias "OpenThread" (ByVal dwDesiredAccess As UInt32, ByVal bInheritHandle As Boolean, ByVal dwThreadId As UInt32) As IntPtr 223 | _ 224 | Private Enum ThreadAccess As UInt32 225 | Standard = &HF0000UI 226 | Synchronize = &H100000UI 227 | All = &H1F0FFFUI 228 | End Enum 229 | 230 | ''' 231 | ''' 挂起进程的所有线程(Suspend Count加1) 232 | ''' 233 | ''' 进程(Process) 234 | ''' 是否执行成功 235 | ''' 236 | Public Shared Function ThreadSuspend(ByVal Process As Process) As Boolean 237 | If Process Is Nothing OrElse Process.HasExited Then 238 | Return False 239 | End If 240 | Dim Threads As ProcessThreadCollection = Process.Threads 241 | Dim Result As Boolean = True 242 | For I = 0 To Threads.Count - 1 243 | Dim ThreadId As Int32 = Threads(I).Id 244 | Dim ThreadhWnd As IntPtr = OpenThread(ThreadAccess.All, False, ThreadId) 245 | Result = Result And SuspendThread(ThreadhWnd) <> -1 246 | Next 247 | Return Result 248 | End Function 249 | ''' 250 | ''' 恢复进程的所有线程(Suspend Count减1) 251 | ''' 252 | ''' 进程(Process) 253 | ''' 是否执行成功 254 | ''' 255 | Public Shared Function ThreadResume(ByVal Process As Process) As Boolean 256 | If Process Is Nothing OrElse Process.HasExited Then 257 | Return False 258 | End If 259 | Dim Threads As ProcessThreadCollection = Process.Threads 260 | Dim Result As Boolean = True 261 | For I = 0 To Threads.Count - 1 262 | Dim ThreadId As Int32 = Threads(I).Id 263 | Dim ThreadhWnd As IntPtr = OpenThread(ThreadAccess.All, False, ThreadId) 264 | Result = Result And ResumeThread(ThreadhWnd) <> -1 265 | Next 266 | Return Result 267 | End Function 268 | ''' 269 | ''' 强制恢复进程的所有线程(Suspend Count减到0) 270 | ''' 271 | ''' 进程(Process) 272 | ''' 是否执行成功 273 | ''' 274 | Public Shared Function ThreadFree(ByVal Process As Process) As Boolean 275 | If Process Is Nothing OrElse Process.HasExited Then 276 | Return False 277 | End If 278 | Dim Threads As ProcessThreadCollection = Process.Threads 279 | Dim Result As Boolean = True 280 | For I = 0 To Threads.Count - 1 281 | Dim ThreadId As Int32 = Threads(I).Id 282 | Dim ThreadhWnd As IntPtr = OpenThread(ThreadAccess.All, False, ThreadId) 283 | Dim Temp As Int32 = ResumeThread(ThreadhWnd) 284 | Result = Result And Temp <> -1 285 | While Temp > 0 286 | Temp = ResumeThread(ThreadhWnd) 287 | Result = Result And Temp <> -1 288 | End While 289 | Next 290 | Return Result 291 | End Function 292 | 293 | ''' 294 | ''' 限制进程的CPU占用(通过不断挂起和恢复线程) 295 | ''' 296 | ''' 进程(Process) 297 | ''' 挂起等待的持续时间(默认50毫秒,最少1毫秒) 298 | ''' 挂起恢复的间隔时间(默认50毫秒,最少1毫秒) 299 | ''' 是否执行成功 300 | ''' 301 | Public Shared Function ThreadLimit(ByVal Process As Process, Optional ByVal SleepMillisecond As UInt32 = 50, Optional ByVal IntervalMillisecond As UInt32 = 50) As Boolean 302 | If Process Is Nothing OrElse Process.HasExited Then 303 | Return False 304 | End If 305 | If SleepMillisecond <= 0 Then 306 | SleepMillisecond = 1 307 | End If 308 | If IntervalMillisecond <= 0 Then 309 | IntervalMillisecond = 1 310 | End If 311 | Dim Temp As New ThreadLimitTask(Process, SleepMillisecond, IntervalMillisecond) 312 | Return True 313 | End Function 314 | Private Class ThreadLimitTask 315 | Private Process As Process 316 | Private SleepMillisecond As UInt32 317 | Private IntervalMillisecond As UInt32 318 | Private Thread As New Threading.Thread(New Threading.ThreadStart(AddressOf Run)) 319 | Public Sub New(ByVal TaskProcess As Process, ByVal TaskSleepMillisecond As UInt32, ByVal TaskIntervalMillisecond As UInt32) 320 | Process = TaskProcess 321 | SleepMillisecond = TaskSleepMillisecond 322 | IntervalMillisecond = TaskIntervalMillisecond 323 | Thread.Start() 324 | End Sub 325 | Private Sub Run() 326 | While Thread.IsAlive 327 | If Process.HasExited Then 328 | Thread.Abort() 329 | End If 330 | Dim Threads As ProcessThreadCollection = Process.Threads 331 | For I = 0 To Threads.Count - 1 332 | Dim ThreadId As Int32 = Threads(I).Id 333 | Dim ThreadhWnd As IntPtr = OpenThread(ThreadAccess.All, False, ThreadId) 334 | SuspendThread(ThreadhWnd) 335 | Next 336 | Try 337 | System.Threading.Thread.Sleep(SleepMillisecond) 338 | Catch ex As Exception 339 | End Try 340 | For I = 0 To Threads.Count - 1 341 | Dim ThreadId As Int32 = Threads(I).Id 342 | Dim ThreadhWnd As IntPtr = OpenThread(ThreadAccess.All, False, ThreadId) 343 | ResumeThread(ThreadhWnd) 344 | Next 345 | Try 346 | System.Threading.Thread.Sleep(IntervalMillisecond) 347 | Catch ex As Exception 348 | End Try 349 | End While 350 | End Sub 351 | End Class 352 | 353 | End Class 354 | 355 | End Namespace -------------------------------------------------------------------------------- /MyVisualBasic/Time.vb: -------------------------------------------------------------------------------- 1 | Namespace My 2 | 3 | ''' 4 | ''' 时间管理、转换相关函数 5 | ''' 6 | ''' 7 | Partial Public NotInheritable Class Time 8 | 9 | ''' 10 | ''' 将当前线程挂起指定的时间(System.Threading.Thread.Sleep) 11 | ''' 12 | ''' 等待时间(单位毫秒,必须为非负值) 13 | ''' 14 | Public Shared Sub Wait(ByVal Millisecond As UInt32) 15 | If Millisecond <= 0 Then 16 | Return 17 | End If 18 | Try 19 | System.Threading.Thread.Sleep(Millisecond) 20 | Catch ex As Exception 21 | End Try 22 | End Sub 23 | 24 | 25 | 26 | ''' 27 | ''' 获取UNIX时间戳 28 | ''' 29 | ''' UNIX时间戳整数 30 | ''' 31 | Public Shared Function Stamp() As UInt32 32 | Return (Now.ToUniversalTime() - New DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds() 33 | End Function 34 | 35 | End Class 36 | 37 | End Namespace -------------------------------------------------------------------------------- /Program.vb: -------------------------------------------------------------------------------- 1 | Class Program 2 | 3 | ''' 4 | ''' 应用程序的主入口点。 5 | ''' 6 | ''' 7 | _ 8 | Public Shared Sub Main() 9 | 10 | Try 11 | '始终捕获异常(UI线程不会因为异常而直接结束) 12 | Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException) 13 | Catch ex As InvalidOperationException 14 | '多次执行Main函数无效(只启动一次窗体) 15 | Return 16 | End Try 17 | 18 | AddHandler Application.ThreadException, AddressOf Application_ThreadException 19 | AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException 20 | 21 | Application.EnableVisualStyles() 22 | Application.SetCompatibleTextRenderingDefault(False) 23 | 24 | '设置启动窗体 25 | Dim FormMain = New FormMain() 26 | FormMain.Opacity = 0 27 | FormMain.Hide() 28 | Application.Run(FormMain) 29 | 30 | End Sub 31 | 32 | 33 | 34 | ''' 35 | ''' 在这里处理UI线程异常,注意:函数执行完成后,应用程序仍会继续运行 36 | ''' 37 | ''' 38 | Private Shared Sub Application_ThreadException(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs) 39 | MessageBox.Show("窗体UI线程发生异常," & DateTime.Now.ToString() & ":" & vbCrLf & e.Exception.ToString()) 40 | End Sub 41 | ''' 42 | ''' 在这里处理子线程异常,注意:函数执行完成后,应用程序就会被终止 43 | ''' 44 | ''' 45 | Private Shared Sub CurrentDomain_UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) 46 | MessageBox.Show("子线程发生异常," & DateTime.Now.ToString() & ":" & vbCrLf & e.ExceptionObject.ToString()) 47 | End Sub 48 | 49 | 50 | 51 | ''' 52 | ''' 测试异常捕获效果(触发一个UI线程异常和一个子线程异常) 53 | ''' 54 | ''' 55 | Public Shared Sub TestException() 56 | Dim Temp As New Threading.Thread(New Threading.ThreadStart(AddressOf TestExceptionThread)) 57 | Temp.Start() 58 | Throw New Exception("测试用的UI线程异常") 59 | End Sub 60 | Private Shared Sub TestExceptionThread() 61 | Throw New Exception("测试用的子线程异常") 62 | End Sub 63 | 64 | End Class -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MyVisualBasic 2 | MyVisualBasic is a function library for Windows application development, it extends the "My" namespace of VB.NET. 3 | 4 | ## [简介] 5 | Windows应用程序开发函数库,扩展 VB.NET 中的 "My" 命名空间 6 | 对Win32 API,VBScript,Batch等进行了封装,对常用的函数功能进行了分类整理 7 | 8 | ## [用法] 9 | 引入【MyVisualBasic】文件夹中的任意 ".vb" 文件,获得函数功能的扩展 10 | 引入方法:解决方案资源管理器,显示所有文件,刷新,右键 ".vb" 文件,包括在项目内 11 | 各个 ".vb" 文件之间互不依赖,可根据需要选择使用,推荐完全引入,直接复制粘贴整个文件夹 12 | 13 | ## [结构] 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
Security.vb编码解码、加密解密相关函数
Http.vbHTTP网络请求相关函数
IO.vb磁盘文件读写相关函数
Resource.vb程序资源文件相关函数
StringProcessing.vb字符串处理相关函数
Power.vb电源管理计划相关函数
Task.vb进程管理相关函数
Screen.vb屏幕截图相关函数
Keyboard.vb模拟键盘操作相关函数
Time.vb时间管理、转换相关函数
Mouse.vb模拟鼠标操作相关函数
Window.vb窗口管理、控制相关函数
64 | 65 | ## [示例] 66 | '创建快捷方式 67 | My.IO.WriteLinkFile("MyVisualBasic.exe", "快捷方式名称.lnk", "参数", "描述") 68 | 69 | '将字符串转换为类似01010101的二进制形式的字符串,并写入到txt文件中 70 | My.IO.WriteString(My.Security.Binary_Encode("字符串"), "binary.txt") 71 | 72 | '获取当前目录下所有的文件列表,并保存到txt文件中 73 | My.IO.WriteStringArray(My.IO.ListFile(), "list.txt") 74 | 75 | '获取网页源码,并分离出其中所有的href属性值,返回字符串数组 76 | My.StringProcessing.FindAll(My.Http.GetString("http://www.baidu.com"), "href=""", """") 77 | 78 | '打开和关闭记事本程序,在cmd窗口同步阻塞 79 | My.Task.RunAsync("notepad") : My.Task.Run("cmd") : My.Task.KillAsync("notepad") 80 | 81 | '将完整的屏幕截图保存为png文件,并将60%比例的屏幕缩略图保存为jpg文件 82 | My.Screen.Image().Save("10.png") : My.Screen.ImageThumbnail(0.6).Save("6.jpg", Imaging.ImageFormat.Jpeg) 83 | 84 | '模拟键盘敲击,发送组合键:切换输入法Ctrl+Shift,关闭当前窗口Alt+F4,QQ屏幕截图Ctrl+Alt+A 85 | My.Keyboard.Click(Keys.ControlKey, Keys.ShiftKey) 86 | My.Keyboard.Click(Keys.Menu, Keys.F4) 87 | My.Keyboard.Click(Keys.ControlKey, Keys.Menu, Keys.A) 88 | 89 | '模拟键盘敲击,输入一段字符串,输入每个字符的时间间隔为50毫秒 90 | My.Keyboard.Input("1!2@3#4$5%6^7&8*9(0)-_=+Aa", 50) 91 | 92 | '模拟连续复制粘贴字符,输入一段字符串,输入每个字符的时间间隔为100毫秒 93 | My.Keyboard.PasteDelay("这是一段中文字符。", 100) 94 | 95 | '模拟用户操作,打开“画图”程序,粘贴屏幕截图,并将文件保存到桌面,关闭“画图”程序 96 | Dim Screenshot As Bitmap = My.Screen.Image() 97 | Dim SavePath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 98 | My.Task.RunAsync("mspaint.exe") 99 | My.Time.Wait(500) 100 | My.Keyboard.Paste(Screenshot) 101 | My.Keyboard.Click(Keys.ControlKey, Keys.S) 102 | My.Time.Wait(500) 103 | My.Keyboard.Paste(SavePath & "\截图" & My.Time.Stamp() & ".png") 104 | My.Keyboard.Click(Keys.Enter) 105 | My.Time.Wait(500) 106 | My.Task.KillAsync("mspaint.exe") 107 | 108 | '模拟用户操作,移动鼠标到桌面右下角(显示桌面),单击2下,并将鼠标移回初始位置 109 | Dim Position As Point = My.Mouse.Position() 110 | My.Mouse.MoveToPercent(1, 1) 111 | My.Mouse.LeftClick() 112 | My.Time.Wait(1000) 113 | My.Mouse.LeftClick() 114 | My.Mouse.MoveToPosition(Position) 115 | 116 | '模拟用户操作,打开“计算器”程序,在窗体无焦点的情况下,输入“1+2/3-4*5=”,保存结果截图 117 | Dim SavePath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 118 | My.Task.RunAsync("calc.exe") 119 | My.Time.Wait(1000) 120 | My.Window.SetFocus(Me.Handle) 121 | Dim Calc As IntPtr = My.Window.FindByTitle("计算器") 122 | My.Window.SendKey(Calc, Keys.D1) 123 | My.Time.Wait(100) 124 | My.Window.SendKey(Calc, Keys.Add) 125 | My.Time.Wait(100) 126 | My.Window.SendKey(Calc, Keys.D2) 127 | My.Time.Wait(100) 128 | My.Window.SendKey(Calc, Keys.Divide) 129 | My.Time.Wait(100) 130 | My.Window.SendKey(Calc, Keys.D3) 131 | My.Time.Wait(100) 132 | My.Window.SendKey(Calc, Keys.Subtract) 133 | My.Time.Wait(100) 134 | My.Window.SendKey(Calc, Keys.D4) 135 | My.Time.Wait(100) 136 | My.Window.SendKey(Calc, Keys.Multiply) 137 | My.Time.Wait(100) 138 | My.Window.SendKey(Calc, Keys.D5) 139 | My.Time.Wait(100) 140 | My.Window.SendKey(Calc, Keys.Oemplus) 141 | My.Time.Wait(100) 142 | My.Window.Image(Calc).Save(SavePath & "\计算结果" & My.Time.Stamp() & ".png") 143 | My.Task.KillAsync("calc.exe") 144 | 145 | ## [说明] 146 | - 默认字符编码:UTF-8 147 | - 开发测试环境:Windows 7 + Visual Studio 2010(.NET Franmework 2.0) 148 | - 项目需要引用:System,System.Drawing,System.Web,System.Windows.Forms 149 | - 代码空行规则:可以重载的或功能类似的函数不用空行隔开,有一定关系的函数隔开一行,无关的函数隔开三行 150 | - 代码注释示例:“结果字符串(失败返回空字符串)”,“结果Byte数组(失败返回空Byte数组)”,“使用特定的字符编码(默认UTF-8)” 151 | - 总体设计准则:采用面向过程(Procedure Oriented)为主,面向对象(Object Oriented)为辅的设计和实现方法,函数功能模块化 152 | - 函数实现准则:所有可供外部调用的函数功能,都采用公共静态(Public Shared)声明,并且保证相互之间没有依赖关系 153 | - 其它语言实现:MyCSharp(本函数库的 C# 语言等价实现) 154 | 155 | ## [笔记] 156 | 01. 在Visual Studio中显示行号:工具,选项,文本编辑器,所有语言,显示行号 157 | 02. VB.NET中,数组与ArrayList互相转换: 158 | Dim ArrayList As New ArrayList(New String() {}) : ArrayList.ToArray(String.Empty.GetType()) 159 | 03. VB.NET中,数组元素个数的声明与其它语言不同,以下代码会输出3: 160 | Dim Array(2) As String 161 | MsgBox(Array.Length) 162 | 04. VB.NET中,双引号使用两个双引号来转义替代,如 """" 表示1个双引号的字符串,字符串用 & 符号来连接 163 | 05. VB.NET中,想要在“调试”状态下,程序也能正常捕获UI异常,需要:项目,属性,应用程序,取消“启用应用程序框架”,将“启动对象”设置为自定义的Main函数(参考本函数库中的 Program.vb 文件) 164 | 06. 从 .NET Framework 2.0 版开始,将无法通过 try-catch 块捕获 StackOverflowException 对象,并且默认情况下将立即终止相应的进程,而 OutOfMemoryException 则可以捕获并处理 165 | 07. System.Drawing.Imaging.ImageFormat的图片保存质量及文件大小降序排列,实测结果: 166 | Bmp(最大)> Tiff > Exif/Icon/MemoryBmp > Png/Emf/Wmf(默认) > Gif > Jpeg(最小) 167 | 08. VB.NET中,SendKeys函数不能模拟发送PrintScreen键(全屏截图),必须使用底层的keybd_event函数实现才可以: 168 | My.Computer.Keyboard.SendKeys(Keys.PrintScreen) '内置函数,无效 169 | System.Windows.Forms.SendKeys.Send(Keys.PrintScreen) '内置函数,无效 170 | My.Keyboard.Click(Keys.PrintScreen) '本函数库,有效 171 | 09. 在Windows中,底层的keybd_event函数,也不能发送某些(跳转到当前用户的界面之外的)特殊组合键: 172 | My.Keyboard.Click(Keys.LWin, Keys.D) 'Win+D 显示桌面,有效 173 | My.Keyboard.Click(Keys.LWin, Keys.L) 'Win+L 锁定电脑,无效 174 | My.Keyboard.Click(Keys.ControlKey, Keys.ShiftKey, Keys.Escape) 'Ctrl+Shift+Esc 打开任务管理器,有效 175 | My.Keyboard.Click(Keys.ControlKey, Keys.Menu, Keys.Delete) 'Ctrl+Alt+Delete 跳转系统界面,无效 176 | 10. 无法模拟“Win+L”的问题,本函数库提供了一个替代方案,调用“user32.dll”中的“LockWorkStation”: 177 | My.Power.Lock() '锁定电脑,有效 178 | 11. VB.NET中,需要将函数指针作为参数传递时,可以用“Delegate Function”定义一个函数类型,然后用“AddressOf”获得函数的指针 179 | 12. VB.NET中,调用.dll文件时,Alias后的函数名才是.dll中真正起作用的函数的名称,Alias不存在时,才会寻找同名函数 180 | 13. VB.NET中,频繁修改窗体内容(如修改背景图片),会导致内存泄露和卡顿闪烁的问题,解决方案: 181 | If Not BackgroundImage Is Nothing Then BackgroundImage.Dispose() '在修改背景图片之前,销毁旧的背景图片 182 | System.GC.Collect() '在适当的时机和代码位置,强制进行即时垃圾回收(会增加 CPU 负荷) 183 | SetStyle(ControlStyles.OptimizedDoubleBuffer, True) '先在缓冲区中绘制,然后再绘制到屏幕上,以减少闪烁 184 | SetStyle(ControlStyles.AllPaintingInWmPaint, True) '忽略擦除背景的窗口消息,不擦除之前的背景,以减少闪烁 185 | 14. VB.NET中,使用“SyncLock Me”和“End SyncLock”代码块,来实现类似其它语言中的“synchronized(this)”同步锁 186 | 15. VB.NET中,使用“Nothing”、“New IntPtr(0)”、“IntPtr.Zero”,来实现类似其它语言中的“null”空指针 187 | 16. VB.NET中,使用“&HFFFFFFFFUI”的形式,尾缀UI,来表示16进制的32位无符号整数,即UInt32.MaxValue 188 | 17. VB.NET中,使用“AndAlso”、“OrElse”,来实现类似其它语言中的“&&”、“||”逻辑判断短路 189 | 18. 要想让窗体在启动的时候就隐藏,最好使用“Opacity = 0”来隐藏 190 | 如果使用“Visible = False”或“Hide()”,写在Form_Load事件中无效果,写在Form_Shown事件中会导致窗体闪一下再消失 191 | 19. 在Visual Studio中设定制表符:工具,选项,文本编辑器,所有语言,制表符,大小4,缩进4,插入空格 192 | 20. VB.NET中,将UInt64转换为UInt32(保留较低的32位)的方法:Convert.ToUInt32(&HFFFFFFFFUI And UInt64.MaxValue),位运算结果为UInt32.MaxValue -------------------------------------------------------------------------------- /exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /windows.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoonLord-LM/MyVisualBasic/f8ffb4f9dfe46ba4533ab7fc1161961d1c73f398/windows.ico --------------------------------------------------------------------------------