Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Обслуживание съемных носителей.


Автор: бройлер 26.11.2006, 21:48
   Нужно написать программу, которая распозновала бы флэшку и CD. Определяла бы тип носителя, размер места на нем ну т.д. Я написал вот такую штуку, но уменя больше ума не хватает ее закончить. Она работает, но только выдает информацию при вставке флэшки или носителя, и выемки их. Остальное ничего не работает. Я не могу ее дописать. Хотелось бы еще чтобы она выполняла копирование файлов куда нибудь с носителя. Заранее спасибо.

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
switch(Message.Msg)
  {
  case WM_DEVICECHANGE:
    switch(Message.WParam)
      {
       case DBT_DEVICEARRIVAL:
        {
        ShowMessage("DEVICEARRIVAL!");
        DEV_BROADCAST_HDR* p = (DEV_BROADCAST_HDR*)Message.LParam;
        p->dbch_devicetype;
      break;
        }
       case DBT_DEVICEQUERYREMOVE:
        {
        ShowMessage("DEVICEQUERYREMOVE!");
        DEV_BROADCAST_HDR* q = (DEV_BROADCAST_HDR*)Message.LParam;
        q->dbch_reserved;
      break;
        }
       case DBT_CONFIGCHANGED:
        {
        ShowMessage("CONFIGCHANGED!");
      break;
        }
       case DBT_DEVICEREMOVECOMPLETE:
        {
        ShowMessage("DEVICEREMOVECOMPLETE!");
        DEV_BROADCAST_HDR* s = (DEV_BROADCAST_HDR*)Message.LParam;
        s->dbch_size;
      break;
        }
         Close();
    }
  }
TForm::WndProc(Message);
}

void __fastcall TForm1::DeviceMsgHeaderDecode(Messages::TMessage &Message)
 {
 DEV_BROADCAST_HDR* p = (DEV_BROADCAST_HDR*)Message.LParam;
    switch(p->dbch_devicetype)
    {
        case DBT_DEVTYP_DEVICEINTERFACE:
            ShowMessage("DEV_BROADCAST_DEVICEINTERFACE structure"
                              );
            break;
        case DBT_DEVTYP_HANDLE:
            ShowMessage("The DEV_BROADCAST_HANDLE structure"
                             );
            break;
        case DBT_DEVTYP_OEM:
            ShowMessage("The DEV_BROADCAST_OEM structure"
                             );
            break;
        case DBT_DEVTYP_PORT:
            ShowMessage("The DEV_BROADCAST_PORT structure"
                              );
            break;
        case DBT_DEVTYP_VOLUME:
            ShowMessage("The DEV_BROADCAST_VOLUME structure"
                             );
            DEV_BROADCAST_VOLUME* q=(DEV_BROADCAST_VOLUME*)Message.LParam;
            break;
    }
}

Автор: Partizan 30.11.2006, 14:50
если вся инфа по девайсу получена, то наверняка известна и литера которая новому носителю в системе присвоена...

копирование можно сделать точно также как и на локальном диске....между локальными дисками...

Автор: бройлер 30.11.2006, 20:49
Если не сложно могли бы прописать, как это можно сделать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)