Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как определить,что вставлен новый носитель данных?

7
26 апреля 2008 года
@pixo $oft
3.4K / / 20.09.2006
Собственно,вопрос в заголовке:)
1.9K
27 апреля 2008 года
andriano
474 / / 10.01.2008
Прежде всего надо определиться с набором свойств, которые позволяют отличать новый накопитель от старого.
Царапины? Потертости?
562
27 апреля 2008 года
tarekon
175 / / 19.08.2003
Цитата: andriano
Прежде всего надо определиться с набором свойств, которые позволяют отличать новый накопитель от старого.
Царапины? Потертости?



:)

Возможно, через Removable Storage Manager?

7
28 апреля 2008 года
@pixo $oft
3.4K / / 20.09.2006
Что значит "старый от нового"?Имелось в виду,что появилось новое устройство(том),как это делает WinAmp при вставке флэшки
Может,и через RSM...даже не знаю
1.9K
28 апреля 2008 года
andriano
474 / / 10.01.2008
Не следует путать новое устройство с вновь подключенным устройством.
В последнем случае надо обрабатывать сообщение WM_DeviceChange.
3
28 апреля 2008 года
Green
4.8K / / 20.01.2000
Цитата: andriano
Не следует путать новое устройство с вновь подключенным устройством.


Ни в коем случае не следует, иначе не избежать всемирных катаклизмов!

Цитата: andriano

В последнем случае надо обрабатывать сообщение WM_DeviceChange.


Ну а как же быть в первом случае?

7
22 мая 2008 года
@pixo $oft
3.4K / / 20.09.2006
Спорили-спорили,а так ни к чему и не пришли
Итак,конкретизирую:в USB-разъём была вставлена флэшка.После того,как закончится процесс её установки(если драйвера на неё ещё не были установлены) или подключения(в общем случае),мне надо скопировать с неё что-то
Программы,определяющие,что вставлена новая флэшка:WinAmp,WMP
Надеюсь,теперь понятно.Если вдруг появятся какие-то вопросы,неясности–задавайте,уточняйте.Чем смогу,тем помогу:)
261
22 мая 2008 года
ahilles
1.5K / / 03.11.2005
надо обрабатывать сообщение WM_DEVICECHANGE.
примерно так всё это будет выглядеть на Delphi:
Код:
type
  PDEV_BROADCAST_HDR = ^  _DEV_BROADCAST_HDR;

  _DEV_BROADCAST_HDR = record
    dbch_size, dbch_devicetype, dbch_reserved:DWORD;
   end;

const
   DBT_DEVICEARRIVAL= $8000;
   DBT_DEVTYP_VOLUME = 2;

procedure TForm1.Proc1(var Msg: TMessage);//обработчик сообщения WM_DEVICECHANGE
begin
  if Msg.WParam=DBT_DEVICEARRIVAL then
   if PDEV_BROADCAST_HDR(Msg.LParam)^.dbch_devicetype= DBT_DEVTYP_VOLUME then
    ShowMessage('флешку воткнули!');
end;
7
28 мая 2008 года
@pixo $oft
3.4K / / 20.09.2006
Пробовал через RSM.Результаты:
0)процесс распадается на потоки,а Олька многопоточные почему-то отлаживать не умеет(или не умею я:))
1)ошибок вроде не возникает,хотя программа сама не завершается(она у меня консольная,так что приходится по Ctrl+C)
2)всё-таки она не работает:(,а в журнале событий появляется сообщение о том,что "описание для ошибки с кодом 98(или 111,как повезёт) не найдено…"
Ну и как это понять и как сделать?Может,кто пример подкинет(только чисто на API,без всяких там…)?
261
28 мая 2008 года
ahilles
1.5K / / 03.11.2005
не понимаю что в моём коде было нечистого...
вот пример на FASM
Код:
format PE GUI 4.0
entry start

include 'win32w.inc'

section '.data' data readable writeable

  _class TCHAR 'FASMWIN32',0
  _title TCHAR 'Win32 program template',0
  _error TCHAR 'Startup failed.',0
  _msg   TCHAR 'device inserted',0

  wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class

  msg MSG

   DBT_DEVICEARRIVAL equ $8000

section '.code' code readable executable

  start:

    invoke  GetModuleHandle,0
    mov [wc.hInstance],eax
    invoke  LoadIcon,0,IDI_APPLICATION
    mov [wc.hIcon],eax
    invoke  LoadCursor,0,IDC_ARROW
    mov [wc.hCursor],eax
    invoke  RegisterClass,wc
    test    eax,eax
    jz  error

    invoke  CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,[wc.hInstance],NULL
    test    eax,eax
    jz  error

  msg_loop:
    invoke  GetMessage,msg,NULL,0,0
    cmp eax,1
    jb  end_loop
    jne msg_loop
    invoke  TranslateMessage,msg
    invoke  DispatchMessage,msg
    jmp msg_loop

  error:
    invoke  MessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK

  end_loop:
    invoke  ExitProcess,[msg.wParam]

proc WindowProc hwnd,wmsg,wparam,lparam
    push    ebx esi edi
    cmp [wmsg],WM_DESTROY
    je  .wmdestroy
    cmp [wmsg], WM_DEVICECHANGE
    je  .WMDEVICECHANGE
  .defwndproc:
    invoke  DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
    jmp .finish
  .WMDEVICECHANGE:   ;;; обработка сообщения
    cmp [wparam], DBT_DEVICEARRIVAL
    jnz .finish
    mov eax, [lparam]
    add eax, 4
    cmp dword [eax], 2
    jnz .finish
    invoke  MessageBox, 0,_msg,_msg,0
    jmp .finish
  .wmdestroy:
    invoke  PostQuitMessage,0
    xor eax,eax
  .finish:
    pop edi esi ebx
    ret
endp

section '.idata' import data readable writeable

  library kernel32,'KERNEL32.DLL',\
      user32,'USER32.DLL'

  include 'api\kernel32.inc'
  include 'api\user32.inc'
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог