VC 检测U盘 C++
2010-11-05 10:55
260 查看
#include <windows.h> #include <Shlwapi.h> #include <fstream.h> #include <TlHelp32.h> #include <Dbt.h> #pragma comment(lib,"shlwapi.lib") #define TIMER 1//计时器 //function LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程 //获取盘符 TCHAR FirstDriveFromMask (ULONG unitmask); //global variable TCHAR szExePath[MAX_PATH];//the virus's path TCHAR U[2];//保存U盘的盘符 TCHAR szSysPath[MAX_PATH];//system path int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[]=TEXT ("UUUUUU"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style =0; wndclass.lpfnWndProc =WndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra =0; wndclass.hInstance =hInstance; wndclass.hIcon =0; wndclass.hCursor =0; wndclass.hbrBackground =0; wndclass.lpszMenuName =NULL; wndclass.lpszClassName =szAppName; if (!RegisterClass (&wndclass)) { MessageBox (NULL,TEXT("Program requires Windows NT!"), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindow (szAppName, NULL, WS_DISABLED, 0, 0, 0, 0, NULL, NULL, hInstance, NULL); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } LRESULT OnDeviceChange(HWND hwnd,WPARAM wParam, LPARAM lParam) { PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam; switch(wParam) { case DBT_DEVICEARRIVAL: //插入 if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) { PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; U[0]=FirstDriveFromMask(lpdbv ->dbcv_unitmask);//得到u盘盘符 MessageBox(0,U,"Notice!",MB_OK); } break; case DBT_DEVICEREMOVECOMPLETE: //设备删除 break; } return LRESULT(); } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { switch(message) { case WM_CREATE: //处理一些要下面要用到的全局变量 U[1]=':'; SetTimer(hwnd,TIMER,5000,0);//启动计时器 return 0; case WM_TIMER: //timer message SendMessage(hwnd,WM_DEVICECHANGE,0,0);//检测有没有插入设备消息 return 0; case WM_DEVICECHANGE: OnDeviceChange(hwnd,wParam,lParam); return 0; case WM_DESTROY: KillTimer(hwnd,TIMER); PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); } TCHAR FirstDriveFromMask(ULONG unitmask) { char i; for (i = 0; i < 26; ++i) { if (unitmask & 0x1)//看该驱动器的状态是否发生了变化 break; unitmask = unitmask >> 1; } return (i + 'A'); }
原理很简单,设置一个定时器,不断去检测设备是否变化。一旦有设备变化就去处理。 代码非原创,来自互联网,如果有侵权请告之。
相关文章推荐
- VC 检测U盘 C++
- VC 检测U盘 C++
- C++编译期函数/变量检测技术,仿真VC关键字__if_exists
- U盘小偷——C++实现U盘插入检测和文件扫描拷贝
- U盘小偷——C++实现U盘插入检测和文件扫描拷贝
- linux文件系统中检测U盘挂载全权讲解
- 在vim中调用vc编译并执行c++
- 浅谈C++中内存泄漏的检测
- C++中动态创建二维数组——尴尬的不支持C99的VC
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- OpenCV: Canny边缘检测算法原理及其VC实现详解(转载)
- VC6 C++控制台程序如何判断用户输入的是什么数字[必须小于128]?
- 100本c c++ vc学习资料
- C++反汇编揭秘2 – VC编译器的运行时错误检查(RTC)
- VC++目录和C/C++之间的区别。VC++ Directories和C/C++的区别
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏(转)
- Opencv检测交通中红色标识轮廓c++代码实例及运行结果
- 交通标识检测c++代码实例及运行结果
- OpenCV实践之路——人脸检测(C++/Python)
- 解决U盘安装kali系统时,在硬件检测失败时的问题