Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > проблемы записи с регистр


Автор: DESert 17.6.2006, 16:16
Есть такой код, в котором я пытаюсь создать ключ в реестре. Путь этого ключа 
HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Extensions\<GUID>
Код

    CString strGUID; 
    strGUID = GUIDgen(); //получаю GIUD
    CString strPath= "\\Software\\Microsoft\\Internet Explorer\\Extensions\\";
    strPath+=strGUID;
    
    HKEY hkOpisatel;    
    LONG lRes = RegCreateKeyEx(HKEY_LOCAL_MACHINE,strPath,NULL,NULL,   REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY,NULL,&hkOpisatel,NULL);
    RegCloseKey (hkOpisatel);    


//функция GIUDgen
CString GUIDgen()
{
    GUID guid;
    CoCreateGuid(&guid);
    BYTE * str;
    UuidToString((UUID*)&guid, &str);
 
    CString unique((LPTSTR)str);
    CString unique2 = "{";
    unique2+=unique;
    unique2+="}";
    RpcStringFree(&str);
    return unique2;


но, конечно же ничего не создаётся smile
что я делаю неправильно?
 

Автор: 0x07L 17.6.2006, 17:16
Наверное я неправ, но, может быть

Код
CString strPath= "Software\\Microsoft\\Internet Explorer\\Extensions";
  

Автор: DESert 17.6.2006, 18:32
0x07L, всё равно не получается smile 

Автор: 0x07L 17.6.2006, 19:22
Тьфу ты блин. Торопился, поэтому не заметил 
Цитата(DESert @  17.6.2006,  16:16 Найти цитируемый пост)
strPath+=strGUID;

Тогда, наверное, 
Цитата(DESert @  17.6.2006,  16:16 Найти цитируемый пост)
CString strPath= "Software\\Microsoft\\Internet Explorer\\Extensions\\";

Больше ничего нехорошего в твоем коде не вижу.
 

Автор: DESert 17.6.2006, 19:27

Я разобрался, теперь раздел создаётся. Теперь я пытаюсь создать там новые переменные:
Код

         CString strPath= "Software\\Microsoft\\Internet Explorer\\Extensions\\";
    strPath+=strGUID;
    CString strButton = "Button Text";
    CString strButtonText = "AdSearch";
    CString strHotIcon="HotIcon";
    CString strIcon = "Icon";
    
    HKEY hkOpisatel;    
    LONG lRes = RegCreateKeyEx(HKEY_LOCAL_MACHINE,strPath,/**/NULL,NULL,REG_OPTION_NON_VOLATILE,
        KEY_CREATE_SUB_KEY,/**/NULL,&hkOpisatel,NULL);
    
    
    
    CString strRazdel   = "HKEY_LOCAL_MACHINE\\";    
    CString strCLSID = "CLSID";
    CString strCLSIDvalue = "{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}";
    CString strHotIconvalue = "C:\\Dev-Cpp\\Icons\\Book.ico";
    CString strIconvalue = "C:\\Dev-Cpp\\Icons\\Console.ico";
    CString strExec = "Exec";
    CString strExecvalue = "D:\\Release\\RooTT.exe";

    CWinApp* pApp = AfxGetApp();    
    
    strRazdel +=strPath; 
    pApp->WriteProfileString(strRazdel, strButton, "AdSearch");    
    pApp->WriteProfileString(strRazdel, strHotIcon, strHotIconvalue);
    pApp->WriteProfileString(strRazdel, strIcon, strIconvalue);
    pApp->WriteProfileString(strRazdel, strCLSID, strCLSIDvalue);
    pApp->WriteProfileString(strRazdel, strExec, strExecvalue);
      
        RegCloseKey (hkOpisatel);


Но опять не хочет ничего делать smile

P.S. 0x07L, по-моему ты всё таки был прав smile
 

Автор: 0x07L 17.6.2006, 19:52
Странно, но такой код работает

Код

#include <windows.h>
#include <tchar.h>

int APIENTRY _tWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int CmdShow)
{
    HKEY hkOpisatel;
    LPTSTR strPath = _TEXT("Software\\Microsoft\\Internet Explorer\\Extensions\\{GUID}");
    LONG lRes = RegCreateKeyExW (HKEY_LOCAL_MACHINE, strPath, 0, 0, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY, 0, &hkOpisatel, 0);
}
 

Автор: DESert 17.6.2006, 21:27
Цитата

#include <windows.h>
#include <tchar.h>

int APIENTRY _tWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int CmdShow)
{
    HKEY hkOpisatel;
    LPTSTR strPath = _TEXT("Software\\Microsoft\\Internet Explorer\\Extensions\\{GUID}");
    LONG lRes = RegCreateKeyExW (HKEY_LOCAL_MACHINE, strPath, 0, 0, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY, 0, &hkOpisatel, 0);
}

0x07L, у меня это не работает smile

Добавлено @ 21:33 
работает с RegCreateKeyEx...
т.е. папку создаёт там ключ, а в этой папке я хочу создать еще несколько String Value 

Автор: 0x07L 18.6.2006, 07:09
Тьфу ты черт. Что у меня вчера было с головой? Правильно, что убрал W.
Но почему не работает с CString. Дебагером смотрел? Может, мусор какой-нибудь туда записывается (все может быть)?
А добавить в созданный ключ параметр можно так:
Код

int APIENTRY _tWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int CmdShow)
{
    HKEY hkOpisatel;

    LPTSTR strPath = _TEXT("Software\\Microsoft\\Internet Explorer\\Extensions\\{GUID}");
    RegCreateKeyEx (HKEY_LOCAL_MACHINE, strPath, 0, 0, REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY | KEY_SET_VALUE, 0, &hkOpisatel, 0);
    
    LPTSTR strValue = _TEXT("String Value");
    RegSetValueEx (
        hkOpisatel, _TEXT("String Parameter"), 0, REG_SZ,
        reinterpret_cast<LPBYTE>(strValue),
        static_cast<DWORD>(_tcslen(strValue))*sizeof(TCHAR)+1);
    RegCloseKey (hkOpisatel);
}
  

Автор: DESert 19.6.2006, 22:26
0x07L, спасибо smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)