⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 howtodiscoveryusb.txt

📁 U盘插入,EXE自动运行
💻 TXT
字号:
怎么编程实现U盘插入,EXE自动运行-前沿技术-新技术  首页 宝兰专区 新技术 基础篇 Delphi Kylix Java MS.NET 程序员 其它语言 

首页 >> 新技术 >> 前沿技术 >> 正文 
最新文章:
  TServices 的使用问题, ... 
  xp下STAR3200+打印走纸问题 
  CHM制作大揭秘 
  虚心请教:如何判断像头头监控图像发生变化 
  程序传送JPEG时小概率出现JPE... 
相关文章:
  Learning Python学习笔记 
  如何用程序实现把汉字或词语在Goo... 
  指纹技术 u.are.u4000 ... 
  爱上女朋友的朋友,我该怎么办! 
  C/S结构的Delphi程序如何调... 
  寻找粒子群优化函数的源程序 
  m369m 此人应该抓去枪毙! 
  知道blog mining的请进! 
特约赞助:
  CSDN 怎么编程实现U盘插入,EXE自动运行

我在驱动论坛看到大侠都用C++ 而且他们都说delphi难实现 不知道这里的delphi的高手能够写出来么

问题太难 所以只给4分啦 因为这样的问题估计在大富翁没有高人能够回答了

检验您水平的时候到了 不管您学10年还是学1天 能够回答的就是牛人 

所以 这4分弥足珍贵  [:D]

算了吧。那你用C++写一个?
灰色那里到现在几年过去了,想不到你还是这个样子

写一个系统监控程序,监控U盘插入,拔出状态
unit USBMonitor;

interface

uses
  Windows, Messages, SysUtils, Classes, Forms;

type
  TDeviceMonitorUSB = class(TComponent)
  private
    FWindowHandle: HWND;
    FOnUSBArrival: TNotifyEvent;
    FOnUSBRemove: TNotifyEvent;
    procedure WndProc(var Msg: TMessage);
    function USBRegister: Boolean;
  protected
    procedure WMDeviceChange(var Msg: TMessage); dynamic;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property OnUSBArrival: TNotifyEvent read FOnUSBArrival write FOnUSBArrival;
    property OnUSBRemove: TNotifyEvent read FOnUSBRemove write FOnUSBRemove;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('FMA', [TDeviceMonitorUSB]);
end;

type
  PDevBroadcastHdr  = ^DEV_BROADCAST_HDR;
  DEV_BROADCAST_HDR = packed record
    dbch_size: DWORD;
    dbch_devicetype: DWORD;
    dbch_reserved: DWORD;
  end;

  PDevBroadcastDeviceInterface  = ^DEV_BROADCAST_DEVICEINTERFACE;
  DEV_BROADCAST_DEVICEINTERFACE = record
    dbcc_size: DWORD;
    dbcc_devicetype: DWORD;
    dbcc_reserved: DWORD;
    dbcc_classguid: TGUID;
    dbcc_name: short;
  end;

const
  GUID_DEVINTERFACE_USB_DEVICE: TGUID = 
'{A5DCBF10-6530-11D2-901F-00C04FB951ED}';
  DBT_DEVICEARRIVAL          = $8000;          // system detected a new device
  DBT_DEVICEREMOVECOMPLETE   = $8004;          // device is gone
  DBT_DEVTYP_DEVICEINTERFACE = $00000005;      // device interface class

constructor TDeviceMonitorUSB.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FWindowHandle := AllocateHWnd(WndProc);
  USBRegister;
end;

destructor TDeviceMonitorUSB.Destroy;
begin
  DeallocateHWnd(FWindowHandle);
  inherited Destroy;
end;

procedure TDeviceMonitorUSB.WndProc(var Msg: TMessage);
begin
  if (Msg.Msg = WM_DEVICECHANGE) then begin
    try
      WMDeviceChange(Msg);
    except
      Application.HandleException(Self);
    end;
  end
  else
    Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;

procedure TDeviceMonitorUSB.WMDeviceChange(var Msg: TMessage);
var
  devType: Integer;
  Datos: PDevBroadcastHdr;
begin
  if (Msg.wParam = DBT_DEVICEARRIVAL) or (Msg.wParam = DBT_DEVICEREMOVECOMPLETE) 
then begin
    Datos := PDevBroadcastHdr(Msg.lParam);
    devType := Datos^.dbch_devicetype;
    if devType = DBT_DEVTYP_DEVICEINTERFACE then begin // USB Device
      if Msg.wParam = DBT_DEVICEARRIVAL then begin
        if Assigned(FOnUSBArrival) then
          FOnUSBArrival(Self);
      end
      else
      if Msg.wParam = DBT_DEVICEREMOVECOMPLETE then begin
        if Assigned(FOnUSBRemove) then
          FOnUSBRemove(Self);
      end;
    end;
  end;
end;

function TDeviceMonitorUSB.USBRegister: Boolean;
var
  dbi: DEV_BROADCAST_DEVICEINTERFACE;
  Size: Integer;
begin
  Size := SizeOf(DEV_BROADCAST_DEVICEINTERFACE);
  ZeroMemory(@dbi, Size);
  dbi.dbcc_size := Size;
  dbi.dbcc_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
  dbi.dbcc_reserved := 0;
  dbi.dbcc_classguid  := GUID_DEVINTERFACE_USB_DEVICE;
  dbi.dbcc_name := 0;
  Result := Assigned(RegisterDeviceNotification(FWindowHandle, @dbi,
    DEVICE_NOTIFY_WINDOW_HANDLE));
end;

end.

谢谢ZQFILE 分太少了 真不好意思撒

接受答案了.

这个代码只是查USB插入与拔出.并不是实现自动运行的.不管是DELPHI或VC都是查USB插入和拔出再加autorun.inf进去.写不出得出来和是不是用DELPHI和VC并没有关系.如果只是写AUTORUN.inf的话,能否成功要看系统设置而定. 

© Copyright 2005-2007 Delphi技术宝典Powered by csdn. 站长统计 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -