Exemplo n.º 1
0
LRESULT CALLBACK WndProcIn(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
	PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
	PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
	char driveName;
	CString diskpath = "";
	if(uMsg == WM_DEVICECHANGE){
		if(wParam == DBT_DEVICEARRIVAL){
			driveName = FirstDriveFromMask(lpdbv->dbcv_unitmask);
			diskpath.Format("%c:\\",driveName);
			Son->USBIn(diskpath);
		}
	}
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
Exemplo n.º 2
0
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{	
	switch(msg)
	{
	case WM_DEVICECHANGE:
	{
		PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR) lParam;
		switch(wParam)
		{
		case DBT_DEVICEARRIVAL:
			if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
			{
				PDEV_BROADCAST_VOLUME lpdv = (PDEV_BROADCAST_VOLUME) lpdb;
				TCHAR z = FirstDriveFromMask(lpdv->dbcv_unitmask);
				if (DriveType(z) == DT_REMOVABLE)
					PendriveArrive(z);
			}
		}
	}
	}
	return DefWindowProc(hWnd,msg,wParam,lParam);
}
/*************************************
* void OnDeviceChange (HWND , WPARAM , LPARAM )
* 功能	处理 WM_DEVICECHANGE 消息
*		参数为窗口消息
**************************************/
void OnDeviceChange (HWND hwnd, WPARAM wParam, LPARAM lParam)
{
	// 获取 PDEV_BROADCAST_HDR 参数
	PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
	char szMsg[256];

	HDC hdc = GetDC(hwnd);
	DWORD dwStrLen;
	SIZE sz;
	TEXTMETRIC tm;

	switch(wParam)
	{
	case DBT_DEVICEARRIVAL:
		// 插入 CD 或者 DVD 到光驱中
		if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
		{
			// 获取参数
			PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
			// 判断标志
			if (lpdbv -> dbcv_flags & DBTF_MEDIA)
			{
				wsprintf (szMsg, "Drive %c: Media has arrived.",
					// 根据mask获取盘符,
					// dbcv_unitmask的bit依次表示A:,B:...,如果为1,表示是该盘符,
					FirstDriveFromMask(lpdbv ->dbcv_unitmask));
			}
			else
				// 标志不配置,打印事件ID
				wsprintf (szMsg, "Message: %u.", wParam);
		}
		else
			// 设置类型不配置,打印事件ID
			wsprintf (szMsg, "Message: %u.", wParam);
		break;

	case DBT_DEVICEREMOVECOMPLETE:
		// 光驱弹出
		if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
		{
			// 获取参数
			PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
			// 检查标志
			if (lpdbv -> dbcv_flags & DBTF_MEDIA)
			{
				wsprintf (szMsg, "Drive %c: Media was removed.",
					FirstDriveFromMask(lpdbv ->dbcv_unitmask));
			}
			else
				wsprintf (szMsg, "Message: %u.", wParam);
		}
		else
			wsprintf (szMsg, "Message: %u.", wParam);
		break;

	default:
		// 其他设备改变情况,打印设备ID
		wsprintf (szMsg, "Message: %u.", wParam);

	}
	// 在界面上输出设备变更消息
	dwStrLen = lstrlen(szMsg);
	// 计算输出位置
	GetTextExtentPoint32(hdc, szMsg, dwStrLen, &sz);
	YStart += sz.cy;
	GetTextMetrics(hdc, &tm);
	YStart -= tm.tmOverhang;
	// TODO 窗口滚动
	TextOut(hdc, 10, YStart, szMsg, dwStrLen);
	DeleteDC( hdc );	// 释放DC
}