[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 2 месяца
  • Сообщений: 1285
  • Репутация:126

    [+] [-]
ChkDskGui (PureBasic) Исходник + EXE, v4.2 (x86, x64)Скачать yadi.sk upload.eeвременная версия


Последний раз редактировалось: AZJIO (2023-01-25 16:21), всего редактировалось 43 раз(а)

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 2 месяца
  • Сообщений: 1285
  • Репутация:126

    [+] [-]
Albert
можно исключить попытку обращения к A: и B:, то есть при начале исследования дисков начать с C: до Z:. Можно вынести в ini например StartDisk=2, то есть начать со второй буквы диска. В строке "For i = 0 To 31". Сейчас думаю, а почему 31 если букв 26? Вот там если начать цикл с 2, то и получится игнор.
Joker-2013
я не понял...
Это утиль теперь включает лишь системную дефрагментацию (задачу)
А сама не дефрагментирует с помощью консольной утилиты?
Причём дефрагментация? Прога же для проверки диска на ошибки файловой системы и их исправления.

[Цитировать]

    Albert
  • 1131
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 160
  • Репутация:12

    [+] [-]
Как обещал, скриншоты. Это вероятно такой единичный случай. Не мое железо. Ну его.

[Цитировать]

    SunOK
  • 9
  • Стаж: 9 лет 5 месяцев
  • Сообщений: 352
  • Репутация:32

    [+] [-]
  • Откуда: Україна, Перлина Поділля
Флоппик - это такая флешка, скорее кардридер в современном понимании - носитель временами присутствует. Не обязательно традиционные А и В присвоены, шибко умный юзверь может переназначить буквы)
У меня есть флоппик, пока отключен за ненадобностью. Надо просто запуск утилиты с пустым проверить?

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 3 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
AZJIO,
61048 В строке "For i = 0 To 31". Сейчас думаю, а почему 31 если букв 26?
Это неправильно, должно быть "For i = 0 To 25", иначе будут искаться "буквы" дисков "{|}~€", это не совсем корректно.

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 2053
  • Репутация:120

    [+] [-]
  • Откуда: из прошлого
Код, который в комплекте с проектом, дает ошибку:
[20:12:42] [ОШИБКА] ExamineDesktops() должна быть вызвана перед другой Desktop функцией.
Если добавить что просит компилятор, то работает...
ExamineDesktops()
PB5.62x86

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 3 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
AZJIO
61048В строке "For i = 0 To 31". Сейчас думаю, а почему 31 если букв 26?
К стати, в качестве буквы диска можно использовать и символы, пример использования символа "#"
@echo off
::Тестовый раздел
set "DriveLetter=d"
::Буква монтирования - "#"
set "MountPoint=#"
::Получаем ID раздела
for /f "delims= " %%# in ('mountvol %DriveLetter%: /l') do set "id=%%#"
echo.ID=%id%
::Монтирование
mountvol %MountPoint%: %id%
dir %MountPoint%:
pause
::Размонтирование
mountvol %MountPoint%: /d

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 2 месяца
  • Сообщений: 1285
  • Репутация:126

    [+] [-]
61079 должно быть "For i = 0 To 25"
И я кстати проверил, открыв свою прогу конвертации чисел в отладке скопировал число и конвертировал в двоичный, получил флаги в позициях начиная от правого края. Переназначил флешку на Z и проверил работу границы с 25 и 24. И что мне понравилось само подвыражение ((valie >> i) & 1) является проверкой битового флага, где i его позиция от правого края, 1 - даёт True если битовый флаг 1, соответственно если нужно собрать нули то указываем 0.
Joker-2013, Ок сейчас сначала на пастбине обновлю, как я мог без ExamineDesktops засунуть, но да он выдавал эту ошибку и я добавлял, но потом избавился, так как использовал не размер экрана а рабочее пространство. И это ещё не всё, мне нужно добавить событие закрыть из свёрнутого состояния, там видимо константа другая.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 2 месяца
  • Сообщений: 1285
  • Репутация:126

    [+] [-]
Albert, добавил флаг StartDisk = 0. Измени на 2 и проверь на том компе. Ссылка в шапке, версию не менял.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 1 месяц
  • Сообщений: 324
  • Репутация:35

    [+] [-]
61048можно исключить попытку обращения к A: и B:, то есть при начале исследования дисков начать с C: до Z:
Так себе метод, если даже флоппики всегда будут на A: и B:, то для гнёзд кардридеров даже близко такой возможности нет. Делаем проще и универсальнее: для каждой существующей буквы вызываем GetVolumeInformation_(), первым параметром передаём диск, остальные параметры можно в #Null. И смотрим код возврата. Если вернёт ноль, то диск в список не добавляем. Так отсеются и пустые гнёзда кардридеров, и пустые флоппики.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 2 месяца
  • Сообщений: 1285
  • Репутация:126

    [+] [-]
Gemostarter, а у меня разве не так? Хотя первым отсеивателем стоит GetLogicalDrives, который явно к дискам не обращается а передаёт только наличие дисков в системе. Вторым отсеивателем стоит GetDriveType, чтобы игнорировать CD-ROM, сетевые, рам-диски. А третий GetVolumeInformation только берёт инфу из дисков, вот он то как раз в большей степени обращается к дискам, так как берёт метку диска, серийный номер, файловую систему, а это как раз требует обращения к физическому диску а не к устройству, так как файловая система и метка диска может быть только у устройства с вставленным медиа. Хотя возможно он перед обращением проверяет стоит ли запрашивать физические данные если нет физически диска. Может тут добавить игнор, чтобы не обращался к DriveGetNumber->CreateFile.
для гнёзд кардридеров
кстати и тут я успел задумать, а не поставить ли ещё и конечную границу, чтобы иметь возможность исключить 4 диска в конце W, X, Y, Z и вместо EndDisk = 25 задать 21. А диски переназначить на последние. Ну или хотя бы добавить игнор в виде IgnorDisk = A,B,F,G,H,I и далее проверять перед тем как запросить битовый флаг этого диска просто пропустить шаг цикла. Но опять же потеряется универсальность, забудешь, вставишь в чужой комп и удивляешься, а чего он дисков не видит.
Обновил прогу, добавил GetVolumeInformation как условие, проверить не начем, картридера нет, но по крайней мере диски видит мои.
Albert, проверь теперь, будет ли проблема со StartDisk = 0, этим мы проверим сработала ли GetVolumeInformation на отсутствие диска физически. Если не поможет проверь со StartDisk = 2. Если поможет со StartDisk = 0 то StartDisk в принципе не нужен.
Интересно может ли GetVolumeInformation убрать диск из списка если у диска проблема, вместо того чтобы наоборот добавить и попытаться проверить? Но в любом случае можно выполнить через ком-строку.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 1 месяц
  • Сообщений: 324
  • Репутация:35

    [+] [-]
61084А третий GetVolumeInformation только берёт инфу из дисков, вот он то как раз в большей степени обращается к дискам, так как берёт метку диска, серийный номер, файловую систему, а это как раз требует обращения к физическому диску а не к устройству, так как файловая система и метка диска может быть только у устройства с вставленным медиа
Это вызовет появление б-гмерзких окошек, как на скриншоте у Albert.
Новая проверка норм, у меня в EllyMinor такая же (только все параметры GetVolumeInformation, кроме первого, выставлены в NULL). Свою я проверял на стареньком 3G-модеме с кардридером, всё работало отлично. Счас на нём же и проверю.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 1 месяц
  • Сообщений: 324
  • Репутация:35

    [+] [-]
Проверил, работает.

[Цитировать]

    Droid
  • 18233
  • Стаж: 6 лет
  • Сообщений: 19
  • Репутация:0

    [+] [-]
Цвет консоли почему то сменить не могу?
Проверьте кто-нибудь.

[Цитировать]

    zdoba
  • 138
  • Стаж: 9 лет 4 месяца
  • Сообщений: 357
  • Репутация:22

    [+] [-]
  • Откуда: Россия
Проверил. Флоппик исчез из списка дисков.

[Цитировать]

    Joker-2013
  • 1039
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 2053
  • Репутация:120

    [+] [-]
  • Откуда: из прошлого
61080
Joker-2013, Ок сейчас сначала на пастбине обновлю, как я мог без ExamineDesktops засунуть, но да он выдавал эту ошибку и я добавлял, но потом избавился, так как использовал не размер экрана а рабочее пространство. И это ещё не всё, мне нужно добавить событие закрыть из свёрнутого состояния, там видимо константа другая.
Ориентироваться только на положение на рабочем столе глупо, так как пользователь может сменить разрешение экрана и программа откроется за пределами окна...
Я в своих прогах считываю и разрешение экрана и если оно такое же как в файле конфигурации, то позиционирую окно, если нет, то по центру.
В общем, найду время, посмотрю код. Много что сделано.... Может чего умного подскажу...

Страница 12 из 34


Показать сообщения:    

Текущее время: 26-Апр 18:42

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


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