purebasic.info

PureBasic forum
Текущее время: Вс окт 20, 2019 9:37 am

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: Чт окт 10, 2019 7:56 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 503
Благодарил (а): 34 раз.
Поблагодарили: 58 раз.
Пункты репутации: 0
Сделал две функции и решил объединить в одну
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
EnableExplicit
 
Procedure RegExists(Root, KeyPath$, ValueName$ = "")
        Protected hKey
        ; Если раздел открыт успешно
        If #ERROR_SUCCESS = RegOpenKeyEx_(Root,KeyPath$,0,#KEY_READ,@hKey)
                If ValueName$
                        If #ERROR_SUCCESS = RegQueryValueEx_(hKey,ValueName$,0,0,0,0)
                                ProcedureReturn 1
                        Else
                                ProcedureReturn 0
                        EndIf
                EndIf
                RegCloseKey_(hKey)
                ProcedureReturn 1
        Else
                ProcedureReturn -1 ; 0, если надо булев
        EndIf
EndProcedure
 
Define f
f = RegExists(#HKEY_CURRENT_USER, "Environment")
Debug "Раздел существует = " + Str(f)
f = RegExists(#HKEY_CURRENT_USER, "Environment","TEMP")
Debug "Имя параметра существует = " + Str(f)



Мне нужно либо определить число заданных параметров, допустим 2 или 3, чтобы если 3 то проверить ещё и ValueName$. Либо задать дефолтное ValueName$, которое не входит в допустимые параметры. Но пустой параметр для реестра допустимый. В AutoIt3 задаётся так ValueName$ = Default, а далее сравнивается, If ValueName$ = Default. Вроде мысль взять любой управляющий символ, например Chr(1), но вдруг кто-то додумается его использовать также как и я. Пока ничего не нагуглил.


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

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 10, 2019 8:02 pm 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Сб авг 31, 2019 6:51 pm
Сообщений: 11
Откуда: Россия, Киров
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
Len(Variable$) > 0

upd: Не очень понятно, зачем это нужно.

_________________
Изображение


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 503
Благодарил (а): 34 раз.
Поблагодарили: 58 раз.
Пункты репутации: 0
Олегович Артём писал(а):
Len(Variable$) > 0

не, суть не в том что если что-то введено, то значит параметр в наличии, но Len(Variable$) = 0 это тоже валидный параметр. То есть как бы надо Len(Variable$) > -1, хотя это абсурд.
Олегович Артём писал(а):
upd: Не очень понятно, зачем это нужно.
чтобы отправить алгоритм по новой ветви взависимвости задал ли юзер 3-й параметр или нет.

Олегович Артём писал(а):
Len(Variable$) > 0
мой вариант If Variable$ должен работать быстрее, так как если первый символ не null, то true


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 11, 2019 9:06 am 
Не в сети
ассистент

Зарегистрирован: Вт мар 06, 2018 7:45 am
Сообщений: 17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
>Procedure RegExists(Root, KeyPath$, ValueName$ = "")

Я вижу что ты пишешь обертку для функций реестра -
Я пять лет назад уже делал - http://purebasic.mybb.ru/viewtopic.php?id=501
не помню уже для чего конкретно нужно было.
А недавно понадобилось для другой утилиты - а у меня уже есть.
применял так
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
Procedure SetToRegistry()
        Protected Key$="HKEY_CLASSES_ROOT\.pdf", tmp$
        Protected VName$, VType.String, VData.String
        If Not ssRegGetValue(Key$,"", @VType, @VData) ; значение по умолчанию
                MessageRequester(#ProgName,"Облом при запросе данных из реестра"+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                ProcedureReturn 0
        EndIf
        Debug VType\s
        Debug VData\s
        Key$="HKEY_CLASSES_ROOT\"+VData\s+"\shell"
        If Not ssRegKeyExist(Key$)
                If Not ssRegCreateKey(Key$)
                        MessageRequester(#ProgName,"Облом при создании ключа реестра ["+Key$+"]"+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                        ProcedureReturn 0
                EndIf
        Else
                Debug Key$
        EndIf
        Key$+"\Open to ImageExtractor"
        If Not ssRegKeyExist(Key$)
                If Not ssRegCreateKey(Key$)
                        MessageRequester(#ProgName,"Облом при создании ключа реестра ["+Key$+"]"+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                        ProcedureReturn 0
                EndIf
        Else
                Debug Key$
        EndIf
        If Not ssRegSetValue(Key$, "MUIVerb", "REG_SZ", "Open To ImageExtractor")
                MessageRequester(#ProgName,"Облом при создании значения MUIVerb"+#CRLF$+
                                                                                "в ключе реестра ["+Key$+"]"+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                ProcedureReturn 0
        EndIf
        If Not ssRegSetValue(Key$, "Position", "REG_SZ", "Bottom")
                MessageRequester(#ProgName,"Облом при создании значения Position"+#CRLF$+
                                                                                "в ключе реестра ["+Key$+"]"+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                ProcedureReturn 0
        EndIf
        Key$+"\command"
        If Not ssRegKeyExist(Key$)
                If Not ssRegCreateKey(Key$)
                        MessageRequester(#ProgName,"Облом при создании ключа реестра ["+Key$+"]"+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                        ProcedureReturn 0
                EndIf
        Else
                Debug Key$
        EndIf
        tmp$=ProgramFilename()+~" \"%1\""
        If Not ssRegSetValue(Key$, "", "REG_SZ", tmp$)
                MessageRequester(#ProgName,"Облом при создании значения по умолчанию"+#CRLF$+
                                                                                "в ключе реестра ["+Key$+"]"+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                ProcedureReturn 0
        EndIf
        MessageRequester(#ProgName,"Контекстное меню PDF-файла пополнено ссылкой на ImageExtractor ")
       
EndProcedure
Procedure DeleteFromRegistry()
        Protected Key$="HKEY_CLASSES_ROOT\.pdf", tmp$
        Protected VName$, VType.String, VData.String
        If Not ssRegGetValue(Key$,"", @VType, @VData) ; значение по умолчанию
                MessageRequester(#ProgName,"Облом при запросе данных из реестра"+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                ProcedureReturn 0
        EndIf
        Debug VType\s
        Debug VData\s
       
        Key$="HKEY_CLASSES_ROOT\"+VData\s+"\shell\Open to ImageExtractor"
        If Not ssRegKeyExist(Key$)
                MessageRequester(#ProgName,"В реестре нет ключа "+#CRLF$+
                                               "["+Key$+"]"+#CRLF$,#PB_MessageRequester_Ok)
               
                ProcedureReturn 0
        Else
                Debug Key$
        EndIf
        If Not ssRegDeleteKey(Key$)
                MessageRequester(#ProgName,"Облом при удалении ключа "+#CRLF$+
                                               "["+Key$+"]"+#CRLF$+#CRLF$+
                                               "ErrorCode="+Str(ssRegErrorCode)+
                                               "ErrorText="+ssRegErrorText,#PB_MessageRequester_Ok)
                ProcedureReturn 0
        EndIf
        MessageRequester(#ProgName,"Контекстное меню PDF-файла очищено ")
               
EndProcedure
 
 



Посмотри - может пригодится.


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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 8


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

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