請問如何寫USB隨身碟或外接硬碟插入時候, 對內容做些檢查的程式 |
缺席
|
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
小弟在 Delphi.KTop 搜尋瀏覽 USB 文章 也正在 Google 一些資訊 Google "delphi USB begin" Google "delphi usb控件源碼" Google "delphi usb範例" Google "delphi USB" 某些Source Code重新Compile可能失敗, 或Compile成功但不能執行 (或許該去書店找書) 小弟想常駐一個程式, 當USB隨身碟或外接硬碟插入時候, 對隨身碟或外接硬碟內容做些檢查 小弟沒寫過 driver 或任何 USB 相關程式 用 Delphi 開發有甚麼注意事項 ? Q:為何Delphi.KTop寫USB程式幾乎都用BCB, 而非Delphi Q:是否要先安裝 Windows XP DDK ? Q:Windows 2000或2003 DDK是否可以安裝在XP電腦上安裝? Q:可以用 Delphi 7 Enterprise嗎? 還是建議用 Delphi 2007來開發? Q:Delphi開發環境是否要先做甚麼設定? uses 甚麼東西? Q:有人願意提供些可正常Compile和Run的範例程式嗎? THX
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
相關資訊
IOCTL_USB_GET_NODE_INFORMATION DBT_DEVICEARRIVAL 及 DBT_DEVICEREMOVECOMPLETE... DBT_DEVNODES_CHANGED OnDeviceChange WM_MESSAGEONDEVICE WM_DEVICECHANGE USB Code Firmware and Related Applications http://www.lvr.com/usbcode.htm 外圍器件接口資料USB http://www.akae.cn/ftp/ftpdown/akaftp/ÕûÀíǰµÄFTP×ÊÁÏĿ¼/ÍâΧÆ÷¼þ½ӿÚ×ÊÁÏ/usb/ USB I/O Programming Manual.pdf (VB, C) http://www.delcom-eng.com/downloads/USBPRGMNL.pdf 驅動程式開發網 http://www.driverdevelop.com/first.html 我想做一個監控軟件,能夠監控USB上的設備的插拔情況(C) http://soft.etcell.com/topicView.aspx?Id=5707 請問如何用VC寫一個監控USB接口是否插入MP3 ? http://topic.csdn.net/t/20050614/13/4081250.html
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
小範例分享
[code cpp] { 用 Registry 偵測 USB 儲存裝置數量 Delphi 7 Enterprise 參考 : http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=58642 } unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses Registry; procedure TForm1.Timer1Timer(Sender: TObject); var Registry: TRegistry; //用於註冊表的訪問 USBCount: Integer; begin Registry :=TRegistry.Create; with Registry do begin RootKey:=HKEY_Local_Machine; If OpenKey('SYSTEM\CurrentControlSet\Services\USBSTOR\Enum',true) then begin //how many USB strorages we get USBCount:= Registry.ReadInteger('Count'); //how many device we have now Edit1.Text:='USB設備目前有 ' IntToStr(USBCount) ' 個'; end; end; end; end. [/code]
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
再一種做法
[code cpp] { 程式說明 : 用 WM_DEVICECHANGE 和 DBT_DEVICEARRIVAL 偵測 USB 儲存裝置的插拔 開發工具 : Delphi 7 Enterprise 參考 : http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=58642 http://forums.adelavida.com/?Idx=delphi&Status=9865306168 http://www.amxku.net/?action=show&id=801 } unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } OldWindowProc: TWndMethod; procedure FormWndProc(var Message: TMessage); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses ShellApi; const DBT_DEVICEARRIVAL = $8000; // system detected a new device DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone procedure TForm1.FormCreate(Sender: TObject); begin OldWindowProc:= WindowProc; WindowProc := FormWndProc; end; procedure TForm1.FormWndProc(var Message: TMessage); begin OldWindowProc(Message); if (Message.Msg=WM_DEVICECHANGE) then begin if (Message.WParam=DBT_DEVICEARRIVAL) then begin Memo1.Lines.Add('新插入了一項裝置!'); end; if (Message.WParam=DBT_DEVICEREMOVECOMPLETE) then begin Memo1.Lines.Add('卸除了一項裝置!'); end; end; end; end. [/code]
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
增加功能 : 顯示出剛剛插入的 USB Flash 磁碟代號 [code cpp] { 程式說明 : 用 WM_DEVICECHANGE 和 DBT_DEVICEARRIVAL 偵測 USB 儲存裝置的插拔 並且顯示出剛剛插入的 USB Flash 磁碟代號 開發工具 : Delphi 7 Enterprise 參考 : http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=58642 http://forums.adelavida.com/?Idx=delphi&Status=9865306168 http://www.amxku.net/?action=show&id=801 } unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } OldWindowProc: TWndMethod; procedure FormWndProc(var Message: TMessage); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses ShellApi; const DBT_DEVICEARRIVAL = $8000; // system detected a new device DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone DBT_DEVTYP_VOLUME = $00000002; // logical volume DBTF_MEDIA = $0001; // media comings and goings type PDEV_BROADCAST_HDR = ^TDEV_BROADCAST_HDR; TDEV_BROADCAST_HDR = packed record dbch_size : DWORD; dbch_devicetype : DWORD; dbch_reserved : DWORD; end; PDEV_BROADCAST_VOLUME = ^TDEV_BROADCAST_VOLUME; TDEV_BROADCAST_VOLUME = packed record dbcv_size : DWORD; dbcv_devicetype : DWORD; dbcv_reserved : DWORD; dbcv_unitmask : DWORD; dbcv_flags : WORD; end; procedure TForm1.FormCreate(Sender: TObject); begin OldWindowProc:= WindowProc; WindowProc := FormWndProc; end; procedure TForm1.FormWndProc(var Message: TMessage); var lpdb : PDEV_BROADCAST_HDR; lpdbv : PDEV_BROADCAST_VOLUME; unitmask:DWORD; i: Integer; begin lpdb := PDEV_BROADCAST_HDR(Message.LParam); OldWindowProc(Message); if (Message.Msg=WM_DEVICECHANGE) then begin if (Message.WParam=DBT_DEVICEARRIVAL) then begin Memo1.Lines.Add('新插入了一項裝置!'); if lpdb.dbch_devicetype=DBT_DEVTYP_VOLUME then begin lpdbv := PDEV_BROADCAST_VOLUME(lpdb); unitmask:=lpdbv.dbcv_unitmask;//取得 USB 隨身碟的磁碟代號 for i:=0 to 25 do //遍?磁? begin if Boolean(unitmask and $1)then break; unitmask := unitmask shr 1; end; Memo1.Lines.Add('USB 隨身碟的磁碟代號 : ' Char(Ord('A') i) ); end; end; if (Message.WParam=DBT_DEVICEREMOVECOMPLETE) then begin Memo1.Lines.Add('卸除了一項裝置!'); end; end; end; end. [/code]
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |