Чтение из реестра - проблемы синтаксиса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ANMAT
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 08.01.2006 (Вс) 12:59

Чтение из реестра - проблемы синтаксиса

Сообщение ANMAT » 15.04.2008 (Вт) 17:29

Скопирую из темы, где раньше задавал вопрос, поскольку ее закрыли.

Вопрос может и не по чистому VB, но к нему имеет отношение:
Попробовал удалить(прочитать) ключ из раздела HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache\ при помощи WSH и не смог найти правильный синтаксис.
Дело в том, что там имена параметров выглядят, примерно, как c:\folder\app.exe
Пытался и в кавычки взять, но ничего не выходит - возвращает ошибку "Неверная ссылка на корень в реестре".
Подскажите, пожалуйста...

Получил, правда, ответ:
\\ задваивать надо

Можно подумать, что я до этого не додумался... Естественно, не помогает...
Чтобы не быть голословным - пример на VBS:
Код: Выделить всё
key = "HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache\"
app = "C:\WINDOWS\System32\NOTEPAD.EXE"
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run app, 1, True
app = replace(app, "\", "\\")
msgbox WshShell.RegRead (key & app)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.04.2008 (Ср) 10:15

А MSDN читать уже не модно?

Код: Выделить всё
Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"

bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\")
WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader")

WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

ANMAT
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 08.01.2006 (Вс) 12:59

Сообщение ANMAT » 16.04.2008 (Ср) 10:37

BV писал(а):А MSDN читать уже не модно?

Модно. Ну и что прикажешь мне делать с приведенным тобой кодом?
Это как-то поможет прочитать ключ, который не читается?
Я эти прописные истины давно усвоил. Ты прочитай ключ из моего примера.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.04.2008 (Ср) 10:50

Ну и что прикажешь мне делать с приведенным тобой кодом?


Эм. Смотреть на синтаксис.

Это как-то поможет прочитать ключ, который не читается?


Да.

Я эти прописные истины давно усвоил.


Ох, если бы... но что-то не заметно. :roll:
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

ANMAT
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 08.01.2006 (Вс) 12:59

Сообщение ANMAT » 16.04.2008 (Ср) 11:04

Да.

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

Кстати, объясни-ка, что в моем синтаксисе не так...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 16.04.2008 (Ср) 13:21

Насчет "\\ задваивать надо" - совет явно из области js. Не надо.

Однако действительно ни один вариант со слешами не работает.
Лучший способ понять что-то самому — объяснить это другому.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.04.2008 (Ср) 15:23

Код: Выделить всё
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo WshShell.RegRead("HKCU\Software\Microsoft\Notepad\lfFaceName")


все работает, BV никто не слушает просто

ANMAT
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 08.01.2006 (Вс) 12:59

Сообщение ANMAT » 16.04.2008 (Ср) 15:36

все работает

Я не знаю, разговор со слепыми и глухими получается....
Ну вы что фигней занимаетесь - причем здесь это?
Есть конкретный разделHKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache\
Выделю его даже жирными буквами. И в нем имена ключей выглядят как C:\WINDOWS\System32\NOTEPAD.EXE
Опять выделю.
Попробуйте его прочитать, этот ключ. Как читать обычные ключи учить не надо. В мной приведенном примере синтаксис нормальный.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.04.2008 (Ср) 15:36

Вообще-то автор топика говорит совсем о другом.
Попробуй прочитать параметр HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache\C:\WINDOWS\System32\NOTEPAD.EXE (зеленый - это ключ).
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.04.2008 (Ср) 15:47

xp понятно, у меня в 2000 такого нет

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.04.2008 (Ср) 16:00

тогда только так:


Код: Выделить всё
Dim oReg, KeyToRead, sValueName, ValueToRead
const HKCU = &H80000001
const HKLM = &H80000002

KeyToRead="Software\Microsoft\Windows\ShellNoRoam\MUICache"
sValueName= "C:\WINDOWS\System32\NOTEPAD.EXE"
 
Set oReg = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& ".\root\default:StdRegProv")
 
oReg.GetStringValue HKCU,KeyToRead,sValueName,ValueToRead

MsgBox Cstr(ValueToRead)

ANMAT
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 08.01.2006 (Вс) 12:59

Сообщение ANMAT » 16.04.2008 (Ср) 16:23

Konst_One, спасибо!
Блин, а я в WMI даже не подумал залезть...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

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

    TopList