强制弹出U盘 ( 积分: 200 )

  • 主题发起人 主题发起人 piao9wu
  • 开始时间 开始时间
P

piao9wu

Unregistered / Unconfirmed
GUEST, unregistred user!
一般弹出U盘是,是点击右下角的安全删除硬件,我想可不可以通过点击我程序上的一个按钮,就做到弹出U盘.
以前的贴子,我翻到03看了,也没有找到合适的.
 
哦,只是弹出阿,用CM_Request_Device_Eject函数,这样:
function TUsbManger.EjectOneUsb(Index: integer): boolean;
var
DeviceInfoData: TSPDevInfoData;
Status, Problem: DWord;
VetoType: TPNPVetoType;
VetoName: array[0..256] of Char;
begin
result:=false;
DeviceInfoData.cbSize := SizeOf(TSPDevInfoData);
VetoType:=PNP_VetoTypeUnknown;
if (not SetupDiEnumDeviceInfo(DevInfo, index, DeviceInfoData)) then exit;
if (CM_Get_DevNode_Status(@Status, @Problem, DeviceInfoData.DevInst, 0) <> CR_SUCCESS) then exit;
VetoName[0] := #0;
case CM_Request_Device_Eject(DeviceInfoData.DevInst, VetoType, @VetoName, SizeOf(VetoName), 0) of
CR_SUCCESS:
begin
//DevInfo := SetupDiGetClassDevs(nil, nil, 0, DIGCF_PRESENT or DIGCF_ALLCLASSES);
result:=true;
end;
end;

end;
 
http://www.google.com/codesearch?hl=zh-CN&q=+CM_Request_Device_Eject+show:fjm9KjXtaqs:f2ND9GMiB44:CyIzATs3B6E&sa=N&cd=3&ct=rc&cs_p=http://jvcl.sourceforge.net/daily/JVCL3-Source-Latest.zip&cs_f=common/CfgMgr32.pas#a0
 
ns网站上有篇文章写如何eject usb device的
 
好贴好贴顶。。。。。。。。。。。。。。。。。。。。。。。顶
 
首先感谢墨剑的代码,我已实现了弹出,但是不能强制的退出

我是想实现强制的退出,不论是向U盘里写数据还是读数据。只要点我程序的按钮,就强制的弹出!
 
强制的退出? 怕是windows都做不到啊。 那是要用人力的。 你可以再做一个弹簧装置,写好驱动,“崩”的一声,就把u盘弹出来了,至于要弹到离你的计算机几米远,这个估计可以用弹簧的弹性系数来控制。
 
不知道偶理解的对不对?
 
TO 墨剑:
找不到CM_Request_Device_Eject函数,还要其它的pas吗?[?]
 
墨剑真幽默

CM_Request_Device_Eject MS是个消息,找到对应的c的定义,自己在用delphi翻译下。
 
墨兄,听你这么一讲,顿悟!

明天跟老板娘申请买弹簧!
 
更正:应该是弹簧的劲度系数
 
连系统自己都不能实现强制弹出,程序估计也不行了,windows有保护机制的,强制弹出会丢文件的!
 
后退
顶部