نمایش نتایج 1 تا 3 از 3

نام تاپیک: ارتباط با پورت USB

  1. #1
    مهمان

    Tick ارتباط با پورت USB

    سلام
    یه کامپوننت اکتیو ایکس یا یه چیزی برای خوندن و نوشتن روی پورت یو اس بی میشناسین؟؟؟ خلاصه یه راهی برای کار با usb سراغ دارین؟؟
    خیلی عجله دارم
    مرسی :(

  2. #2
    سلام


    unit U_Usb;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Forms;

    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

    type

    TComponentUSB = 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;

    implementation

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

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

    procedure TComponentUSB.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 TComponentUSB.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
    begin
    if Assigned(FOnUSBRemove) then
    FOnUSBRemove(Self);
    end;
    end;
    end;
    end;

    function TComponentUSB.USBRegister: Boolean;
    var
    dbi: DEV_BROADCAST_DEVICEINTERFACE;
    Size: Integer;
    r: Pointer;
    begin
    Result := False;
    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;

    r := RegisterDeviceNotification(FWindowHandle, @dbi,
    DEVICE_NOTIFY_WINDOW_HANDLE
    );
    if Assigned(r) then Result := True;
    end;

    end.


    روز خوش
    :)

  3. #3
    مهمان
    دلفی جون دستت درد نکنه ممنون

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •