purebasic.info

PureBasic forum
Текущее время: Вт янв 22, 2019 7:26 am

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: ChkDskGui
СообщениеДобавлено: Ср авг 22, 2018 9:17 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 260
Благодарил (а): 22 раз.
Поблагодарили: 34 раз.
Пункты репутации: 0
ChkDskGui - утилитка для проверки жёстких дисков с помощью chkdsk.exe

Изображение

file.sampo.ru
rgho.st
исходник

может есть идеи? или советы по оптимизации...


Последний раз редактировалось AZJIO Пт янв 18, 2019 4:29 am, всего редактировалось 9 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Чт янв 10, 2019 8:43 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 260
Благодарил (а): 22 раз.
Поблагодарили: 34 раз.
Пункты репутации: 0
Хочу для текущей системы активировать проверку дисков, но не могу ввести данные в реестр. Есть идеи?
Код:
1
2
3
4
5
6
7
8
9
Global hKey.l = 0
Handle = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Control\Session Manager", 0, #KEY_WRITE, @hKey)
If Handle = #ERROR_SUCCESS
        MessageRequester("Ура", "Ключ открыт")
        param.s="BootExecute"
        res.s = "autocheck autochk /K:C *"
        RegSetValueEx_(hKey, @param, 0, #REG_EXPAND_SZ, @res, Len(res))
        RegCloseKey_(hKey)
EndIf


Судя по всему у меня не работает доступ по правам, так как в другой раздел работает. Запуск от админа работает, тогда нужно сообщение типа "Запусти от админа" в случае ошибки?


Последний раз редактировалось AZJIO Чт янв 10, 2019 9:00 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Чт янв 10, 2019 8:59 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11362
Благодарил (а): 4 раз.
Поблагодарили: 445 раз.
Коз запускается с правами администратора?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Чт янв 10, 2019 9:02 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 260
Благодарил (а): 22 раз.
Поблагодарили: 34 раз.
Пункты репутации: 0
Да запускается и работает, уже проверил... Нужно тогда запрос админа.
Единсвенное пока Len(res) умножаю на два иначе вводится пол строки.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Чт янв 10, 2019 9:49 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11362
Благодарил (а): 4 раз.
Поблагодарили: 445 раз.
Есть функция IsUserAdmin. https://docs.microsoft.com/en-us/window ... seranadmin
Вернет не 0 если у приложения права администратора.
Код:
1
Debug IsUserAdmin_()

AZJIO писал(а):
Единсвенное пока Len(res) умножаю на два иначе вводится пол строки.
Код:
1
Debug StringByteLength("1234", #PB_Unicode)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Вс янв 13, 2019 7:47 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 260
Благодарил (а): 22 раз.
Поблагодарили: 34 раз.
Пункты репутации: 0
Пётр
Код:
1
Debug StringByteLength("1234", #PB_Unicode)


является ли строка указанная в коде нуль-терминированной? Мы обсуждали что MSDN говорит
Цитата:
if the data is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include the size of the terminating null character or characters
то есть строка должна содержать NULL в конце, не смотря на то что работает и без него, добавляет сам. То есть добавлять ли 2 байта к StringByteLength(valie, #PB_Unicode), не захватит ли он при это мусор который не является NULL?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Вс янв 13, 2019 11:59 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 708
Благодарил (а): 2 раз.
Поблагодарили: 36 раз.
Пункты репутации: 9
AZJIO писал(а):
Пётр
Код:
1
Debug StringByteLength("1234", #PB_Unicode)


является ли строка указанная в коде нуль-терминированной? Мы обсуждали что MSDN говорит
Цитата:
if the data is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include the size of the terminating null character or characters
то есть строка должна содержать NULL в конце, не смотря на то что работает и без него, добавляет сам. То есть добавлять ли 2 байта к StringByteLength(valie, #PB_Unicode), не захватит ли он при это мусор который не является NULL?


0 это обозначение конца строки asci в юникоде utf16 два 00 служат в винде для указания конца строк
Функция RegSetValueExA
lpData

Данные для хранения.

Для строковых типов, таких как REG_SZ, строка должна иметь нулевое значение . С типом данных REG_MULTI_SZ строка должна заканчиваться двумя нулевыми символами.

Обратите внимание, что lpData, указывающее нулевое значение, является действительным, однако, если это так, cbData должен быть установлен в «0».
cbData

Размер информации, на которую указывает параметр lpData , в байтах. Если данные имеют тип REG_SZ, REG_EXPAND_SZ или REG_MULTI_SZ, cbData должен включать размер завершающего нулевого символа или символов.

из чего следует что если компилишь прогу как юникодную то твоя строка в ней utf16 с двумя 00 и
len() считает количество 16 битных(word=2 байта на символ) юникодных символов без 00 ,и если их нужно для этой функции учитывать в размере то прибавь 2 в байтах будет len()*2+2. :roll:
PS:Обрати внимание что байты в юникоде считать как asci символы нельзя так как в нём может быть в символе в старшем байте 0 что будет расценено как конец строки. :roll:
Утилита chkdsk вроде ещё с доса и наверное работает с asci строкой?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Вс янв 13, 2019 12:47 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11362
Благодарил (а): 4 раз.
Поблагодарили: 445 раз.
AZJIO писал(а):
является ли строка указанная в коде нуль-терминированной?
В PB нультерминированные строки.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Пн янв 14, 2019 11:50 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 260
Благодарил (а): 22 раз.
Поблагодарили: 34 раз.
Пункты репутации: 0
Что-то бъюсь сколько времени безрезультатно (скачать временную версию)
Код:
1
2
3
If LoadFont(1, Font2$, FontSize)
        SetGadgetFont(#PB_Default, FontID(1))
EndIf


пробую всякие шрифты, какой нибудь заметный "Comic Sans MS", а он упрямо не применяется.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Пн янв 14, 2019 2:56 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6442
Благодарил (а): 21 раз.
Поблагодарили: 207 раз.
Пункты репутации: 57
AZJIO писал(а):
пробую всякие шрифты, какой нибудь заметный "Comic Sans MS", а он упрямо не применяется.

Да вроде без проблем
Изображение

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Пн янв 14, 2019 6:09 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 260
Благодарил (а): 22 раз.
Поблагодарили: 34 раз.
Пункты репутации: 0
kvitaliy писал(а):
Да вроде без проблем
Напрямую работает, но я проверяю при чтении с ini. Я уже ini во всех кодировках попробовал, дебаг выдаёт имя шрифта без проблем.

Заработало, я в ini убрал кавычки. В ini от Windws при обработке значений содержащих пробелы нужно заключать значение в кавычки. Я уже вроде второй раз с этим пролетаю.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ChkDskGui
СообщениеДобавлено: Вт янв 15, 2019 7:18 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 746
Благодарил (а): 76 раз.
Поблагодарили: 22 раз.
Пункты репутации: 5
AZJIO писал(а):
Заработало, я в ini убрал кавычки. В ini от Windws при обработке значений содержащих пробелы нужно заключать значение в кавычки. Я уже вроде второй раз с этим пролетаю

первый раз о таком слышу, в моих программах работает, все пути с пробелами, аж полез посмотрел

было дело когда в строке первым символом был пробел, вот его пришлось шифровать, при чтении дешифрировать, иначе его просто выбрасывало, а без него никак нельзя было


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

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


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB