Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2008, 08:39   #1
Олвин
Экспериментатор
Форумчанин
 
Аватар для Олвин
 
Регистрация: 16.04.2008
Сообщений: 218
Вопрос Подать напряжение на контакты USB

Подскажите, уважаемые умные люди, можно ли подать напряжение на контакты разъёмов, USB например? И подключить туда любой потребитель? Расскажите что-нибудь, я в этом ничего не знаю!
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс
Олвин вне форума Ответить с цитированием
Старый 27.04.2008, 08:50   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Есть компонент чтобы проверить подключение к usb, а на счёт любого устройства так драйверы на него нужны, чтоб работал правильно (если это телефон или сканер например)
Код:
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.
eoln вне форума Ответить с цитированием
Старый 27.04.2008, 10:46   #3
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
можно ли подать напряжение на контакты разъёмов
В стандартном (не изменённом пользователем) состоянии компьютер, всегда подаёт питание +5 вольт на USB.

Цитата:
И подключить туда любой потребитель?
А вот на счёт любого потребителя я Вам не советую.

Я в своё время так спатил южный мост (большая микросхема внизу материнки, она ещё под радиатором бывает).
Подключал (вроде бы не много) преобразователь напряжения для акустической системы (к +12 то слабо было - не достать ), а +5 легко, так чтоб получить на выходе +-20 вольт пришлось нагрузить до 2.4 ампера, где-то через сутки комп мёртво встал-я его перезагрузил-ноль эмоций, кулеры жужжат, через 5-7 сек. хлопнул южный мост.

Если подключаете оборудование не расчитранное для подключения к компьютеру... смотрите... ка бы, ка бы...

Если (как говорит "eoln") сканнер, то пожалуйсто.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 29.04.2008, 08:33   #4
Олвин
Экспериментатор
Форумчанин
 
Аватар для Олвин
 
Регистрация: 16.04.2008
Сообщений: 218
По умолчанию

Спасибо всем! Совет учту обязательно!
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс
Олвин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контакты из OUTLOOK lexusus Софт 0 08.01.2008 16:49
Microsoft Office Outlook : удаление папок в папке контакты bufer Софт 0 05.12.2007 16:58