1. 程式人生 > >QT 監聽 USB 裝置 插入、拔出動作

QT 監聽 USB 裝置 插入、拔出動作

參考網上資料,通過QT 實現

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QtGui/QWidget>

#include <windows.h>
#include <QString>
 
class Widget : public QWidget
{
	Q_OBJECT
 
public:
	Widget(QWidget *parent = 0);
	~Widget();
 
protected:
	bool winEvent(MSG *msg, long *result);
 
private:
	//UsbConfig usbConfig;
	char FirstDriveFromMask (ULONG unitmask);
};
 
#endif // WIDGET_H


#include "qt_Watch/qwidget.h"
#include <QDebug>

#include <Windows.h>
#include <dbt.h>

Widget::Widget(QWidget *parent)
	: QWidget(parent)
{
	setWindowFlags(Qt::Window);    //視窗以Window為父視窗
}

Widget::~Widget()
{
}

bool Widget::winEvent(MSG *msg,long *result)
{
	int msgType = msg->message;
	if(msgType == WM_DEVICECHANGE)
	{
		qDebug() << "收到事件 " ;
		PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)msg->lParam;
		switch(msg->wParam)
		{
		case DBT_DEVICETYPESPECIFIC:
			{
				qDebug() << "DBT_DEVICETYPESPECIFIC " ;
				break;
			}
		case DBT_DEVICEARRIVAL:
			if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
			{
				PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
				if (lpdbv -> dbcv_flags == 0)
				{
					// 插入U盤,此處可以做你想做的事
					QString USBDisk = QString(this->FirstDriveFromMask(lpdbv ->dbcv_unitmask));
					qDebug() << "USB_Arrived and The USBDisk is: "<<USBDisk ;
				}
			}
			qDebug() << "DBT_DEVICEARRIVAL" ;
			break;
		case DBT_DEVICEREMOVECOMPLETE:
			if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
			{
				PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
				if (lpdbv -> dbcv_flags == 0)
				{
					qDebug() << "USB_裝置移除";
				}
			}
			qDebug() << "DBT_DEVICEREMOVECOMPLETE" ;
			break;
		}
	}
	return false;
}

char Widget::FirstDriveFromMask (ULONG unitmask)
{
	char i;

	for (i = 0; i < 26; ++i)
	{
		if (unitmask & 0x1)
			break;
		unitmask = unitmask >> 1;
	}
	return (i + 'A');
}

#include <QApplication>
#include "qt_Watch/qwidget.h"

int main(int argc,char ** argv)
{
	QApplication app(argc,argv);

	Widget widget;
	widget.show();

	return app.exec();
}


相關推薦

QT USB 裝置 插入動作

參考網上資料,通過QT 實現#ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> #include <window

耳機的插入問題

在接入容聯雲的視訊通訊預設第一次接入視訊的時候,是需要開啟擴音的,所以需要監聽耳機的插入和拔出問題。 程式碼如下: 第一步:清單檔案的配置 <receiver android:name=".rlyun.service.HeadsetPlugReceiver">

QT程式設計--USB裝置插入

第一步過載函式winEvent(),5.6.0版本是nativeEvent(),如下: bool Dialog_XXX::nativeEvent(const QByteArray &eventType, void *message, long *result) {

PyQt4實現USB裝置插入到彈的檢測(Windows)

直沒怎麼看過 QextSerialPort 中windows下列舉串列埠的具體實現(原因?對win32api不瞭解,看不懂啊_) 經過一段時間的學習,對QextSerialPort總算理清了一些,於是,就可以用python實現列舉串列埠了,也可以檢測串列埠的載入與移除了。

檢測USB裝置插入

1.需求 需要一個DLL,它可以自動檢測USB裝置插入和拔出,並以回撥函式的方法告訴呼叫DLL的應用程式。   2.預研 2.1參考文件 (1)關於“Registering for DeviceNotification”(官方文件) 地址:https://msdn.micr

瀏覽器返回鍵後退上一頁事件(popstate)操作返回鍵

som cnblogs back eba spa 查詢 sta ces 關閉   在WebApp或瀏覽器中,會有點擊返回、後退、上一頁等按鈕實現自己的關閉頁面、調整到指定頁面、確認離開頁面或執行一些其它操作的需求。可以使用 popstate 事件進行監聽返回、後退、上一頁操

配置Tomcat80端口配置Tomcat虛擬主機Tomcat日誌

tomcat服務配置Tomcat監聽80端口1、[root@centos7 package]# vim /usr/local/tomcat/conf/server.xml <Connector port="80" protocol="HTTP/1.1" connection

配置Tomcat80端口虛擬主機日誌

說明 訪問日誌 reat release webapp eat all ets pre 16.4 配置Tomcat監聽80端口 修改配置文件 [root@taoyun src]# vim /usr/local/tomcat/conf/server.xml #可以修改成

Tomcat80端口配置Tomcat虛擬主機Tomcat日誌

inpu 數據庫 網站 connector example handle length 創建 ssl 配置Tomcat監聽80端口 1.配置Tomcat服務的訪問端口 Tomcat默認啟動的端口是8080,如果你想修改為80,則需要修改server.xml文件。 [ro

配置tomcat80端口配置tomcat虛擬機tomcat日誌

classname nginx代理 data restart cal 停止 環境 生產環境 netstat 配置tomcat監聽80端口 tomcat 監聽的是8080端口,如果想要直接訪問,不加8080端口(默認輸入一個IP或者域名,訪問80端口時是可以省略IP後端口號

配置Tomcat80端口 配置Tomcat虛擬主機 Tomcat日誌

瀏覽器 目錄的作用 虛擬主機 bin protoc 相同 其中 日誌文件 true 配置Tomcat監聽80端口 Tomcat監聽的是8080端口,也可以自定義為80

Tomcat設置端口80配置虛擬主機安裝zrlog博客日誌文件

Tomcat tomcat日誌 tomcat監聽端口 tomcat虛擬主機 zrlog博客安裝 設置Tomcat監聽端口為80 默認Tomcat監聽端口為8080端口,如果是在lnmp環境下,我們必須停用作用80端口的nginx; /etc/init.d/nginx stop

配置Tomcat80端口配置Tomcat的虛擬主機Tomcat的日誌

Linux學習筆記配置Tomcat監聽80端口 配置Tomcat的虛擬主機 Tomcat的日誌 配置Tomcat監聽80端口、配置Tomcat的虛擬主機、Tomcat的日誌

配置Tomcat80端口配置Tomcat的虛擬主機日誌配置

項目文件 windows文件 TE ger java dir window 虛擬 記錄 配置Tomcat監聽80端口 編輯配置文件vim /usr/local/tomcat/bin/startup.sh 搜索關鍵字:Connector port ,將8080修改為80 更改

使用Vue,實現事件物件的“”(addEventListener)“銷燬”(removeEventListener)。

場景 我在寫一個“滑動驗證碼”的外掛。 需要給滑塊繫結事件,監聽已滑動的距離。 驗證成功後,銷燬繫結事件。 實現程式碼 1、在data裡定義 data() { return { events: { handleE

python應用系列教程——python使用scapy網路資料包按TCP/IP協議進行解析

全棧工程師開發手冊 (作者:欒鵬) python使用scapy監聽抓取網路資料包。 scapy具有模擬傳送資料包、監聽解析資料包、網際網路協議解析、資料探勘等多種用處。這裡我們只來說一下scapy監聽資料包,並按照不同的協議進行解析。

輸入框事件(一):keydownkeyupinput

當輸入框的值發生變化時,我們可以通過keydown、keyup、input、onchange、blur事件觀察到其值的變化,但它們的應用時機與應用場景存在顯著的差異。 1. 實時觀察 需要觀察到使用者每次鍵盤輸入的變化,必須要用keydown、keyup

VCMFC根據USB裝置PIDVID自動查詢串列埠號

在VC/MFC環境下有兩種方法來根據PID、VID獲取對應的串列埠號,這樣操作的目的是避免客戶手動設定下拉框的資訊,讓軟體自動識別!當然,前提是有自己的USB PID、VID 下面是C++程式碼示例: // 第一種方法需要包含此標頭檔案 #include <Setu

mysql 觸發器 這個表插入時增加資料 在某欄位變動時進行觸發

專案觸發器 在mysql 表中增加  需求 當這個表 新增記錄的時候觸發 DROP TRIGGER IF EXISTS t_make_data; //刪除原先的觸發器 CREATE TRIGGER t

Android插入USB裝置,自動彈提示執行apk

USB HOST模式開發下可能會遇到這個問題。 第一步是在AndroidManifest.xml檔案中修改,主意下面紅色字型 <manifest ...><uses-featureandroid:name="android.hardware.usb.ho