Time of Update: 2018-12-05
自上次發布 QQ訊息自動發送器 也有一段時間了,一直沒有寫API相關的文章了,今天再發布一個做API相關開發的輔助小工具,以前也提到過,win32平台是基於訊息message的機制,基本上所有的任務,都是可以利用訊息捕獲的。說明: 在訊息機制中,所謂的“視窗控制代碼”中的視窗,並不是指我們開發人員接觸最多的Form,而是指所有的contorl,例如:Button, Label, select, treeview, menu, textbox 等等,而Form只是其中之一而已,不要混淆了這個概念
Time of Update: 2018-12-05
擷取本機(網關)的外網IP,在C#裡面實現的方法,通常是遍曆擷取到的原生IP地址,然後判斷,不過這種方式只能取得獨立撥號或具有獨立公網IP的地址,對於區域網路的方式,是取不到的,這種方式的代碼大致如下:System.Net.IPHostEntry ips = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());foreach (System.Net.IPAddress ip in ips.AddressList){
Time of Update: 2018-12-05
C#裡面,重新命名檔案時,沒有 rename 這個功能,使用的是FileInfo.MoveTo的方式,MoveTo 到原目錄裡一個新的名字,即實現了重新命名我這裡舉一個例子,將某個目錄下的所有檔案,或者某個檔案類型的所有檔案,按數值索引全部重新命名DirectoryInfo di = new DirectoryInfo(@"路徑");int idx = 0;foreach (FileInfo fi in di.GetFiles())//可以用 di.GetFiles("*.jpg")
Time of Update: 2018-12-05
.Net本身的功能雖然很強,但是,有些時候,控制台、命令列的功用還是不可忽視的,恰當的使用命令列,可以起到事半功倍的效果這裡要說的是以 .net 的程式為宿主,調用 命令列程式,執行某些操作,並將命令列的輸出結果返回到 .net 宿主裡。我們說的控制台程式,並不是單純的指cmd.exe/command.exe,而是泛指具有標準輸入、輸出功能的程式。因為通常的控制台程式,多數是在 cmd 命令列介面裡執行的,所以,我們以cmd為例子來說大家在cmd命令列裡,敲入 help 或
Time of Update: 2018-12-05
MPEG音頻檔案使用TAG區來描述該音頻檔案的一些相關資訊,例如:演唱者、專輯、發行年份、音樂名字、流派、所處的音軌以及一些附加的資訊這裡講的TAG,是針對 ID3 v1的版本,包括 v1.0 和 v1.1,在 ID3 v1 的版本定義中,TAG資訊是如下定義的: 存放在MP3檔案的尾部,佔用128個byte,內容不足時,使用 null (ascii = 0) 或者 空格(ascii=32)補齊這128個byte的分配情況如下:前3個bytes (0—2): 存放 TAG
Time of Update: 2018-12-05
引入命名空間using System;using System.Data;使用別名using sql = System.Data.SqlClient;namespace test{ public class test2 { public test2() { sql.SqlConnection = new Sql.SqlConnection(); //.... } }}利用 .NET 的 GC
Time of Update: 2018-12-05
前面幾篇,說了對防火牆的部分操作,今天說 如何 添加 和 刪除 允許通過防火牆的程式進入例外列表本篇,我們用到了COM引用,因為不使用COM引用的話,操作太過繁瑣了 一、 添加 COM 引用在引用裡,選擇 COM 頁, 找到 NetFwTypeLib , 確定即可二、 引入命名空間using NetFwTypeLib;三、 添加允許通過防火牆的例外程式//建立firewall管理類的執行個體INetFwMgr netFwMgr =
Time of Update: 2018-12-05
今天,看到網友諮詢DES加密的事,就寫了下面的類庫,sharing 一下,歡迎多交流 using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Security;using System.Security.Cryptography;/*---------------------------------------------- *
Time of Update: 2018-12-05
EXCEL裡面,預設的情況下,對於欄位內容長度超過15位的數字,後面的內容會全部被搞成0,真是自作多情啊!例如:常見的,我們輸入18位的社會安全號碼碼:111111111111111111,就會變成 111111111111111000而且,顯示也用科學計數方式顯示,真是太噁心了 最近有個需求,匯出一些人的設定檔到 CSV 或者 EXCEL,在匯出身份證時,就遇到了這個垃圾問題。經過一番尋找資料,找到瞭解決方法:對於匯出 CSV 檔案,在禁止轉義的內容前,加上一個TAB符號,C# 裡面是 \t
Time of Update: 2018-12-05
這是一個C#調用系統API SHGetFileInfo 的一個示範例子,也是給一位網友的回覆,先看:SHGetFileInfo 這個API, 可以擷取指定對象的非常詳細的相關資訊,具體的內容,大家可以MSDN上關於此API的說明。這個擷取關聯表徵圖,可以擷取磁碟分割的表徵圖,可以擷取某個特定類型的檔案的表徵圖,也可以擷取某個指定檔案的表徵圖,下面給出實現的全部代碼:/// <summary>/// 儲存檔案資訊的結構體/// </summary>///
Time of Update: 2018-12-05
對於複雜的、符合一定規則的字串替換來說,Regex無疑是強悍和高效的選擇對於Regex的使用,我也寫過幾篇文章了,具體可以見下面的地址http://zu14.cn/tag/regex/今天,說一下 .NET 裡面 正則 使用的稍微進階一些的技巧:分組替換 ,下面我們舉兩個執行個體來說明這個問題:一段字串,把其中出現的 Ax,Ay 形式的內容,替換為 Ax 的形式(也就是 ,和Ay 都不要了),其中x 和y是數字,位長是
Time of Update: 2018-12-05
Windows的硬體資訊儲存的機制,也是利用類資料庫的方式,採用WMI的查詢方式,基本可以擷取所有的硬體資訊,就像前面我提到的 C#遍曆系統所安裝的印表機.今天,有個網友,問及 MAC 位址的事,我就給出了下面的代碼:static string GetMAC(){using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration")){ManagementObjectCollection moc =
Time of Update: 2018-12-05
VarPtr 是 VB 中的一個函數,這個函數的作用,是返回變數的地址,說白了就是一個指標,但是,.Net平台放棄了指標,採用了委託,對於Managed 程式碼,.Net 的限制較多,這也跟 .NET 平台的本身定位有關係。VarPtr在 C# 和 VB.NET 中,都不存在了,但是,在使用.NET平台,做一些外設的二次開發的時候,有時還是需要用到類似 VarPtr 的功能,例如: USB 裝置介面, COM裝置等。這裡,給出一個 VarPtr 的 在 .NET 平台下 C#
Time of Update: 2018-12-05
在某些時候,我們有一些如下需要,例如:不能移動程式的表單;不能點擊關閉程式的表單;不能最大化/最小化表單等。上面的一些需求,通過對表單內容的一些設定,基本都可以實現,但是,確並不總是能滿足我們的需要。例如:我們需要讓關閉按鈕顯示,但是變灰(不能點擊),同時正常的顯示最大化和最小化按鈕API中,對於菜單的操作,可謂豐富,常用的有:我這裡,就舉2個例子, EnableMenuItem 和 DeleteMenu完整的代碼如下:[DllImport("user32.dll")]static
Time of Update: 2018-12-05
.NET 自從2.0開始,大大提升了 Mail.SmtpClient 的功能,對於發郵件,可謂遊刃有餘了。但是,美中不足的是沒有提供儲存郵件內容為eml檔案的功能實際上,SmtpClient 和 MailMessage 已經實現了這個功能,只是這個功能是 NonPublic 的,對於空間外,不可見而已。利用 Reflector 反編譯一下 System.Net.Mail.SmtpClient 可以看到: 在 Send(MailMessage) 方法中,在MAIL被發送之前,是調用了一個
Time of Update: 2018-12-05
利用 Windows 的 API 擷取案頭壁紙的實際路徑,使用的是 SystemParametersInfo 這個API,此API的功能非常豐富,壁紙操作只是一斑 。using System.Runtime.InteropServices;[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]static extern bool SystemParametersInfo(uint uAction, uint
Time of Update: 2018-12-05
今天,有個網友詢問:C#中,如何隨意拖動PictureBox?看到這個問題,我自然而然就聯想到了以前的拖動無邊框表單的實現上,其實,不只是PictureBox,基本上所有的控制項都可以被拖動。實現,就是利用Windows的API函數:SendMessage 和 ReleaseCapture 即可了,代碼很簡單。核心代碼如下:const uint WM_SYSCOMMAND = 0x0112; const uint SC_MOVE = 0xF010;const uint HTCAPTION =
Time of Update: 2018-12-05
有些時候,我們對一些內容,清理掉HTML標記,只保留純內容或一部分內容,例如下面的一段:<SPAN class = InsertWordsDisplay>這裡不要</span>只要這裡<SPAN class=\"InsertWordsDisplay\">不要(*)</span>對上面的這段代碼,我們只要藍色的內容,也就是“凡是被HTML標記包圍的內容,都不要了” C# 的實現方式:string strToBeFiltered =
Time of Update: 2018-12-05
擷取某張圖片上某個像素點的顏色值對應的 ARGB, 可以應用於圖片取色,圖片的顏色量化等方面…//像素點的座標值,根據實際情況來int x = 20, y = 40;using (Bitmap bmp = new Bitmap(@"檔案路徑")){ Color pixelColor = bmp.GetPixel(x, y); //像素點顏色的 Alpha 值 byte alpha = pixelColor.A; //顏色的 RED 分量值 byte red
Time of Update: 2018-12-05
在上一篇 MailMessage儲存為eml檔案(C#+SmtpClient) 中,我們使用了反射(Reflection)的方式,調用System.Net.Mail的內部對象 MailWriter 實現了將 MailMessage 的內容儲存為 eml 檔案。通過上次的實現,主要是學習反射Reflection的使用思路,起到個拋磚引玉的作用吧,算是今天,偶爾看到了上次的代碼,又重新發現了一個新大陸,使得儲存eml檔案的工作,變得異常簡單了