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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2007, 21:42   #1
Ary
 
Регистрация: 12.07.2007
Сообщений: 7
По умолчанию Отключение флеш диска

Подскажите пожалуйста, как отключить флеш диск из дельфи?
Ary вне форума Ответить с цитированием
Старый 12.07.2007, 22:57   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Через COM интерфейсы драйверов USB устройств.
Carbon вне форума Ответить с цитированием
Старый 13.07.2007, 11:54   #3
Rouse_
Пользователь
 
Аватар для Rouse_
 
Регистрация: 31.05.2007
Сообщений: 56
По умолчанию

Должно быть что-то похожее на этот код:
Код:
 
////////////////////////////////////////////////////////////////////////////////
//
//  ****************************************************************************
//  * Unit Name : USBStateChange
//  * Purpose   : Пример включения.отключения USB накопителей
//  * Author    : Александр (Rouse_) Багель
//  * Copyright : © Fangorn Wizards Lab 1998 - 2007
//  * Version   : 1.00
//  * Home Page : http://rouse.drkb.ru
//  ****************************************************************************
//
 
unit USBStateChange;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm6 = class(TForm)
    btnEnable: TButton;
    btnDisable: TButton;
    procedure btnEnableClick(Sender: TObject);
    procedure btnDisableClick(Sender: TObject);
  end;
 
var
  Form6: TForm6;
 
implementation
 
{$R *.dfm}
 
type
  PSP_CLASSINSTALL_HEADER = ^SP_CLASSINSTALL_HEADER;
  SP_CLASSINSTALL_HEADER = record
    cbSize: DWORD;
    InstallFunction: Cardinal;
  end;
  PSP_PROPCHANGE_PARAMS = ^SP_PROPCHANGE_PARAMS;

  SP_PROPCHANGE_PARAMS = record
    ClassInstallHeader: SP_CLASSINSTALL_HEADER;
    StateChange: DWORD;
    Scope: DWORD;
    HwProfile: DWORD;
  end;
  PSP_DEVINFO_DATA = ^SP_DEVINFO_DATA;

  SP_DEVINFO_DATA = record
    cbSize: DWORD;
    ClassGuid: TGUID;
    DevInst: DWORD;
    Reserved: Longint;
  end;
 
  function SetupDiGetClassDevs(const ClassGuid: PGUID; Enumerator: PChar;
    hwndParent: HWND; Flags: DWORD): DWORD; stdcall;
    external 'Setupapi.dll' name 'SetupDiGetClassDevsA';
  function SetupDiDestroyDeviceInfoList(DeviceInfoSet: DWORD): BOOL; stdcall;
    external 'Setupapi.dll';
  function SetupDiEnumDeviceInfo(DeviceInfoSet: DWORD; MemberIndex: DWORD;
    DeviceInfoData: PSP_DEVINFO_DATA): BOOL; stdcall;
    external 'Setupapi.dll';
  function SetupDiCallClassInstaller(InstallFunction: DWORD;
    DeviceInfoSet: DWORD; DeviceInfoData: PSP_DEVINFO_DATA): BOOL; stdcall;
    external 'setupapi.dll';
  function SetupDiGetDeviceRegistryProperty(DeviceInfoSet: DWORD;
    DeviceInfoData: PSP_DEVINFO_DATA; Propertys: DWORD; PropertyRegDataType: PWORD;
    PropertyBuffer: PByte; PropertyBufferSize: DWORD; RequiredSize: PWORD): BOOL; stdcall;
    external 'Setupapi.dll' name 'SetupDiGetDeviceRegistryPropertyA';
  function SetupDiSetClassInstallParams(DeviceInfoSet: DWORD;
    DeviceInfoData: PSP_DEVINFO_DATA; ClassInstallParams: PSP_CLASSINSTALL_HEADER;
    ClassInstallParamsSize: DWORD): BOOL; stdcall;
    external 'setupapi.dll' name 'SetupDiSetClassInstallParamsA';
 
const
  DICS_ENABLE = $00000001;
  DICS_DISABLE = $00000002;
  DIF_PROPERTYCHANGE = $00000012;
  DICS_FLAG_GLOBAL = $00000001;
  DIGCF_PRESENT = $00000002;
  SPDRP_COMPATIBLEIDS = $00000002;
  DISK_GUID: TGUID = '{4D36E967-E325-11CE-BFC1-08002BE10318}';
 
function ChangeDeviceState(AState: DWORD): Boolean;
var
  pcp: SP_PROPCHANGE_PARAMS;
  DevInfoData: SP_DEVINFO_DATA;
  hDevInfo1:  DWORD;
  I, DataT, Buffersize: DWORD;
  Buffer: PAnsiChar;
begin
  Result := False;
  pcp.ClassInstallHeader.cbSize := sizeof(SP_CLASSINSTALL_HEADER);
  pcp.ClassInstallHeader.InstallFunction := DIF_PROPERTYCHANGE;
  pcp.StateChange := AState;
  pcp.Scope := DICS_FLAG_GLOBAL;
  pcp.HwProfile := 0;
  hDevInfo1 := SetupDiGetClassDevs(@DISK_GUID, nil, HWND(nil), DIGCF_PRESENT);
  try
    DevInfoData.cbSize := sizeof(SP_DEVINFO_DATA);
    I := 0;
    Buffersize := 500;
    GetMem(Buffer, Buffersize);
    try
      while SetupDiEnumDeviceInfo(hDevInfo1, I, @DevInfoData) do
      begin
        SetupDiGetDeviceRegistryProperty(hDevInfo1, @DevInfoData,
          SPDRP_COMPATIBLEIDS, @DataT, PByte(Buffer), Buffersize, nil);
        if buffer = 'USBSTOR\Disk' then
        begin
          if not SetupDiSetClassInstallParams(hDevInfo1,
            @DevInfoData, PSP_CLASSINSTALL_HEADER(@pcp), SizeOf(pcp)) then Exit;
          if not SetupDiCallClassInstaller(
            DIF_PROPERTYCHANGE, hDevInfo1, @DevInfoData) then Exit;
          Result := True;
        end;
        Inc(I);
      end;
    finally
      FreeMem(Buffer);
    end;
  finally
    SetupDiDestroyDeviceInfoList(hDevInfo1);
  end;
end;
 
procedure TForm6.btnEnableClick(Sender: TObject);
begin
  if ChangeDeviceState(DICS_ENABLE) then
    ShowMessage('Устройство включено');
end;
 
procedure TForm6.btnDisableClick(Sender: TObject);
begin
  if ChangeDeviceState(DICS_DISABLE) then
    ShowMessage('Устройство отключено');
end;
 
end.
Vae Victis
(Горе побежденным (лат.))
Демки с открытым кодом:
http://rouse.drkb.ru
Rouse_ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по флеш роликам... Cerber24 Общие вопросы Delphi 6 15.07.2008 09:58
Воскрешение флеш карты типа xD Snoopy Компьютерное железо 3 14.06.2008 11:00
Вопрос таков- как загрузить *.gif или флеш анимацию puha16 Общие вопросы Delphi 3 31.05.2008 21:02
У меня свой сайт я хочу зделать онлайн игру! помогите те кто умеет делать флеш игры! Denfer Свободное общение 1 07.08.2007 14:06
отключение клавиш fuv Общие вопросы Delphi 8 20.05.2007 18:02