purebasic.info

PureBasic forum
Текущее время: Пн июл 22, 2019 7:48 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: Вт май 01, 2012 11:40 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Вс янв 10, 2010 1:10 pm
Сообщений: 126
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Есть следующий код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Declare GetDeviceEvent(WindowID, Message, wParam, lParam)
 
SetWindowCallback(@GetDeviceEvent())
If OpenWindow(0,0,0,0,0,"",#PB_Window_Invisible)
  Repeat
    WaitWindowEvent(100)
  Until #False
EndIf
 
; Callback
Procedure GetDeviceEvent(WindowID, Message, wParam, lParam)
  If Message=$219 And wParam=$8000
    Debug "Flash drive insert!"
  EndIf
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 



Нужно не только определить момент вставки флешки, но и определить имя присвоенного ей диска. Нашел пример нужного кода, но так как с делфями у меня не очень, то портировать его на пурик не получается.

Буду рад помощи.

http://www.vr-online.ru/?q=content/flje ... hast-1-312

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 5:59 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6525
Благодарил (а): 28 раз.
Поблагодарили: 220 раз.
Пункты репутации: 57
Explode писал(а):
Буду рад помощи.

Поиском на Делфях нашел, а у нас тему те нашел?
Ну тогда лови:
http://pbasic.spb.ru/phpBB2/viewtopic.p ... =removable

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 9:33 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Вс янв 10, 2010 1:10 pm
Сообщений: 126
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Видел эту тему. Там при событии #WM_DEVICECHANGE идет тупо перебор всех дисков в системе, а мне нужно выводить букву диска из параметра lParam процедуры-каллбека.

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 10:21 am 
Не в сети
док

Зарегистрирован: Сб фев 18, 2012 3:55 am
Сообщений: 107
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
http://www.purebasic.fr/english/viewtopic.php?p=88596
тему не читал лень=s
но там упоминается DEV_BROADCAST
как в твоей найденной статейке


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 12:42 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6525
Благодарил (а): 28 раз.
Поблагодарили: 220 раз.
Пункты репутации: 57
Explode писал(а):
Там при событии #WM_DEVICECHANGE идет тупо перебор всех дисков в системе, а мне нужно выводить букву диска из параметра lParam процедуры-каллбека.

Не смеши :D
Код на делфи делает тот же "тупой перебор":
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function TForm2.DriveMaskToString(mask: dword): string;
var
  DriveLetter: char;
  Drives:string;
  i:integer;
  pom:integer;
begin
  Drives := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 
  i := 0;
  pom := Trunc(mask / 2);
 
  while (pom <> 0) do
  begin
    pom := Trunc(pom / 2);
    i := i+1;
  end;
 
 
  if (i < Length(Drives)) then
    DriveLetter := Drives[i+1]
  else
    DriveLetter := '?';
 
  result := DriveLetter + ':\';
end;


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 1:02 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Explode писал(а):
так как с делфями у меня не очень, то портировать его на пурик не получается.

Пробуй
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Procedure.s DriveMaskToString(mask.l)
  DriveLetter.s
  Drives.s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  i.l = 0
  pom.l = Int(mask / 2)
  While pom <> 0
    pom = Int(pom / 2)
    i + 1
  Wend
  If i < Len(Drives)
    DriveLetter = Mid(Drives, i+1, 1)
  Else
    DriveLetter = "?"
  EndIf
  ProcedureReturn DriveLetter
EndProcedure  
 
Procedure GetDeviceEvent(hWnd,Message,wParam,lParam)
    *DBH.DEV_BROADCAST_HDR
    *DBV.DEV_BROADCAST_VOLUME
 If wParam = #DBT_DEVICEREMOVECOMPLETE
    *DBH = lParam
    If *DBH\dbch_devicetype = #DBT_DEVTYP_VOLUME
        MessageRequester("Работа с флехой","Флэшка извлечена",#PB_MessageRequester_Ok)
    EndIf
 ElseIf wParam = #DBT_DEVICEARRIVAL
    *DBH = lParam
    If *DBH\dbch_devicetype = #DBT_DEVTYP_VOLUME
        *DBV = lParam
        DriveLetter$ = DriveMaskToString(*DBV\dbcv_unitmask)
        txt$ = "Обнаружена новая флэшка" + Chr(10)
        txt$ = txt$ + "Флэшке присвоена буква: " + DriveLetter$
        MessageRequester("Работа с флехой", txt$, #PB_MessageRequester_Ok)
    EndIf
 EndIf  
   ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
If OpenWindow(0,0,0,600,400,"Removable device test",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)=0
   MessageRequester("","Error",#PB_MessageRequester_Ok)
   End
EndIf
 
SetWindowCallback(@GetDeviceEvent())
Repeat
   event=WaitWindowEvent()
   Select event
      Case #PB_Event_CloseWindow
         Exit=1
   EndSelect
Until Exit


_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 3:06 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Вс янв 10, 2010 1:10 pm
Сообщений: 126
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
etlctcuwr писал(а):
http://www.purebasic.fr/english/viewtopic.php?p=88596
тему не читал лень=s
но там упоминается DEV_BROADCAST
как в твоей найденной статейке

спасибо за ссылку
kvitaliy писал(а):
Не смеши :D
Код на делфи делает тот же "тупой перебор"

только разница в том, что код на делфи перебирает все диски и ищет среди них вставленный, а тот код, что в теме, выводит при вставке флешки список всех дисков
pablov писал(а):
Пробуй

благодарю! то что нужно!

_________________
.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн янв 14, 2019 3:43 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 480
Благодарил (а): 34 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Поковырял свой (условно) пример на AutoIt3, и выложил тут


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB