• 插入U盘提示程序


    C++创建窗口模板
      1 #include <Windows.h>
      2 #include <stdlib.h> 
      3 #include <Dbt.h>
      4 
      5 // 窗口处理函数
      6 LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, WPARAM lParam);
      7 
      8 // 从逻辑单元掩码值获取盘符名称
      9 char FirstDriveFromMask(ULONG unitMask);
     10 TCHAR g_szRootPath[MAX_PATH];
     11 // 
     12 int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPreInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
     13 {
     14     // 设计窗口类
     15     TCHAR szAppClassName[] = TEXT("U");  // 设置窗口类名
     16     TCHAR lpWindowName[] = TEXT("新增设备检测器");  // 设置窗口标题
     17     WNDCLASS wc = { 0 };
     18     wc.cbClsExtra = 0;            // 窗口类的扩展空间大小
     19     wc.cbWndExtra = 0;            // 窗口类的额外空间大小
     20     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);  // 加载白色背景
     21     wc.hCursor = LoadCursor(NULL, IDC_ARROW);                // 加载光标
     22     wc.hIcon = NULL;                                         // 加载图标
     23     wc.hInstance = hInstance;                                // 当前应用实例句柄
     24     wc.lpfnWndProc = (WNDPROC)WindowProc;                    // 窗口处理函数
     25     wc.lpszClassName = szAppClassName;                       // 窗口类名
     26     wc.lpszMenuName = NULL;                                  // 窗口菜单名
     27     wc.style = CS_HREDRAW | CS_VREDRAW;                      // 窗口类风格
     28     // 注册窗口类
     29     RegisterClass(&wc);
     30     // 创建窗口
     31     HWND hWnd = CreateWindowW(szAppClassName,   // 窗口类名
     32         lpWindowName,                           // 窗口标题
     33         WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX,  // dwStyle
     34         300, 200,  // 位置
     35         600, 400,  // 高宽
     36         NULL,                // 父窗口句柄
     37         NULL,                // 菜单句柄
     38         hInstance,           // 应用程序的实例句柄
     39         NULL);               // 参数
     40 
     41     // 显示窗口
     42     ShowWindow(hWnd, SW_SHOW);
     43     // 更新窗口
     44     UpdateWindow(hWnd);
     45     // 消息循环
     46     MSG msg;
     47     while (GetMessageW(&msg, NULL, 0, 0))
     48     {
     49         // 将虚拟按键转化为文字
     50         TranslateMessage(&msg);
     51         // 将消息分发给窗口
     52         DispatchMessage(&msg);
     53     }
     54     return 0;
     55 }
     56 
     57 // 窗口处理函数(窗口回调函数)
     58 LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, WPARAM lParam)
     59 {
     60     switch (uMsg)
     61     {
     62     case WM_CLOSE:    // 窗口关闭消息
     63         DestroyWindow(hWnd);
     64         break;
     65     case WM_DESTROY:  // 窗口销毁消息
     66         PostQuitMessage(0);  // 退出
     67         break;
     68     case WM_DEVICECHANGE:  // 设备改变消息
     69         switch (wParam)
     70         {
     71         case DBT_DEVICEARRIVAL:  // 设备插入计算机并且可以使用了
     72             //MessageBoxW(hWnd, TEXT("设备插入计算机并且可以使用了"), TEXT("提示"), MB_OK);
     73         {
     74             DEV_BROADCAST_HDR* lpdb = (DEV_BROADCAST_HDR*)lParam;
     75             DEV_BROADCAST_VOLUME* lpdbv = (DEV_BROADCAST_VOLUME*)lpdb;
     76             // 获取盘符名称
     77             char ch=FirstDriveFromMask(lpdbv->dbcv_unitmask);
     78             wsprintf(g_szRootPath, TEXT("识别到新盘:%c:"), ch);
     79 
     80             MessageBoxW(hWnd, g_szRootPath, TEXT("提示"), MB_OK);
     81             break;
     82         }
     83         case DBT_DEVICEREMOVECOMPLETE:  // 设备移除
     84             MessageBoxW(hWnd, TEXT("设备移除"), TEXT("提示"), MB_OK);
     85             break;
     86         default:
     87             break;
     88         }
     89         break;
     90     default:
     91         break;
     92     }
     93 
     94     return DefWindowProc(hWnd, uMsg, wParam, lParam);  // 系统默认处理
     95 }
     96 
     97 // 从逻辑单元掩码值获取盘符名称
     98 char FirstDriveFromMask(ULONG unitMask)
     99 {
    100     char i;
    101     for ( i = 0; i < 32; i++)
    102     {
    103         if (unitMask & 1)
    104             break;
    105         unitMask = unitMask >> 1;
    106 
    107     }
    108     return i + 'A';
    109 }
    365个夜晚,我希望做到两天更一篇博客。加油,小白!
  • 相关阅读:
    异常处理
    添加headers头文件反爬虫
    爬百思不得姐的视频(爬多页时for的循环)
    图片爬取百思不得姐(正则的取法,下载的方法,%s的用法)
    创建一个网页
    集合幂级数总结
    题解(新)
    JOI汉堡肉
    NOIO 2020 r2 总结
    长链剖分
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/13662013.html
Copyright © 2020-2023  润新知