表示SegmentFault貌似都是些前後端的人在玩,額,果斷來寫點不一樣的東西好了。
GitHub引用地址:https://github.com/MoonLord-L...
100%原創整理,求Star,求類似函式庫或程式碼分享,求BUG……
[繞坑教程,一些奇技淫巧]
在Visual Studio中顯示行號:工具,選項,文字編輯器,所有語言,顯示行號
VB.NET中,陣列與ArrayList互相轉換:(New ArrayList(New String() {})).ToArray(String.Empty.GetType())
VB.NET中,陣列元素個數的宣告與其它語言不同,Dim Array(2) As String : MsgBox(Array.Length),輸出3
VB.NET中,雙引號使用兩個雙引號來轉義替代,如""""表示1個雙引號的字串,字串用&符號來連線
VB.NET中,想要在“除錯”狀態下,程式也能正常捕獲UI異常,需要:專案,屬性,應用程式,取消“啟用應用程式框架”,將“啟動物件”設定為自定義的Main函式(參考本函式庫中的Program.vb檔案)
從 .NET Framework 2.0 版開始,將無法通過 try-catch 塊捕獲 StackOverflowException 物件,並且預設情況下將立即終止相應的程式,而 OutOfMemoryException 則可以捕獲並處理
-
System.Drawing.Imaging.ImageFormat的圖片儲存質量及檔案大小降序排列,實測結果:
Bmp(最大)> Tiff > Exif/ Icon /MemoryBmp > Png/ Emf /Wmf(預設) > Gif > Jpeg(最小)
-
VB.NET中,SendKeys函式不能模擬傳送PrintScreen鍵(全屏截圖),必須使用底層的keybd_event函式實現才可以:
My.Computer.Keyboard.SendKeys(Keys.PrintScreen) '內建函式,無效 System.Windows.Forms.SendKeys.Send(Keys.PrintScreen) '內建函式,無效 My.Keyboard.Click(Keys.PrintScreen) '本函式庫,有效
-
在Windows中,底層的keybd_event函式,也不能傳送某些(跳轉到當前使用者的介面之外的)特殊組合鍵:
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 跳轉系統介面,無效
-
無法模擬“Win+L”的問題,本函式庫提供了一個替代方案,呼叫“user32.dll”中的“LockWorkStation”:
My.Power.Lock() '鎖定電腦,有效
VB.NET中,需要將函式指標作為引數傳遞時,可以用“Delegate Function”定義一個函式型別,然後用“AddressOf”獲得函式的指標
VB.NET中,呼叫.dll檔案時,Alias後的函式名才是.dll中真正起作用的函式的名稱,Alias不存在時,才會尋找同名函式
-
VB.NET中,頻繁修改窗體內容(如修改背景圖片),會導致記憶體洩露和卡頓閃爍的問題,解決方案:
If Not BackgroundImage Is Nothing Then BackgroundImage.Dispose() '在修改背景圖片之前,銷燬舊的背景圖片 System.GC.Collect() '在適當的時機和程式碼位置,強制進行即時垃圾回收(會增加 CPU 負荷) SetStyle(ControlStyles.OptimizedDoubleBuffer, True) '先在緩衝區中繪製,然後再繪製到螢幕上,以減少閃爍 SetStyle(ControlStyles.AllPaintingInWmPaint, True) '忽略擦除背景的視窗訊息,不擦除之前的背景,以減少閃爍
VB.NET中,使用“SyncLock Me”和“End SyncLock”程式碼塊,來實現類似其它語言中的“synchronized(this)”同步鎖
VB.NET中,使用“Nothing”、“New IntPtr(0)”,來實現類似其它語言中的“null”空指標
VB.NET中,使用“&HFFFFFFFFUI”的形式,尾綴UI,來表示16進位制的無符號整數,即UInt32.MaxValue
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...
採用標準的文件註釋,持續更新,歡迎拿去隨便用。
函式庫程式碼結構:
滑鼠控制原始碼示例:
視窗控制註釋效果:
鍵盤控制註釋效果: