AZJIO
- Longevity: 6 years 8 months
- Posts: 1320
- REPUTATION:127[+] [-]
|
ChkDskGui (PureBasic)
Исходник + EXE, v4.2 (x86, x64)Скачать yadi.sk upload.eeвременная версия
Last edited by AZJIO on 2023-01-25 16:21; edited 43 times in total
|
nikzzzz
- Longevity: 9 years 9 months
- Posts: 3114
- REPUTATION:127[+] [-]
|
Joker-2013,53774Уменьши цикличность... Так это неинтересно, задача то как раз и состоит в том, чтобы окно вообще не моргало, можно попробовать пробуферировать вывод, может поможет.
|
Joker-2013
- Longevity: 9 years 4 months
- Posts: 2053
- REPUTATION:120[+] [-]
- Location: из прошлого
|
AZJIO, тоже вариант... У меня не сканируются диски, если они уже есть в списке...
|
Orochi
- Longevity: 8 years 4 months
- Posts: 218
- REPUTATION:0[+] [-]
|
53766так это ж надо чтоб сам CheckDisk это умел) а он разве умеет? Можно запустить несколько CheckDisk процессов и сканировать все диски одновременно. Я так всегда делаю.53769Это имеет смысл только при сканировании разделов, находящихся на разных физических дисках , Согласен. Хотя я пробовал сканировать несколько разделов на одно диске одновременно (без восстановления поврежденных секторов), и большой разницы во времени не заметил. Можно сделать что-бы параллельное сканированное происходило только с дисками, а не с разделами.
|
Joker-2013
- Longevity: 9 years 4 months
- Posts: 2053
- REPUTATION:120[+] [-]
- Location: из прошлого
|
53781Можно сделать что-бы параллельное сканированное происходило только с дисками, а не с разделами. тут вопрос сразу встаёт... отображение прогресса выполнения...
|
Orochi
- Longevity: 8 years 4 months
- Posts: 218
- REPUTATION:0[+] [-]
|
53784тут вопрос сразу встаёт... отображение прогресса выполнения... Можно сделать закладки (tabs), одна закладка один диск с отображением прогресса выполнения.
|
gera_serg
- Longevity: 9 years 3 months
- Posts: 1421
- REPUTATION:9[+] [-]
|
Положил ChkDskGui.exe рядом с ChkDskGui.au3 в X:\Windows\System32 (ядро 8х64 Хемом1) ChkDskGui.au3 - отрабатывает как и положено ChkDskGui.exe - заявляет "chkdsk.exe" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. >> ЧЯДНТ ?
|
nikzzzz
- Longevity: 9 years 9 months
- Posts: 3114
- REPUTATION:127[+] [-]
|
gera_serg, Если ChkDskGui.exe x86 версии, она будет искать chkdsk.exe в \Windows\SysWOW64\ , а там его нет.
|
AZJIO
- Longevity: 6 years 8 months
- Posts: 1320
- REPUTATION:127[+] [-]
|
nikzzzz 1. если использовать элемент Edit, в режиме "только чтение", и при вводе данных использовать опцию "вставить в конец строки", то не моргает. 2. Режим ввода в лейбл только если переменная в цикле не равна пустой строке, тогда новые данные присоединяются к общей и выполняется вставка. Этим исключается холостого хода вставка. То есть было 1000 вставок в секунду, стало 2 вставки в секунду, грубо говоря. Без Sleep или Delay будет наверно миллион раз вставлять, число раз ограничивается скоростью вставки. 3. Уменьшить размер обновляемой области. Редкий случай, но когда я делал счётчик времени с миллисекундами и лейбл мерцал, я решил пусть мерцает хотя бы последняя цифра, и разделил лейбл на 4 области: часы, минуты, секунды, миллисекунда, и ещё три области разделитель на ":", в итоге область миллисекунды уже не мерцала. 4. При обработке файлов в статусной строке мерцают данные, думаю надо было сделать функцию выполняющую вставку 3 раза в секунду. То есть файловая функция обновляет некую переменную 100 раз в секунду, а функции вставки по таймеру это будет не важно, она вставит 3 раза те данные, что были в на данный момент в переменной, всё равно глаз пользователя не сможет оценить 100 кратно меняющиеся данные.
Last edited by AZJIO on 2018-05-14 12:50; edited 1 time in total
|
nikzzzz
- Longevity: 9 years 9 months
- Posts: 3114
- REPUTATION: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
- Longevity: 6 years 8 months
- Posts: 1320
- REPUTATION: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
- Longevity: 9 years 4 months
- Posts: 2053
- REPUTATION:120[+] [-]
- Location: из прошлого
|
AZJIO, что то мне напоминает, цвет фона и текста:
|
AZJIO
- Longevity: 6 years 8 months
- Posts: 1320
- REPUTATION:127[+] [-]
|
Joker-2013 да этот цвет всё напоминает, в убунту обновление, консоль тоже. Я беру "свой" стиль 3F3F3F и 999999 или быстро подобрал похожие. nikzzzz 1. я пока не понимаю, зачем делать окно, когда вполне устраивает cmd-консоль, можно сделать галку чтобы при запуске скомпоновать окна, переместить к примеру влево, не суть. Я за надёжность, чтобы в какой нибудь PE это не вызывало проблем, при почти отсутствии каких то фишек. 2. Разные потоки я думаю много мороки, чтобы отправлять выбор логического диска если он на одном физическом во второй список, чтобы запустить во втором потоке, но тогда нужно 2 и более консоли. Думаю это решать как решают пользователи сами, запустив второй раз утилиту. С последовательной очередью было бы не плохо, поставив к пример все логические диски на проверку и не бегать проверять, закончился ли первый диск. Думаю можно в ini добавить режим компоновки 0-не компоновать, 1-компоновать сверху гуи, под ним консоль, 2-слева гуи справа консоль (для малой высоты в нетбуков) Хотя можно сделать в разных потоках два и более cmd-консолей. Но тогда надо делать множественный выбор дисков, то есть от элемента листвью не уйти.
|
nikzzzz
- Longevity: 9 years 9 months
- Posts: 3114
- REPUTATION:127[+] [-]
|
AZJIO, "Consolas" может отсутствовать в PE , "Courier New" есть почти везде.53795грубо говоря поиск chkdsk по предполагаемым адресам Там всего два адреса, \Windows\System32 и для X64 \Windows\Sysnative .53798Хотя можно сделать в разных потоках два и более cmd-консолей. Вообще-то я думаю, это лишнее, но если уж делать, нужно делать отдельные очереди для каждого физического диска, и запускать отдельный процесс для каждой очереди.
|
Page 5 of 34
Current time is: 02-Nov 15:55
All times are UTC + 3
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|