AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
ChkDskGui (PureBasic)
Исходник + EXE, v4.2 (x86, x64)Скачать yadi.sk upload.eeвременная версия
Последний раз редактировалось: AZJIO (2024-11-07 09:05), всего редактировалось 44 раз(а)
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
Joker-2013,53774Уменьши цикличность... Так это неинтересно, задача то как раз и состоит в том, чтобы окно вообще не моргало, можно попробовать пробуферировать вывод, может поможет.
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
AZJIO, тоже вариант... У меня не сканируются диски, если они уже есть в списке...
|
Orochi
- Стаж: 8 лет 5 месяцев
- Сообщений: 218
- Репутация:0[+] [-]
|
53766так это ж надо чтоб сам CheckDisk это умел) а он разве умеет? Можно запустить несколько CheckDisk процессов и сканировать все диски одновременно. Я так всегда делаю.53769Это имеет смысл только при сканировании разделов, находящихся на разных физических дисках , Согласен. Хотя я пробовал сканировать несколько разделов на одно диске одновременно (без восстановления поврежденных секторов), и большой разницы во времени не заметил. Можно сделать что-бы параллельное сканированное происходило только с дисками, а не с разделами.
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
53781Можно сделать что-бы параллельное сканированное происходило только с дисками, а не с разделами. тут вопрос сразу встаёт... отображение прогресса выполнения...
|
Orochi
- Стаж: 8 лет 5 месяцев
- Сообщений: 218
- Репутация:0[+] [-]
|
53784тут вопрос сразу встаёт... отображение прогресса выполнения... Можно сделать закладки (tabs), одна закладка один диск с отображением прогресса выполнения.
|
gera_serg
- Стаж: 9 лет 4 месяца
- Сообщений: 1421
- Репутация:9[+] [-]
|
Положил ChkDskGui.exe рядом с ChkDskGui.au3 в X:\Windows\System32 (ядро 8х64 Хемом1) ChkDskGui.au3 - отрабатывает как и положено ChkDskGui.exe - заявляет "chkdsk.exe" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. >> ЧЯДНТ ?
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
gera_serg, Если ChkDskGui.exe x86 версии, она будет искать chkdsk.exe в \Windows\SysWOW64\ , а там его нет.
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
nikzzzz 1. если использовать элемент Edit, в режиме "только чтение", и при вводе данных использовать опцию "вставить в конец строки", то не моргает. 2. Режим ввода в лейбл только если переменная в цикле не равна пустой строке, тогда новые данные присоединяются к общей и выполняется вставка. Этим исключается холостого хода вставка. То есть было 1000 вставок в секунду, стало 2 вставки в секунду, грубо говоря. Без Sleep или Delay будет наверно миллион раз вставлять, число раз ограничивается скоростью вставки. 3. Уменьшить размер обновляемой области. Редкий случай, но когда я делал счётчик времени с миллисекундами и лейбл мерцал, я решил пусть мерцает хотя бы последняя цифра, и разделил лейбл на 4 области: часы, минуты, секунды, миллисекунда, и ещё три области разделитель на ":", в итоге область миллисекунды уже не мерцала. 4. При обработке файлов в статусной строке мерцают данные, думаю надо было сделать функцию выполняющую вставку 3 раза в секунду. То есть файловая функция обновляет некую переменную 100 раз в секунду, а функции вставки по таймеру это будет не важно, она вставит 3 раза те данные, что были в на данный момент в переменной, всё равно глаз пользователя не сможет оценить 100 кратно меняющиеся данные.
Последний раз редактировалось: AZJIO (2018-05-14 12:50), всего редактировалось 1 раз
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
AZJIO,53791при вводе данных использовать опцию "вставить в конец строки", то не моргает. К сожалению этот вариант не пройдет, для вывода прогресса курсор возвращается в начало строки, и строка заменяется новой, а в этом варианте новое значение прогресса прогресса будет выводиться на новой строке. Вот, что у меня получилось, за счет правильных задержек мерцание незначительное.Import "user32.lib" OemToCharBuffA(*Buff,*Buff1,SizeBuff) EndImport Procedure.s ReadProgramStringOem(iPid) Protected Ret$="" Protected SizeBuff=AvailableProgramOutput(iPid) If SizeBuff>0 Protected *Buff=AllocateMemory(SizeBuff) ReadProgramData(iPid,*Buff,SizeBuff) OemToCharBuffA(*Buff,*Buff,SizeBuff) Ret$=PeekS(*Buff,SizeBuff,#PB_Ascii) FreeMemory(*Buff) EndIf ProcedureReturn Ret$ EndProcedure Procedure.s Cn(Str$) Protected i,j=1,Ret$="",Sym$,Str1$="",Flag=0 For i=1 To Len(Str$) Sym$=Mid(Str$,i,1) Select Sym$ Case Chr(10) Ret$+Str1$+Chr(13)+Chr(10) Str1$="" Flag=0 Case Chr(13) Flag=1 Default If Flag:Str1$="":Flag=0:EndIf Str1$+Sym$ EndSelect Next Ret$+Str1$ ProcedureReturn Ret$ EndProcedure Procedure Chkdsk() ; Protected iPid = RunProgram("cmd.exe", "/c tracert usbtor.ru", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide) ; Protected iPid = RunProgram("cmd.exe", "/c chkdsk d: /f /x", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide) Protected iPid = RunProgram("cmd.exe", "/c chkdsk c: ", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide) Protected Str$,Text$="" If iPid While ProgramRunning(iPid) If WaitWindowEvent(100) = #PB_Event_CloseWindow If MessageRequester("Внимание!", "Идет сканирование диска..."+Chr(10)+"Закрыть программу?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)=6 CloseProgram(iPid) End EndIf EndIf Str$=ReadProgramStringOem(iPid) If Str$ Text$+Str$ SetGadgetText(0,Cn(Text$)+Chr(13)+Chr(10)) SendMessage_(GadgetID(0),#EM_SCROLL,#SB_BOTTOM,0) Sleep_(250) EndIf Wend CloseProgram(iPid) ; Close the connection to the program EndIf EndProcedure Procedure SizeWindowHandler() ResizeGadget(0,0,0,WindowWidth(0),WindowHeight(0)) EndProcedure OpenWindow(0, 44, 16, 700, 300, "CHKDSK GUI", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget) SendMessage_(WindowID(0),#WM_SETICON,0,ExtractIcon_(0,"Shell32.dll",270)) BindEvent(#PB_Event_SizeWindow, @SizeWindowHandler()) SmartWindowRefresh(0, #True) WindowBounds(0, 500, 200, #PB_Ignore, #PB_Ignore) EditorGadget(0, 0, 0, 700, 300, #PB_Editor_ReadOnly) SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) SetGadgetFont(0, LoadFont(0, "Courier New", 10)) Chkdsk() Repeat Until WaitWindowEvent() = #PB_Event_CloseWindow
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
nikzzzz добавил стильSetGadgetColor(0 , #PB_Gadget_BackColor , RGB(55, 55, 55)) SetGadgetColor(0 , #PB_Gadget_FrontColor , RGB(180, 180, 180)) If OSVersion() >= #PB_OS_Windows_7 SetGadgetFont(0, LoadFont(0, "Consolas", 11)) Else SetGadgetFont(0, LoadFont(0, "Courier New", 11)) EndIf Вообще я уже думал об ini, чтобы добавить диски в игнор, галки по умолчанию, цвет консоли, шрифт гуи и консоли и размер. Ещё можно типа продвинутось фейса и сделать иконки опционально, и сделать так чтобы не зависило от разрядности, грубо говоря поиск chkdsk по предполагаемым адресам, допустим вызвать тихое окно если прошло, то молчим, иначе делаем поиск и предлагаем открыть найденный или окно выбора файла, но чтобы ошибку исключал совсем.
|
Joker-2013
- Стаж: 9 лет 5 месяцев
- Сообщений: 2053
- Репутация:120[+] [-]
- Откуда: из прошлого
|
AZJIO, что то мне напоминает, цвет фона и текста:
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Joker-2013 да этот цвет всё напоминает, в убунту обновление, консоль тоже. Я беру "свой" стиль 3F3F3F и 999999 или быстро подобрал похожие. nikzzzz 1. я пока не понимаю, зачем делать окно, когда вполне устраивает cmd-консоль, можно сделать галку чтобы при запуске скомпоновать окна, переместить к примеру влево, не суть. Я за надёжность, чтобы в какой нибудь PE это не вызывало проблем, при почти отсутствии каких то фишек. 2. Разные потоки я думаю много мороки, чтобы отправлять выбор логического диска если он на одном физическом во второй список, чтобы запустить во втором потоке, но тогда нужно 2 и более консоли. Думаю это решать как решают пользователи сами, запустив второй раз утилиту. С последовательной очередью было бы не плохо, поставив к пример все логические диски на проверку и не бегать проверять, закончился ли первый диск. Думаю можно в ini добавить режим компоновки 0-не компоновать, 1-компоновать сверху гуи, под ним консоль, 2-слева гуи справа консоль (для малой высоты в нетбуков) Хотя можно сделать в разных потоках два и более cmd-консолей. Но тогда надо делать множественный выбор дисков, то есть от элемента листвью не уйти.
|
nikzzzz
- Стаж: 9 лет 10 месяцев
- Сообщений: 3114
- Репутация:127[+] [-]
|
AZJIO, "Consolas" может отсутствовать в PE , "Courier New" есть почти везде.53795грубо говоря поиск chkdsk по предполагаемым адресам Там всего два адреса, \Windows\System32 и для X64 \Windows\Sysnative .53798Хотя можно сделать в разных потоках два и более cmd-консолей. Вообще-то я думаю, это лишнее, но если уж делать, нужно делать отдельные очереди для каждого физического диска, и запускать отдельный процесс для каждой очереди.
|
Страница 5 из 34
Текущее время: 25-Ноя 06:11
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|