[Qt-interest] Detection of new drives

Scott Aron Bloom Scott.Bloom at sabgroup.com
Tue Mar 17 17:34:11 CET 2009


The reason for the multiple device change events is due to the difference between the media and the partions.

 

You get one event for the physical media being inserted, and then you receive one for each partition on the drive.  Many thumbdrives have hidden partitions from the manufacture.  If you usb drive, you will probably only receive 1.

 

Scott

 

From: qt-interest-bounces at trolltech.com [mailto:qt-interest-bounces at trolltech.com] On Behalf Of Tiago Correia
Sent: Tuesday, March 17, 2009 7:23 AM
To: qt-interest
Subject: Re: [Qt-interest] Detection of new drives

 

I've made a small experiment and I extended QApplication (it could be QCoreApplication) and implemented just 2 methods. I just made it possible to check when a USB or storage device is plug in the computer. The only problem I found now, but didn't bother to solve is that it message is received 3 times

 

This solution only works on windows. To go further just read the MSDN documentation.

 

#include "displayapp.h"

#include <QMessageBox>

#include <windows.h>

#include <dbt.h>

 

DisplayApp::DisplayApp( int & argc, char ** argv )

    : QApplication( argc, argv )

{

}

 

DisplayApp::~DisplayApp()

{

}

 

bool DisplayApp::winEventFilter ( MSG * msg, long * result )

{

    if( msg != NULL )

    {

         if( msg->message == WM_DEVICECHANGE && msg->wParam == DBT_DEVICEARRIVAL )

         {

              PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)msg->lParam;

              if( pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME )

              {

                   PDEV_BROADCAST_VOLUME pDevVolume = (PDEV_BROADCAST_VOLUME)pHdr;

                   QChar c = DriveFromMask(pDevVolume->dbcv_unitmask);

                   QMessageBox::information( 0, "USB plugged", "Drive " + QString(c) );

                   return true;

              }

         }

    }

    return false;

}

 

QChar DisplayApp::DriveFromMask( DWORD unitmask )

{

    int i;

 

    for( i = 0; i < 26; ++i )

    {

         if( unitmask & 0x1 )

         {

              break;

         }

         unitmask = unitmask >> 1;

    }

 

    return QChar(i + 'A');

}

 

2009/3/17 Adam Gibson <lethalmonk at gmail.com>

This may be of use for Linux/Mac:

http://labs.trolltech.com/blogs/2009/03/09/crouching-leopard-solid-dragon/

2009/3/17 Tiago Correia <tiago at cnotinfor.pt>

	 

	Hi,

	 

	If you are in Windows that might be easy.

	 

	Check this article

	http://www.codeproject.com/KB/system/HwDetect.aspx

	 

	Now how to read system messages in windows. From what I found in the Assistant, you should use QAbstractEventDispatcher::instance <http://qabstracteventdispatcher.html#instance> ()

	I've also found that winEventFilter might me also useful.

	 

	Can any one help on this matter how to get system messages in Windows? I just guessing, since I never tried.

	2009/3/16 Benjamin Sonnemann <b.sonnemann at gmail.com>

	Hello,
	
	i wanted to ask if someone know whether there is already
	a class which notifys you of changes in the attached devices.
	Like attaching an usb stick. 
	
	
	Benjamin Sonnemann

	_______________________________________________
	Qt-interest mailing list
	Qt-interest at trolltech.com
	http://lists.trolltech.com/mailman/listinfo/qt-interest

	
	
	
	-- 
	Tiago Correia
	chief technology officer
	
	cnoti inovação & desenvolvimento – Aprendizagem enRiquecida pela Tecnologia
	www.cnotinfor.pt
	Telefone: +351 239 499 231
	
	Subscreva gratuitamente a nossa Newsletter BICA – Boletim informativo de Interactividade, Comunicação e Aprendizagem

	
	_______________________________________________
	Qt-interest mailing list
	Qt-interest at trolltech.com
	http://lists.trolltech.com/mailman/listinfo/qt-interest



_______________________________________________
Qt-interest mailing list
Qt-interest at trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-interest




-- 
Tiago Correia
chief technology officer

cnoti inovação & desenvolvimento – Aprendizagem enRiquecida pela Tecnologia
www.cnotinfor.pt
Telefone: +351 239 499 231

Subscreva gratuitamente a nossa Newsletter BICA – Boletim informativo de Interactividade, Comunicação e Aprendizagem

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20090317/bfc67998/attachment.html 


More information about the Qt-interest-old mailing list