本來忘了這個事,最近發現金山衛士有個這樣的助手可以安全彈出,還可以恢復,又讓我想起這個功能.
用c++builder怎么實作.
uj5u.com熱心網友回復:
http://bbs.csdn.net/topics/220010199uj5u.com熱心網友回復:
比較復雜,看這個c++的例子
http://bbs.csdn.net/topics/90082287
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
用這里面7樓的方法,能執行成功,但U盤并未移除,沒有反應.
完整代碼如下:
#include <winioctl.h>
#include <string.h>
#include <ctype.h>
#include <memory.h>
void __fastcall TForm1::btn1Click(TObject *Sender)
{
HANDLE hDevice; // handle to the drive to be examined
BOOL bResult; // results flag
BOOL bRet ;
DWORD junk; // discard results
DWORD dwError;
// Open the volume
hDevice = CreateFile("\\\\.\\I:", // drive to open
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // don't copy any file's attributes
if (hDevice == INVALID_HANDLE_VALUE) // can't open the drive
{
dwError = GetLastError();
ShowMessage("Fail to create file!");
return ;
}
//Dismount the volume
bResult = DeviceIoControl(
hDevice, // handle to volume
FSCTL_DISMOUNT_VOLUME, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
NULL, // lpOutBuffer
0, // nOutBufferSize
&junk, // discard count of bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O
if (!bResult) // IOCTL failed
{
dwError = GetLastError();
ShowMessage("Fail to dismount the volume!");
}
// Close the volume handle
bRet = CloseHandle(hDevice);
if (!bRet)
{
dwError = GetLastError();
ShowMessage("Fail to close handle!");
}
else
{
ShowMessage("success!");
}
}
uj5u.com熱心網友回復:
另外說一下,我的U盤盤符也是"I",這個是沒錯的,后面的"success!"是我加上去的,執行完有提示這個.uj5u.com熱心網友回復:
手頭沒有U盤,晚上回去幫你除錯一下.uj5u.com熱心網友回復:
嗯,謝謝妖哥.
uj5u.com熱心網友回復:
再頂一下...uj5u.com熱心網友回復:
新手同求!有這樣的原始碼,就是不知道怎樣編譯,總是出錯,新手見諒uj5u.com熱心網友回復:
泄特,剛發現這帖我居然放了個鴿子,樓主還需要代碼么?請吱一聲。uj5u.com熱心網友回復:
要,謝謝妖哥.
uj5u.com熱心網友回復:
微軟提供的那個安全移除移動設備的代碼運行時的確把設備移除了,只是我的電腦上的移動盤符和桌面托盤的移動設備標識都沒有去掉,所以感覺像是代碼無效。uj5u.com熱心網友回復:
http://support.microsoft.com/kb/165721/zh-cn直接復制就能用了
uj5u.com熱心網友回復:
還是有問題,當U盤內有檔案已打開時,實際是移除失敗,但仍顯示成功,哪里能判斷出來,并給出相應的提示資訊,是被哪個應用程式占用了.
uj5u.com熱心網友回復:
我測驗是,如果U盤打開根目錄,執行后根目錄視窗自動關閉,我的電腦中U盤盤符雙擊打開已無內容,提示插入U盤。但是托盤圖示還在。uj5u.com熱心網友回復:
如果U盤中的檔案被打開,就是我上面說的情況了.
uj5u.com熱心網友回復:
能不能先遍歷所有打開的u盤中的資源并關閉它再執行移除呢uj5u.com熱心網友回復:
還是等老妖把代碼發來觀摩觀摩吧uj5u.com熱心網友回復:
嗯,金山衛士的U盤助手就是這樣,會提示被什么應用程式占用,然后有個被占用檔案的串列選擇是否關閉.
uj5u.com熱心網友回復:
那么遍歷開關閉U盤資源,執行移除,然后SHChangeNotify。是這個節奏吧。uj5u.com熱心網友回復:
最好是提示,讓用戶自己保存,關閉.
uj5u.com熱心網友回復:
這。。。。你都是都已經知道該如何做了嘛。老妖已經來了,估計在給你測驗代碼了,弄好分享一下。
uj5u.com熱心網友回復:
我只知道要什么樣的效果而已,不知道怎么實作.
uj5u.com熱心網友回復:
妖哥,妖鴿....

uj5u.com熱心網友回復:
泄特,居然敢放鴿子uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
N年前的帖子啊
uj5u.com熱心網友回復:
今年的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130825.html
標籤:基礎類
