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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2015, 10:17   #1
Onix[Bl
 
Регистрация: 12.01.2015
Сообщений: 6
По умолчанию Определения подключенного USB устройсва.

Здравствуйте , уважаемые форумчанине.
Помоги пожалуйста с такой проблемкой , знаю что тем по данному поводу много. Но прям то что надо , не смог найти что - то . Да и переписать тоже не сообразил как . Делфи изучаю только 2 день.
Так вот , суть :
Нужен код , который определяет на подключение USB - флешку .
и запишет ее в переменную string "AdressFlash"
PHP код:
if найдено then 
ShowMessage
('USB устройство : ' Flash); Пример вывода "F:\"
else 
ShowMessage('Не найдено'); 

Заранее большое спасибо, вам!
Onix[Bl вне форума Ответить с цитированием
Старый 12.01.2015, 10:27   #2
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Вот нашел исходник у себя для Lazarus-а немного допиленный
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  Windows;

type
  { TForm1 }
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

const
  GUID_DEVINTERFACE_USB_DEVICE: TGUID = '{A5DCBF10-6530-11D2-901F-00C04FB951ED}';

var
  Form1: TForm1;

implementation

uses 
  JwaWinUser, JwaDbt;

{$R *.lfm}

type
  TMWndProc = Windows.WNDPROC;

var
   OldWndProc : TMWndProc;

function MyWndProc(my_wnd : HWND; Msg : UINT;
                   my_wparam : WPARAM; my_lparam : LPARAM) : LRESULT; stdcall;
var
  devType : Integer;
  Datos : PDevBroadcastHdr;
begin
  Result := 0;
  case Msg of
    WM_DEVICECHANGE:
    begin
      if (my_wparam = DBT_DEVICEARRIVAL) or (my_wparam = DBT_DEVICEREMOVECOMPLETE) then
      begin
        Datos := PDevBroadcastHdr(Pointer(my_lparam));
        devType := Datos^.dbch_devicetype;
        if devType = DBT_DEVTYP_DEVICEINTERFACE then
        begin
           if my_wparam = DBT_DEVICEARRIVAL then
              ShowMessage('USB устройство подключено')
           else
              ShowMessage('USB устройство отключено');
        end;
      end;

      // Здесь нужно, если не ошибаюсь, вернуть результат:
      // Return TRUE to grant the request
      // Return BROADCAST_QUERY_DENY to deny the request.

    end; // WM_DEVICECHANGE
  end; // case
  Result := Windows.CallWindowProc(OldWndProc, my_wnd, Msg, my_wparam, my_lparam);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  dbi: DEV_BROADCAST_DEVICEINTERFACE_W;
  Size: Integer;
  RDN: HDEVNOTIFY;
  arr : array[0 .. 0] of word;
begin
  arr[0] := 0;
  Size := SizeOf(DEV_BROADCAST_DEVICEINTERFACE_W);
  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 := arr;
  RDN := RegisterDeviceNotificationW(Form1.Handle, @dbi,
                                     DEVICE_NOTIFY_WINDOW_HANDLE);
  if not Assigned(RDN) then
  begin
    ShowMessage('Error Register Message');
  end;

  OldWndProc := TMWndProc(Windows.GetWindowLong(Self.Handle, GWL_WNDPROC));
  Windows.SetWindowLong(Self.Handle, GWL_WNDPROC, LongInt(@MyWndProc));
end;

end.
kta87 вне форума Ответить с цитированием
Старый 12.01.2015, 12:46   #3
Onix[Bl
 
Регистрация: 12.01.2015
Сообщений: 6
По умолчанию

Так это ведь определение определенного USB .
Код:
GUID_DEVINTERFACE_USB_DEVICE: TGUID = '{A5DCBF10-6530-11D2-901F-00C04FB951ED}';
Вот типо эта строка , если я правда про то думаю)
А у меня будут все время разные флешки
Onix[Bl вне форума Ответить с цитированием
Старый 12.01.2015, 14:00   #4
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Onix[Bl, и все ваши разные usb-flash будут определены! Попробовали бы хоть исходник то готовый
kta87 вне форума Ответить с цитированием
Старый 12.01.2015, 14:58   #5
Onix[Bl
 
Регистрация: 12.01.2015
Сообщений: 6
По умолчанию

Хорошо , спасибо !
А вот не могли бы еще подсказать , не могу сделать 2 проверки.
1.

Код:
if FileExists (AdressFolder + '\' + nFile[0]) 
 and (nFile[0] = '') or (AdressFolder + '\' + nFile[1]) 
 and (nFile[1] = '') or (AdressFolder + '\' + nFile[2]) 
 and (nFile[2] = '') or (AdressFolder + '\' + nFile[3]) 
 and (nFile[3] = '') 
then begin
//тут код
end else begin.....
У меня на другом языке , стоит вот так , а на Delphi что то не получается , бьет ошибку как я понял вот эту : ..
Код:
[dcc32 Error] Unit1.pas(189): E2010 Incompatible types: 'string' and 'Boolean'
И не знаю как исправить , уже только как не пробовал проверять.

2. Как проверить на файлы с расширением "doc" в определенной папке ?
Говорится о переменной AdressFolder , в ней мне надо проверить , есть ли там файлы с расширением ".doc"
Естественно так же
if есть then
else если нету

Последний раз редактировалось Stilet; 12.01.2015 в 15:06.
Onix[Bl вне форума Ответить с цитированием
Старый 12.01.2015, 15:07   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
or (AdressFolder + '\' + nFile[1])
Это что такое. Суммирование дает тебе строку, а дальше что с ней должно происходить?
Может нужно or ((AdressFolder + '\' + nFile[1]) = '')
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2015, 15:09   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
or (AdressFolder + '\' + nFile[1])
что это за условие?!

Может, Вы хотите проверять FileExists ?

Но, с другое стороны, зачем проверять FileExists (AdressFolder + '\' + nFile[0]) в том случае, если (nFile[0] = '') ?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2015, 15:32   #8
Onix[Bl
 
Регистрация: 12.01.2015
Сообщений: 6
По умолчанию

Эм , что то я совсем запутался. хД
@Serge_Bliznykov , на старом языке ,ahk, если не проверять "nFile[0] =" , там он просто сразу же бил ошибку , не важно был файл или нет.
Теперь тогда поставлю вопрос так ...
Как проверить тогда так ...
Что один из 4 файлов у меня уже есть в директории?
Полный путь одного из файлов .
Код:
(AdressFolder + '\' + nFile[0])
Массив nFile идет от 0 до 3 .
Onix[Bl вне форума Ответить с цитированием
Старый 12.01.2015, 15:40   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

как вариант:

Код:
var isFileExist : boolean;
...

  isFileExist := false;
  i := 0;
  while (i<=3) and Not isFileExist do begin
    if Trim(nFile[i])<>'' then
      if  FileExists(AdressFolder + '\' + nFile[i])  then begin
            isFileExist := true; 
            Break;
      end;
    inc(i);  
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2015, 16:20   #10
Onix[Bl
 
Регистрация: 12.01.2015
Сообщений: 6
По умолчанию

О , суперски! Спасибо.
Только как ему не давать ниже по коду идти? Если вот он нашел что нибудь.
Или это только надо остальной код в цикл вписывать?
У меня просто циклы вообще туго идут , и в коде это будет первый цикл только)

Последний раз редактировалось Onix[Bl; 12.01.2015 в 16:28.
Onix[Bl вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с настройкой телевизора подключенного к ПК. Белик Операционные системы общие вопросы 1 07.11.2011 20:49
Определение Ip адреса подключенного клиента Indy10 Lokos Работа с сетью в Delphi 1 30.05.2011 08:21
Пинг компьютера подключенного через маршрутизатор Shouldercannon Работа с сетью в Delphi 3 26.05.2011 17:09
Вызов функции из не подключенного файла Byurrer Общие вопросы C/C++ 4 06.04.2011 20:51
Как считать данные с устройства, подключенного к СОМ(или ЮСБ)-порту voron29 Общие вопросы Delphi 5 21.06.2008 15:08