判斷磁碟機介面的 C code 轉delphi code 後不work |
尚未結案
|
Snooze
一般會員 發表:18 回覆:21 積分:7 註冊:2002-06-03 發送簡訊給我 |
http://www.codeproject.com/w2k/usbdisks.asp
http://www.codeproject.com/w2k/usbdisks/usbdisks_src.zip 可以下載 一磁碟代號判斷 連接介面的 C code 我變開始轉換 delphi code ... 但應該是型態有些轉不太對
所以都不work 我轉換過後的delphi code 如下 unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IOCTL; type
TSTORAGE_BUS_TYPE = (
BusTypeUnknown = $00,
BusTypeScsi ,
BusTypeAtapi ,
BusTypeAta,
BusType1394 ,
BusTypeSsa ,
BusTypeFibre ,
BusTypeUsb ,
BusTypeRAID ,
BusTypeMaxReserved = $7F);
// STORAGE_BUS_TYPE = set of TSTORAGE_BUS_TYPE; TSTORAGE_PROPERTY_ID = (StorageDeviceProperty=0,
StorageAdapterProperty,
StorageDeviceIdProperty);
// STORAGE_PROPERTY_ID = set of TSTORAGE_PROPERTY_ID; TSTORAGE_QUERY_TYPE = (PropertyStandardQuery = 0,
PropertyExistsQuery,
PropertyMaskQuery,
PropertyQueryMaxDefined);
// STORAGE_QUERY_TYPE = set of TSTORAGE_QUERY_TYPE; TSTORAGE_PROPERTY_QUERY = record
PropertyId: TSTORAGE_PROPERTY_ID;
QueryType: TSTORAGE_QUERY_TYPE;
AdditionalParameters: array of Byte;
end;
TSTORAGE_DEVICE_DESCRIPTOR = record
Version: longint; //4
Size: longint; //4
DeviceType: byte; //1
DeviceTypeModifier: byte; //1
RemovableMedia: BOOLEAN; //1
CommandQueueing: BOOLEAN; //1
VendorIdOffset: longint; //4
ProductIdOffset: longint; //4
ProductRevisionOffset: longint; //4
SerialNumberOffset: longint; //4
BusType: TSTORAGE_BUS_TYPE; //1
RawPropertiesLength: longint; //4
RawDeviceProperties: array of Byte;
end; TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
STORAGE_DEVICE_DESCRIPTOR: TSTORAGE_DEVICE_DESCRIPTOR; implementation {$R *.dfm} Function CTL_CODE(lngDeviceType:word; lngFunction:word; lngMethod:word; lngAccess:word):DWORD;
begin
lngFunction := Dword($0500);
lngMethod := 0;
lngAccess :=0; Result := (IOCTL_STORAGE_BASE shl 16) or (lngAccess shl 14) or (lngFunction shl 2) or (lngMethod);
end; function GetDisksProperty(var hDevice: THandle; var pDevDesc: TSTORAGE_DEVICE_DESCRIPTOR ): Boolean;
var
QUERY: TSTORAGE_PROPERTY_QUERY;
bResult: Boolean;
dwOutBytes: Dword;
begin
QUERY.PropertyId := StorageDeviceProperty;
QUERY.QueryType := PropertyStandardQuery;
bResult := DeviceIoControl(hDevice, // device handle
CTL_CODE(0,Dword($0500),0,0), // info of device property
@Query, sizeof(TSTORAGE_PROPERTY_QUERY), // input data buffer
@pDevDesc, pDevDesc.Size, // output data buffer
dwOutBytes, // out's length
nil);
Result := bResult;
end; procedure TForm1.Button1Click(Sender: TObject);
var
sDrv: Char;
sDrvLetter: String;
hDevice : THandle;
szBuf: PChar;
pDevDesc: TSTORAGE_DEVICE_DESCRIPTOR;
begin
for sDrv := 'A' to 'Z' do begin
sDrvLetter := sDrv ':\';
Case GetDriveType(PChar(sDrvLetter)) of
DRIVE_FIXED : begin
hDevice := CreateFile(PChar('\\.\' LowerCase(sDrv) ':'), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, 0,
OPEN_EXISTING, 0, 0);
if (hDevice <> INVALID_HANDLE_VALUE) then begin SetLength(pDevDesc.RawDeviceProperties, 512);
pDevDesc.Size := SizeOf(pDevDesc) 507; if(GetDisksProperty(hDevice, pDevDesc)) then
if pDevDesc.BusType = BusTypeUsb then
ShowMessage('test'); end;
CloseHandle(hDevice);
end;
end;
end;
end; end. GetDisksProperty function 回傳的值一直都是false
DeviceIoControl 帶入的參數有問題 發表人 - snooze 於 2004/05/31 04:25:55
------
Nice to meet u |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
Snooze
一般會員 發表:18 回覆:21 積分:7 註冊:2002-06-03 發送簡訊給我 |
引言: 參考: http://delphi.ktop.com.tw/topic.php?topic_id=39850 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39986 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40017hagar 您好 謝謝您的回覆 剛剛看了您給的三個網址 內容主要是說明當USB Plus In 即時Message 接收得知的功能 其實我的問題是再下一步,判斷得知外接介面的媒體 比如外接磁碟插入 大母哥 插入 顯示 Removeable Type 外接硬碟插入 顯示 Fixed Type 內接硬碟 外接硬碟 都為 Fixed Type 雖然都是Fixed 但可以得知 他的interface 為USB 或是IEEE1394 http://www.codeproject.com/w2k/usbdisks.asp http://www.codeproject.com/w2k/usbdisks/usbdisks_src.zip 這邊的 C Code 我用visual c 試過 真的是可以抓的道介面類型 但轉delphi code..就不work 了,一定是那邊沒注意到 看了他的Type定義有下面這幾個 BusTypeUnknown = 0x00, BusTypeScsi, BusTypeAtapi, BusTypeAta, BusType1394, BusTypeSsa, BusTypeFibre, BusTypeUsb, BusTypeRAID, BusTypeMaxReserved = 0x7F 發表人 - snooze 於 2004/06/01 10:17:27
------
Nice to meet u |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |