【VB.NET】桌面應用程序開發,新人繞坑指南+遊戲外掛腳本速成

表示SegmentFault貌似都是些先後端的人在玩,額,果斷來寫點不同的東西好了。
GitHub引用地址:https://github.com/MoonLord-L...
100%原創整理,求Star,求相似函數庫或代碼分享,求BUG……git

[繞坑教程,一些奇技淫巧]

  1. 在Visual Studio中顯示行號:工具,選項,文本編輯器,全部語言,顯示行號github

  2. VB.NET中,數組與ArrayList互相轉換:(New ArrayList(New String() {})).ToArray(String.Empty.GetType())後端

  3. VB.NET中,數組元素個數的聲明與其它語言不一樣,Dim Array(2) As String : MsgBox(Array.Length),輸出3數組

  4. VB.NET中,雙引號使用兩個雙引號來轉義替代,如""""表示1個雙引號的字符串,字符串用&符號來鏈接框架

  5. VB.NET中,想要在「調試」狀態下,程序也能正常捕獲UI異常,須要:項目,屬性,應用程序,取消「啓用應用程序框架」,將「啓動對象」設置爲自定義的Main函數(參考本函數庫中的Program.vb文件)編輯器

  6. 從 .NET Framework 2.0 版開始,將沒法經過 try-catch 塊捕獲 StackOverflowException 對象,而且默認狀況下將當即終止相應的進程,而 OutOfMemoryException 則能夠捕獲並處理ide

  7. System.Drawing.Imaging.ImageFormat的圖片保存質量及文件大小降序排列,實測結果:函數

    Bmp(最大)> Tiff > Exif/ Icon /MemoryBmp > Png/ Emf /Wmf(默認) > Gif > Jpeg(最小)
  8. VB.NET中,SendKeys函數不能模擬發送PrintScreen鍵(全屏截圖),必須使用底層的keybd_event函數實現才能夠:工具

    My.Computer.Keyboard.SendKeys(Keys.PrintScreen) '內置函數,無效  
    System.Windows.Forms.SendKeys.Send(Keys.PrintScreen) '內置函數,無效  
    My.Keyboard.Click(Keys.PrintScreen) '本函數庫,有效
  9. 在Windows中,底層的keybd_event函數,也不能發送某些(跳轉到當前用戶的界面以外的)特殊組合鍵:this

    My.Keyboard.Click(Keys.LWin, Keys.D) 'Win+D 顯示桌面,有效  
    My.Keyboard.Click(Keys.LWin, Keys.L) 'Win+L 鎖定電腦,無效  
    My.Keyboard.Click(Keys.ControlKey, Keys.ShiftKey, Keys.Escape) 'Ctrl+Shift+Esc 打開任務管理器,有效  
    My.Keyboard.Click(Keys.ControlKey, Keys.Menu, Keys.Delete) 'Ctrl+Alt+Delete 跳轉系統界面,無效
  10. 沒法模擬「Win+L」的問題,本函數庫提供了一個替代方案,調用「user32.dll」中的「LockWorkStation」:

    My.Power.Lock() '鎖定電腦,有效
  11. VB.NET中,須要將函數指針做爲參數傳遞時,能夠用「Delegate Function」定義一個函數類型,而後用「AddressOf」得到函數的指針

  12. VB.NET中,調用.dll文件時,Alias後的函數名纔是.dll中真正起做用的函數的名稱,Alias不存在時,纔會尋找同名函數

  13. VB.NET中,頻繁修改窗體內容(如修改背景圖片),會致使內存泄露和卡頓閃爍的問題,解決方案:

    If Not BackgroundImage Is Nothing Then BackgroundImage.Dispose() '在修改背景圖片以前,銷燬舊的背景圖片  
    System.GC.Collect() '在適當的時機和代碼位置,強制進行即時垃圾回收(會增長 CPU 負荷)  
    SetStyle(ControlStyles.OptimizedDoubleBuffer, True) '先在緩衝區中繪製,而後再繪製到屏幕上,以減小閃爍  
    SetStyle(ControlStyles.AllPaintingInWmPaint, True) '忽略擦除背景的窗口消息,不擦除以前的背景,以減小閃爍
  14. VB.NET中,使用「SyncLock Me」和「End SyncLock」代碼塊,來實現相似其它語言中的「synchronized(this)」同步鎖

  15. VB.NET中,使用「Nothing」、「New IntPtr(0)」,來實現相似其它語言中的「null」空指針

  16. VB.NET中,使用「&HFFFFFFFFUI」的形式,尾綴UI,來表示16進制的無符號整數,即UInt32.MaxValue

  17. VB.NET中,使用「AndAlso」、「OrElse」,來實現相似其它語言中的「&&」、「||」邏輯判斷短路

[腳本速成,直接上代碼]

'建立快捷方式

My.IO.WriteLinkFile("MyVisualBasic.exe", "快捷方式名稱.lnk", "參數", "描述")

'將字符串轉換爲相似01010101的二進制形式的字符串,並寫入到txt文件中

My.IO.WriteString(My.Security.Binary_Encode("字符串"), "binary.txt")

'獲取當前目錄下全部的文件列表,並保存到txt文件中

My.IO.WriteStringArray(My.IO.ListFile(), "list.txt")

'獲取網頁源碼,並分離出其中全部的href屬性值,返回字符串數組

My.StringProcessing.FindAll(My.Http.GetString("http://www.baidu.com"), "href=""", """")

'打開和關閉記事本程序,在cmd窗口同步阻塞

My.Task.RunAsync("notepad") : My.Task.Run("cmd") : My.Task.KillAsync("notepad")

'將完整的屏幕截圖保存爲png文件,並將60%比例的屏幕縮略圖保存爲jpg文件

My.Screen.Image().Save("10.png") : My.Screen.ImageThumbnail(0.6).Save("6.jpg", Imaging.ImageFormat.Jpeg)

'模擬鍵盤敲擊,發送組合鍵:切換輸入法Ctrl+Shift,關閉當前窗口Alt+F4,QQ屏幕截圖Ctrl+Alt+A

My.Keyboard.Click(Keys.ControlKey, Keys.ShiftKey)  
My.Keyboard.Click(Keys.Menu, Keys.F4)  
My.Keyboard.Click(Keys.ControlKey, Keys.Menu, Keys.A)

'模擬鍵盤敲擊,輸入一段字符串,輸入每一個字符的時間間隔爲50毫秒

My.Keyboard.Input("1!2@3#4$5%6^7&8*9(0)-_=+Aa", 50)

'模擬連續複製粘貼字符,輸入一段字符串,輸入每一個字符的時間間隔爲100毫秒

My.Keyboard.PasteDelay("這是一段中文字符。", 100)

'模擬用戶操做,打開「畫圖」程序,粘貼屏幕截圖,並將文件保存到桌面,關閉「畫圖」程序

Dim Screenshot As Bitmap = My.Screen.Image()  
Dim SavePath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)  
My.Task.RunAsync("mspaint.exe")  
My.Time.Wait(500)  
My.Keyboard.Paste(Screenshot)  
My.Keyboard.Click(Keys.ControlKey, Keys.S)  
My.Time.Wait(500)  
My.Keyboard.Paste(SavePath & "\截圖" & My.Time.Stamp() & ".png")  
My.Keyboard.Click(Keys.Enter)  
My.Time.Wait(500)  
My.Task.KillAsync("mspaint.exe")

'模擬用戶操做,移動鼠標到桌面右下角(顯示桌面),單擊2下,並將鼠標移回初始位置

Dim Position As Point = My.Mouse.Position()  
My.Mouse.MoveToPercent(1, 1)  
My.Mouse.LeftClick()  
My.Time.Wait(1000)  
My.Mouse.LeftClick()  
My.Mouse.MoveToPosition(Position)

'模擬用戶操做,打開「計算器」程序,在窗體無焦點的狀況下,輸入「1+2/3-4*5=」,保存結果截圖

Dim SavePath As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)  
My.Task.RunAsync("calc.exe")  
My.Time.Wait(1000)  
My.Window.SetFocus(Me.Handle)  
Dim Calc As IntPtr = My.Window.FindByTitle("計算器")  
My.Window.SendKey(Calc, Keys.D1)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.Add)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.D2)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.Divide)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.D3)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.Subtract)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.D4)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.Multiply)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.D5)  
My.Time.Wait(100)  
My.Window.SendKey(Calc, Keys.Oemplus)  
My.Time.Wait(100)  
My.Window.Image(Calc).Save(SavePath & "\計算結果" & My.Time.Stamp() & ".png")  
My.Task.KillAsync("calc.exe")

[求波關注]

GitHub地址:https://github.com/MoonLord-L...
採用標準的文檔註釋,持續更新,歡迎拿去隨便用。

函數庫代碼結構:
函數庫代碼結構

鼠標控制源代碼示例:
鼠標控制代碼示例

窗口控制註釋效果:
窗口控制代碼示例

鍵盤控制註釋效果:
鍵盤控制代碼示例

相關文章
相關標籤/搜索