C#實現檢測U盤的插拔
C# Winform中WndProc 函式作用:
主要用在攔截並處理系統訊息和自定義訊息
比如:
windows程式會產生很多訊息,比如你單擊滑鼠,移動視窗都會產生訊息。這個函式就是預設的訊息處理函式。你可以過載這個函式來制定自己的訊息處理流程.
在Winform程式中,可以重寫WndProc函式,來捕捉所有發生的視窗訊息。
這樣,我們就可以"篡改"傳入的訊息,而人為的讓視窗改變行為。
我們用C#實現檢測U盤插拔的功能,是用重寫C# WndProc函式來做到的。
簡單測試程式碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; //新增IO名稱空間 namespace CheckUdisk { public partial class Form1 : Form { //定義常量 public const int WM_DEVICECHANGE = 0x219; public const int DBT_DEVICEARRIVAL = 0x8000; public const int DBT_CONFIGCHANGECANCELED = 0x0019; public const int DBT_CONFIGCHANGED = 0x0018; public const int DBT_CUSTOMEVENT = 0x8006; public const int DBT_DEVICEQUERYREMOVE = 0x8001; public const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002; public const int DBT_DEVICEREMOVECOMPLETE = 0x8004; public const int DBT_DEVICEREMOVEPENDING = 0x8003; public const int DBT_DEVICETYPESPECIFIC = 0x8005; public const int DBT_DEVNODES_CHANGED = 0x0007; public const int DBT_QUERYCHANGECONFIG = 0x0017; public const int DBT_USERDEFINED = 0xFFFF; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } protected override void WndProc(ref Message m) { try { if (m.Msg == WM_DEVICECHANGE) { switch (m.WParam.ToInt32()) { case WM_DEVICECHANGE: break; case DBT_DEVICEARRIVAL: DriveInfo[] s = DriveInfo.GetDrives(); foreach (DriveInfo drive in s) { if (drive.DriveType == DriveType.Removable) { this.richTextBox1.AppendText("U盤已插入,碟符是" + drive.Name.ToString() + "\r\n"); break; } } break; case DBT_CONFIGCHANGECANCELED: MessageBox.Show("2"); break; case DBT_CONFIGCHANGED: MessageBox.Show("3"); break; case DBT_CUSTOMEVENT: MessageBox.Show("4"); break; case DBT_DEVICEQUERYREMOVE: MessageBox.Show("5"); break; case DBT_DEVICEQUERYREMOVEFAILED: MessageBox.Show("6"); break; case DBT_DEVICEREMOVECOMPLETE: this.richTextBox1.AppendText("U盤已解除安裝"); break; case DBT_DEVICEREMOVEPENDING: MessageBox.Show("7"); break; case DBT_DEVICETYPESPECIFIC: MessageBox.Show("8"); break; case DBT_DEVNODES_CHANGED: MessageBox.Show("9"); break; case DBT_QUERYCHANGECONFIG: MessageBox.Show("10"); break; case DBT_USERDEFINED: MessageBox.Show("11"); break; default: break; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } base.WndProc(ref m); } } }
相關推薦
C#實現檢測U盤的插拔
C# Winform中WndProc 函式作用: 主要用在攔截並處理系統訊息和自定義訊息 比如:windows程式會產生很多訊息,比如你單擊滑鼠,移動視窗都會產生訊息。這個函式就是預設的訊息處理函式。你可以過載這個函式來制定自己的訊息處理流程. 在Winform程式
C#.NET U盤插拔監控
【1】涉及的知識點 1) windows訊息處理函式 protected override void WndProc(ref Message m) 捕獲Message的系統硬體改變發出的系統訊息 2) 硬體資訊類 DriveInfo【2】核心函式 訊息常量: /// &
qt linux下自動檢測U盤熱插拔
如果用U盤來更新軟體,需要先刪除當前的可執行檔案,但是如果刪除之後,複製失敗的話會導致後續沒有檔案可以運行了。一個方法是將新的可執行檔案放到另一個目錄中,當copy成功後修改linux的啟動檔案,然後reboot. 使用qt自帶的QDBus可以實現。 D-B
C#檢測U盤是否插入
定義 con 可用 cte 發生 def wndproc box default public partial class Form1 : Form { #region u盤屬性 public const int WM_DE
linux c程式實現獲取U盤的名字(卷標/碟符)
一、U盤的卷標 在linux系統下,顯示的U盤的卷標如下圖所示: 在linux系統下,顯示的U盤的碟符如下圖所示: 獲取U盤的卷標是通過命令blkid -s LABEL來實現,執行完shell命令,在標準輸出中就顯示 /dev/sda1: LABEL=ESD-USB 其中 /de
【玩轉開源】Linux C 檢測網口熱插拔
int NetDetect(char *net_name, int *statue) { int ret = 0; int skfd = 0; struct ifreq ifr; skfd = socket(AF_INET, SOCK_DGRAM, 0); //建議s
linux c檢測網線熱插拔(netlink)
#include <sys/types.h> #include <sys/socket.h> #include <asm/types.h> #include <linux/netlink.h> #include
Opencv(C++)實現二階線性插值
i++ -- alt key ++ enc 新的 round idt #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; using namespace std;
U盤強制拔出丟失數據的恢復方法(U盤寫保護的四種解決方法)
沒有 文件 生成列 灰色 下載 而且 tool 需要 大小 ● U盤強制拔出丟失數據的恢復方法 U盤從出現以來,小巧便攜容量大深受人們的喜愛,不用像雲盤一樣需要下載,所以重要的文件我們都喜歡用U盤來傳遞數據,但是很多人使用U盤拔出時都沒有使用“彈出U盤”功能,取出過程中電腦
C# Winform下一個熱插拔的MIS/MRP/ERP框架(多語言方案)
文件加載 全局 查詢 分享 技術 變量 支持 對象 style 個別時候,我們需要一種多語種切換方案。 我的想方案是這樣的: 1、使用文本文本存儲多語言元素,應用程序啟動時加載到內存表中; 2、應用程序啟動時從配置文件加載語種定義; 3、所有窗體繼承自一個Base
C# Winform下一個熱插拔的MIS/MRP/ERP框架11(啟航)
aer tab chan byname 可能 清理 contex cati break 初學時,有了想法卻完全不知道該從何下指,此序列將拋磚引玉,與大家共同學習進步。 一個程序的初始,必然是啟動。 我的要求: 1、應用程序保持單例; 2、從配置文件加載一
C# Winform下一個熱插拔的MIS/MRP/ERP框架15(窗體基類場景1)
分享 需求 權限 檢測 表名 check 系統 ref 代碼 最基礎的窗體基類其實是通過應用場景反推的結構。 以下是場景一: 單表應用,普通的數據,比如單位/顏色/特殊字典等使用者少的,無需過多控制的可以使用一個數據表格來管理。 和Excel表格差不多,批量修改,統
Ubuntu18.04使用f3probe檢測U盤實際容量
專案主頁 https://fight-flash-fraud.readthedocs.io/ 使用f3probe 能快速檢測出被測U盤的實際容量, 命令 $ sudo f3probe --destructive --time-ops /dev/sdc F3 probe 7.0 Copyri
C# Winform下一個熱插拔的MIS/MRP/ERP框架16(窗體基類場景2)
基礎資料 簡單 bubuko 圖片 主鍵 筆記 沒有 窗體 熱插拔 如果沒有特別需求,和場景1一樣只變更表名,主鍵字段,檢測字段等名稱,不需要寫其它代碼了。 * 清單列表+單筆編輯/保存,適用於大多數基礎資料管理以及簡單的單據資料錄入(當然,排版是要改一改的): *
C# Winform下一個熱插拔的MIS/MRP/ERP框架14(自動更新)
對於軟體來說,啟用自動更新是非常必要的。 根據軟體的應用場景,我們可以設計不同的更新模型。 目前,IMES框架執行在.Net framework 4.0下面,使用的Win系統版本在Win7,域內管控,平時業務調整也不是很頻繁。 所以,我的更新很粗放,就是刪除舊檔案,拷貝新檔案: 1、更新檔案放置在檔案
C# Winform下一個熱插拔的MIS/MRP/ERP框架13(窗體基類)
作為一個ERP資料處理框架,大部分的開發場景都差不多。 理想中,對於通用資料處理,我的步驟如下: 1、為窗體指定資料來源(資料表/查詢等); 2、拖入編輯控制元件,指定繫結欄位; 3、結束。 為此,我設計了幾個基類窗體,給它們分成幾個場景(如無資料/單表資料/主從表/多表關聯等),在不同的業務模型下
U盤大盜,Python檢測U盤插入、自動複製檔案並寫入新檔案!
技術要點: 學習Python中有不明白推薦加入交流群 &
C# Winform下一個熱插拔的MIS/MRP/ERP框架(簡介)
Programmer普弱哥們都喜歡玩自己的框架,我也不例外。 理想中,這個框架要易於理解、易於擴充套件、易於維護;最重要的,易於CODING。 系統是1主體框架+N模組的多個EXE/DLL組成的,在主體框架開啟的時候,編譯完模組EXE可以馬上響應需求,不用退系統,不用重登入。 大概的目標:來一
C# Winform下一個熱插拔的MIS/MRP/ERP框架(通用控制元件)
一直對商業控制元件不感冒, 結合日常工作, 我寫了幾個常用控制元件. 一、下拉框控制元件(仿Access下拉框:F4下拉,自動輸入,支援單/多列顯示),可在Datagridview中使用。 1、常規: 2、Datagridview: 二、帶按鈕的文字框(可在Datagridview中使用): 1、常
C# Winform下一個熱插拔的MIS/MRP/ERP框架12(資料處理基類)
/// <summary> /// 資料庫連線基類 /// </summary> public class DBContext { /// <summary> /// 預設的加密方法Key,用於使用者