Asking on a Win32 forum isn't going to lead anywhere if UNO is misbehaving.
What type of notification are you requesting for your WM_DEVICECHANGE?
It makes a difference how you ask. Try using the GUID method.
Here's a little code that works for me, but I don't own a UNO (yet)
so I haven't tested on it. For more info on WM_DEVICECHANGE,
look it up on MSDN, it's fairly well documented.
HTH // L.
First, global stuff.
#include <dbt.h> // Needed for DEV_BROADCAST_PORT
HDEVNOTIFY hDevNfy = 0;
Then the request, for example in WM_CREATE/WM_INITDIALOG.
DEV_BROADCAST_DEVICEINTERFACE devFilter;
#ifndef GUID_CLASS_COMPORT
DEFINE_GUID( GUID_CLASS_COMPORT,
0x86e0d1e0L, 0x8089, 0x11d0, 0x9c,0xe4,0x08,0x00,0x3e,0x30,0x1f,0x73 );
#endif
// Request notifications when COM ports are added/removed
memset( &devFilter, 0, sizeof(devFilter) );
devFilter.dbcc_size = sizeof(devFilter);
devFilter.dbcc_devicetype = DBT_DEVTYP_PORT;
devFilter.dbcc_classguid = GUID_CLASS_COMPORT;
hDevNfy = RegisterDeviceNotification(
hWnd, &devFilter, DEVICE_NOTIFY_WINDOW_HANDLE
);
Then the response, in your window proc.
case WM_DEVICECHANGE:
{
PDEV_BROADCAST_PORT pDevPort;
pDevPort = (PDEV_BROADCAST_PORT) lp;
if (!pDevPort) return TRUE; // Allow config changes
if (pDevPort->dbcp_devicetype == DBT_DEVTYP_PORT)
switch( wp )
{
case DBT_DEVICEARRIVAL: {
AddComPortItem( hComList, pDevPort->dbcp_name );
const char* const S_ComAdd = "COM port added - %s\n";
SB_SetText( hStatBar,2,strfmt( S_ComAdd, pDevPort->dbcp_name ));
DPrint( S_ComAdd, pDevPort->dbcp_name );
} return TRUE;
case DBT_DEVICEREMOVECOMPLETE: {
RemoveComPortItem( hComList, pDevPort->dbcp_name );
const char* const S_ComRem = "COM port removed - %s\n";
SB_SetText( hStatBar,2,strfmt( S_ComRem ,pDevPort->dbcp_name ));
DPrint( S_ComRem, pDevPort->dbcp_name );
} return TRUE;
}
return TRUE;
} // WM_DEVICECHANGE