Chesh, там специфичного для C кода почи ничего нет, ибо всё построено на API-вызовах. Если нужны будут библиотеки - пиши, отошлю.
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
|
|||
карма: 1 |
|
Ответов: 574
Рейтинг: 1
|
|||
iarspider писал(а): Unplug - это для всех (т.е. со сменныи и несменным носителем). При этом происходит логическое отключение устройства. Ребята, привет! Я немножко отсутствовал, может что пропустил. Такой метод извлечения никто так и не сделал? Очень понадобилось ------------ Дoбавленo: Если что, нашёл тут кое-какую статейку на русском, но опять-таки для C++. Может пригодится... http://expert.delphi.int.ru/question/260/ |
|||
карма: 0 |
|
Ответов: 3851
Рейтинг: 159
|
|||
дарова.
что-то ты долго .. отсутствовал с некоторого времени у нас в текущей версии есть элемент FSMonitor, вот он и 'Производит отключение переносных дисков'. Или ты о другом? |
|||
карма: 0 |
|
Ответов: 574
Рейтинг: 1
|
|||
Привет, Андрей! Только что посмотрел с SVN компонент - у меня тот же (в HiAsm), метод извлечения Unplug не реализован (только что попытался свою USB-флешку извлечь - она осталась в качестве буквы диска в моём компьютере и в неё нельзя зайти - это извлечение для кард-ридеров). Вот такие дела...
------------ Дoбавленo: Как бы намекнуть, чтобы nesco помог |
|||
карма: 0 |
|
Ответов: 3851
Рейтинг: 159
|
|||
карма: 0 |
| ||
файлы: 1 | code_9373.txt [1KB] [566] |
Ответов: 574
Рейтинг: 1
|
|||
Андрей. писал(а): Я тоже не совсем понял как оно code_9373.txt работает..Тебе это нужно?
Вот что-то для Delphi нарыл. Поможет? http://pblog.ru/?p=105 |
|||
карма: 0 |
| ||
файлы: 1 | code_9374.txt [354B] [706] |
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Yuriy, я посмотрю немного позже, возможно пригодится
|
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Yuriy писал(а): Вот что-то для Delphi нарыл |
|||
карма: 25 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Tad писал(а): Что тебе еще нужно?Наверное, компонент для HiAsm'a |
|||
карма: 22 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Yuriy писал(а): Тебе это нужно?Думал, что готовность системы "отпустить" диск, после вызова соответствующих методов компонент, должна сопровождаться сообщением как при штатных действиях юзера.. |
|||
карма: 0 |
|
Ответов: 574
Рейтинг: 1
|
|||
nesco писал(а): Yuriy, я посмотрю немного позже, возможно пригодитсяБольшое тебе спасибо!!! Tad писал(а): так там же в zip-е есть готовый exe-файл. Что тебе еще нужно?Я вроде в HiAsm пока проект делаю, не в Delphi, как заметил nesco ;) |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Yuriy, а что мешает запустить внешнюю програму из HiAsm ?
|
|||
карма: 25 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Tad писал(а): а что мешает запустить внешнюю програму из HiAsm ?Ему это не понравилось |
|||
карма: 22 |
|
Ответов: 574
Рейтинг: 1
|
|||
Я смотрю, мне можно молчать
|
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Да я припоминаю твои изыскания в этой области
Задал ты оригинальную задачу, просто так она не решается. Удаляется устройство не сложно, сложно получить хандл этого устройства по букве диска -- вот там такая @па, что я уже какой час над этим бьюсь ------------ Дoбавленo: Для тех, кому интересно: Формально для безопасного извлечения USB-накопителя достаточно сделать вызов CM_Query_And_Remove_SubTree() для родительского экземпляра устройства (Device Instance) нужного диска.
Однако проблема получения кода экземпляра устройства по букве диска достаточно нетривиальна. Один из вариантов решения: 1) получить номер устройства в своём классе по имени устройства: DeviceIoControl() c кодом операции IOCTL_STORAGE_GET_DEVICE_NUMBER для хэндла, полученного с помощью CreateFile('\\.\X:', .... ) (где X - имя нужного диска) Запомним найденный номер, например, в DeviceNumber. 2) Далее, путём перебора всех устройств в классе GUID_DEVINTERFACE_DISK (в случае USB-Flash), определяем номер устройства по имени: DeviceIoControl() c кодом операции IOCTL_STORAGE_GET_DEVICE_NUMBER для хэндла, полученного с помощью CreateFile(Path, .... ) (где Path - SP_DEVICE_INTERFACE_DETAIL_DATA.DevicePath, которое возвращает SetupDiGetDeviceInterfaceDetail() ) Если полученный номер совпал с DeviceNumber (из п.1), то найденное устройство это то, которое нам нужно - запоминаем код экземпляра в DeviceInstance ( SP_DEVINFO_DATA.DevInst, которое возвращает SetupDiGetDeviceInterfaceDetail() ) Для перебора используем SetupDiGetClassDevs(), SetupDiEnumDeviceInterfaces(). Теперь, имея в наличии DeviceInstance, получаем код экземпляра родительского устройства с помощью CM_Get_Parent(DevInstParent, DeviceInstance) и выполняем CM_Query_And_Remove_SubTree() для DevInstParent. ------------ Дoбавленo: Вроде ничего сложного, но получить вот это Path - SP_DEVICE_INTERFACE_DETAIL_DATA.DevicePath таааакой геморрой... |
|||
карма: 22 |
|