Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка в сравнении одинаковых строк / 12 сообщений из 12, страница 1 из 1
04.07.2008, 20:47
    #35412573
Morion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Доброе время суток, уважаемые форумчане... У меня возникла проблема.

Мне необходимо проверить, находится ли моя программа в автозагрузке. Делаю я это следующим образом:

Код: plaintext
1.
2.
3.
4.
If QueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Programm") = App.Path + "\" + App.EXEName + ".exe"
 Check_Windows.Value =  1 
Else
 Check_Windows.Value =  0 
End If

Но всегда получается False.

Однако стоит написать следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Label2.Caption = QueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Programm")
Label3.Caption = App.Path + "\" + App.EXEName + ".exe"

If Label2 = Label3 Then
 Check_Windows.Value =  1 
Else
 Check_Windows.Value =  0 
End If

И всё работает на ура.
Как обойти ошибку? Не хочется работать с двумя лишними Лейбелами...
...
Рейтинг: 0 / 0
05.07.2008, 10:01
    #35412869
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
А чему равны в отладчике следующие строки ?
QueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Programm")
и
App.Path + "\" + App.EXEName + ".exe"


...
Рейтинг: 0 / 0
05.07.2008, 14:13
    #35412958
Morion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
C:\Program Files\My Programm\Programm.exe

Но дело не в том. Даже если использовать временно переменные, типа

q = QueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Programm")
q = App.Path + "\" + App.EXEName + ".exe"

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

Однако стоит сделать то же самое с лейбелами, всё сравнивается правильно...
...
Рейтинг: 0 / 0
05.07.2008, 18:29
    #35413063
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Morion
Однако стоит сделать то же самое с лейбелами, всё сравнивается правильно...
Так не бывает.
Сравните длины строк, потом посимвольно сравните.
...
Рейтинг: 0 / 0
07.07.2008, 16:57
    #35415674
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Какой тип возвращает ваше QueryValue?
...
Рейтинг: 0 / 0
08.07.2008, 11:32
    #35417044
Morion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Хм... Long... Странно... А как из Long может получиться строка? во блин...
...
Рейтинг: 0 / 0
08.07.2008, 11:39
    #35417068
Morion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Может кто подскажет?

В модуле используется следующее:

Код: plaintext
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.
Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long

...

Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)

Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName,  0 , KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
QueryValue = vValue
RegCloseKey (hKey)

End Function

Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long

Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String

On Error GoTo QueryValueExError
    
lrc = RegQueryValueExNULL(lhKey, szValueName,  0 &, lType,  0 &, cch)
'If lrc <> ERROR_NONE Then MsgBox "No!", vbExclamation, Form1.Caption
Select Case lType
       Case REG_SZ:
    sValue = String(cch,  0 )
    lrc = RegQueryValueExString(lhKey, szValueName,  0 &, lType, sValue, cch)
    If lrc = ERROR_NONE Then
                        vValue = Left$(sValue, cch)
       Else
       vValue = Empty
    End If

    Case REG_DWORD:
    lrc = RegQueryValueExLong(lhKey, szValueName,  0 &, lType, lValue, cch)
    If lrc = ERROR_NONE Then vValue = lValue

    Case Else
    lrc = - 1 
    End Select
QueryValueExExit:
    QueryValueEx = lrc
    Exit Function
QueryValueExError:
    Resume QueryValueExExit
End Function
...
Рейтинг: 0 / 0
08.07.2008, 15:17
    #35417905
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
MorionХм... Long... Странно... А как из Long может получиться строка? во блин...

То-то и оно...
...
Рейтинг: 0 / 0
08.07.2008, 15:19
    #35417913
Morion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Но ведь я обычно так считываю инфу из реестра и (если не сравнивать) то всё получается норм...
...
Рейтинг: 0 / 0
08.07.2008, 15:22
    #35417923
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Вы там очень много играетесь с типом Variant. Попробуйте

Код: plaintext
1.
2.
3.
4.
Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String) as String

....

QueryValue = CStr(vValue)
...
Рейтинг: 0 / 0
08.07.2008, 15:25
    #35417931
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Или введите аргумент ByVal pblnReturnString As Boolean

Код: plaintext
1.
2.
3.
4.
If pblnReturnString Then
   QueryValue = CStr(vValue)
Else
   QueryValue = vValue
End If
...
Рейтинг: 0 / 0
09.07.2008, 12:55
    #35420105
Morion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в сравнении одинаковых строк
Ок, сейчас попробуем...
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка в сравнении одинаковых строк / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]