AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
ChkDskGui (PureBasic)
Исходник + EXE, v4.2 (x86, x64)Скачать yadi.sk upload.eeвременная версия
Последний раз редактировалось: AZJIO (2024-11-07 09:05), всего редактировалось 44 раз(а)
|
Отправлено: 30-Апр-2020 20:32
(спустя 1 час 18 минут)
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
goga8686, сделать то это не сложно, просто цель игнора была в запрете показа дисков картридера и всяких виртуальных дисков из папок. То есть определил доступ к файловой системе, значит диск, но это вышло вот такой вот проблемойдаже если файловая система битая и диск в проводнике не отображается наверно файлы на диске не отображаются, а не сам диск, потому что чекдиску нужна буква
Последний раз редактировалось: AZJIO (2020-04-30 20:36), всего редактировалось 1 раз
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
AZJIO, Посмотрел твой исходник, там у тебя в список не добавляются диски, если их параметры нечитаемы. Подправил твой исходник (чисто для примера)source.pbProcedure.s ComboListDrive(Drive2$) Protected.l Serial, type, i Protected.s Lfwrk, FileSystem, VolName, r = Chr(10) Protected.q total_bytes Protected Result.s=Drive2$+":" Lfwrk=Drive2$+":\" type =GetDriveType_(Lfwrk) FileSystem = Space(256) VolName= Space(256) Select type Case 0 ProcedureReturn "-" Case 2 ; Drive2$+": Rem " Result + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "Rem " Case 3 ; Drive2$+": Fixed " Result + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "Fixed" Default ProcedureReturn Result + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "Unknown" EndSelect ; Drive2$ = DriveGetNumber(Left(Drive2$,1) + ":") + " " + Drive2$ If GetVolumeInformation_(@Lfwrk, @VolName, 255, @Serial, 0, 0, @FileSystem, 255) Result + r + VolName + r + FileSystem If (GetDiskFreeSpaceEx_(Lfwrk, 0, @total_bytes, 0)) ; Drive2$ + " "+ Str(total_bytes/1048576)+ " Мб" Result + r + FormatSizeDisk(total_bytes) EndIf Else Result + r + "??????" + r + "????" + r + FormatSizeDisk(total_bytes) EndIf ProcedureReturn Result EndProcedure Результат:
Диск H: стал виден (это не отформатированная флэшка), в твоем случае она просто была не видна.
Последний раз редактировалось: nikzzzz (2020-04-30 23:24), всего редактировалось 3 раз(а)
|
goga8686
- Стаж: 7 лет 10 месяцев
- Сообщений: 891
- Репутация:73[+] [-]
|
AZJIO,наверно файлы на диске не отображаются Верно.Я неправильно выразился.
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
76787То есть определил доступ к файловой системе, значит диск Это неправильно для данной утилиты, не подключенные диски, конечно желательно исключить, а вот доступа к файловой системе может и не быть, причем chkdsk иногда эту проблему решает.
|
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
nikzzzz, как же быть с картридером без диска? Сейчас получится все диски имеющие буквы появятся. И во-вторых не получим ли мы сообщение при обращении за информацией о диске, о том что в картридере нет диска, как это делает Ghost, выкидывает 4 мессаги на каждом запуске которые просто закрываешь каждый раз.76791 а вот доступа к файловой системе может и не быть, причем chkdsk иногда эту проблему решает. так у меня этот случай и произошёл и я исправил диск Хотя мессагу мы не получим, потому что не запрашиваем размер и тип, а просто выпрыг из функции раньше. Да, даже такой способ и есть решение
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
AZJIO,76793Сейчас получится все диски имеющие буквы появятся. Я эту проблему (исключить не подключенные диски) решал, правда давно, посмотрю наверняка где-то решение валяется, найду, отпишусь. К сожалению, у меня нет старых картридеров, а современные буквы для пустышек не добавляют, проверить не на чем. В принципе, можно плюнуть на это, есть, конечно, небольшое неудобство, но при любом раскладе повредить систему не получится.
|
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Обновил. В архив добавил временную версию, которую мы пытались тестировать на компе Joker-2013. Её отличие в том, что при подключении дисков с несколькими разделами при работающей утилите все диски нормально добавляются и удаляются из списка, а из недостатков наверно то что утилита изменяет размер окна во время добавления дисков из за этого при запуске окно дёргается расширяясь. Добавил в архив английскую версию, точнее на русской Windows будет русский фейс, на английской - английский.
|
Отправлено: 30-Апр-2020 23:29
(спустя 1 час 48 минут)
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
AZJIO Посмотри, я немного еще поправил твою проседуру ComboListDrive(), по идее должна теперь не видеть пустые картридеры, но не гарантирую, проверить не на чем. За одно, подправил вывод инфы, смотри картинку. Добавлено через 16 минут 43 секунды: Поправил пост. Добавлено через 53 минуты 42 секунды: AZJIO И еще, после проверки раздела, желательно было бы снять с него галку, но это так, надо же к чему-то придраться
|
Отправлено: 01-Май-2020 00:55
(спустя 1 час 25 минут)
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
nikzzzz, я сначала добавил вопросительные знакиDrive2$+":" + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "Unknown" + r + "?" + r + "?" а потом убрал, вроде как пустота означает что данные не определены. На счёт "Rem", "Fixed" после завтра буду смотреть, работа. Галки можно снять сразу после нажатия "Старт", как начатая процедура, но всё же они информативны. У меня была идея сделать проверенные диски блеклыми, тогда можно галки снять, а также изменить цвет тех дисков, в которых проблема файловой системы, то есть картридеры будут другим цветом.
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
AZJIO,76802У меня была идея сделать проверенные диски блеклыми Не вижу особого смысла, утилита все-таки предназначена не для полных лузеров, да и им это не нужно, все равно ничего не поймут, а нормальный пользователь и так разберется, разве что, в качестве развлечения. Добавлено через 4 минуты 3 секунды:
76802вроде как пустота означает что данные не определены Imxo. пустота не означает ничего, "????" или "----" более информативны.
|
Отправлено: 02-Май-2020 06:06
(спустя 1 день 4 часа)
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Обновил. Добавил отдельный вариант с сортировкой (+2 кб). То есть нажать на заголовок колонки и данные сортируются по текущей колонке, строки лексикографически, размер по числу. Отдельно пример сортировки. Двойной клик на диске открывает его в проводнике. nikzzzz, сделал почти так, запрос размера самостоятельный вызов, а не внутри, в любом случае ведь проверяется ошибка апи-функции. Пустышка "---", кстати её получить можно подключив телефон, когда он не успел определиться и диск ещё недоступен, или Linux-раздел. nikzzzz, так как я ранее добавлял только FIXED и REMOVABLE а остальные игнорировал, то похоже можно добавить в игнор CDROM, RAMDISK... или даже вернуть выпрыг из функции для типов кроме FIXED и REMOVABLE, потому что повреждение файловой системы всё равно определяет тип диска. Если диск есть, значит и тип есть, ну или по крайней мере оставить для UNKNOWN (неформатированный или сбойный), а игнорировать точные определения типа: DRIVE_UNKNOWN // неизвестеный DRIVE_NO_ROOT_DIR // корневой папки нет DRIVE_REMOVABLE // съёмный, флешка DRIVE_FIXED // жёсткий диск DRIVE_REMOTE // удаленный, т.е. сетевой DRIVE_CDROM // СD ROM DRIVE_RAMDISK // В оперативной памяти чтобы исключить диски X:, B:, CDROM Тест виртуального диска из папки выдал тип FIXED, то есть это не игнорируется
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
AZJIO, 76835запрос размера самостоятельный вызов Тогда уж надо получать размер раздела, даже если он RAW, примерsource.pb;Чтение размера RAW диска Structure DISK_GEOMETRY Cylinders.q MediaType.l TracksPerCylinder.l SectorsPerTrack.l BytesPerSector.l EndStructure Structure DISK_GEOMETRY_EX Extends DISK_GEOMETRY DiskSize.q byte.b[1] EndStructure #FILE_ANY_ACCESS = 0 #METHOD_BUFFERED = 0 #IOCTL_DISK_BASE = 7 Macro CTL_CODE(DeviceType, Function, Method, Access) ((DeviceType)<<16)|((Access)<<14)|((Function)<<2)|(Method) EndMacro #IOCTL_DISK_GET_DRIVE_GEOMETRY_EX = CTL_CODE(#IOCTL_DISK_BASE, $28, #METHOD_BUFFERED, #FILE_ANY_ACCESS) Procedure.q _GetDriveSize(Drive.s) Protected device.l, bytes.l, os.OSVERSIONINFO, disk.DISK_GEOMETRY_EX os\dwOSVersionInfoSize = SizeOf(OSVERSIONINFO) device = CreateFile_("\\.\" + Drive, #GENERIC_READ|#GENERIC_WRITE, #FILE_SHARE_READ|#FILE_SHARE_WRITE, 0, #OPEN_EXISTING, 0, 0) If device <> #INVALID_HANDLE_VALUE DeviceIoControl_(device, #IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, 0, 0, @disk, SizeOf(disk), @bytes, 0) CloseHandle_(device) EndIf ProcedureReturn disk\Disksize EndProcedure Procedure.s ComboListDrive(Drive2$) Protected.l Serial, type, i Protected.s Lfwrk, FileSystem, VolName, r = Chr(10) Protected.q total_bytes Lfwrk=Drive2$+":\" type =GetDriveType_(Lfwrk) FileSystem = Space(256) VolName= Space(256) ; If Lfwrk = "H:\" ; Debug type ; EndIf Select type Case #DRIVE_REMOVABLE Drive2$+":" + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "Rem " Case #DRIVE_FIXED Drive2$+":" + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "Fixed" Case #DRIVE_REMOTE, #DRIVE_CDROM, #DRIVE_RAMDISK ProcedureReturn "-" Case #DRIVE_NO_ROOT_DIR ProcedureReturn Drive2$+":" + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "No_Root_Dir" Case #DRIVE_UNKNOWN ProcedureReturn Drive2$+":" + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "Unknown" Default ProcedureReturn Drive2$+":" + r + "[" + DriveGetNumber(Drive2$ + ":") + "]" + r + "---" EndSelect If GetVolumeInformation_(@Lfwrk, @VolName, 255, @Serial, 0, 0, @FileSystem, 255) Drive2$ + r + VolName + r + FileSystem Else Drive2$ + r + "---" + r + "---" EndIf ; Drive2$ = DriveGetNumber(Left(Drive2$,1) + ":") + " " + Drive2$ If (GetDiskFreeSpaceEx_(Lfwrk, 0, @total_bytes, 0)) ; Drive2$ + " "+ Str(total_bytes/1048576)+ " Мб" Drive2$ + r + FormatSizeDisk(total_bytes) Else Drive2$ + r + FormatSizeDisk(_GetDriveSize(Left(Drive2$,1) + ":")) EndIf ProcedureReturn Drive2$ EndProcedure
Добавлено через 10 минут 51 секунда: Imxo, в колонке размер неплохо было бы указать, в чем он измеряется - "Gb"
|
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
nikzzzz 1. У меня раздел Linux и телефон (неопределившийся) показали 0.000. Это неформатированный раздел показал 3.744? Как бы сделать отдельно неформатированный и неопределившийся? Может если размер равен 0.000 то задать "---"? Ведь никто не будет создавать раздел размером 0.000 и соответственно это неопределившийся.If (GetDiskFreeSpaceEx_(Lfwrk, 0, @total_bytes, 0)) Drive2$ + r + FormatSizeDisk(total_bytes) Else total_bytes = GetDriveSize(Left(Drive2$,2)) If total_bytes Drive2$ + r + FormatSizeDisk(total_bytes) Else Drive2$ + r + "---" EndIf EndIf И, кстати, зачем нам RAW, мы же не будем проверять ошибки неформатированного раздела? Вот, чтобы цвет сделать (в код-архиве пример он же но без предупреждений) 2. Сортировку добавить в утилиту окончательно? А то напрягает 4 исходника править точечно.
|
Страница 19 из 34
Текущее время: 27-Ноя 21:30
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|