Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [BC++] реест - перейти по адресу, regedit.exe - перейти по ключу 
:(
    Опции темы
MuForum
Дата 12.11.2008, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 4



Доброе время суток!
- Столкнулся со следующей проблемой, мне необходимо открыть редактор реестра и перейти по нужному ключу.
- Пытался следующие комбинации:
Код

        String FileName = "";
        String Key = "HKEY_LOCAL_MACHINE\Software\Microsoft\Shared Tools\MSConfig\startupfolder";
    try
    {
        ShellExecute(NULL, "open", "C:\\windows\\regedit.exe", ("/e " + Key).c_str(), NULL, SW_SHOWNORMAL);
        //ShellExecute(NULL, "open", "C:\\windows\\regedit.exe", PChar(Format("/e \"%s\" \"%s\"", [FileName, Key])), NULL, SW_SHOWNORMAL);
    }
    catch(...) {}

- Открывает только сам редактор, но по ключу не следует.

Это сообщение отредактировал(а) MuForum - 12.11.2008, 01:48


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
mrbrooks
Дата 12.11.2008, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



MuForum, а зачем так изголятьсо когда есть класс TRegistry  smile 
PM MAIL   Вверх
MuForum
Дата 12.11.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 4



Цитата(mrbrooks @ 12.11.2008,  09:22)
MuForum, а зачем так изголятьсо когда есть класс TRegistry  smile

То есть, ты предлагаешь дойти до нужного ключа при помощи класса TRegistry, а окно редактора уже открыть через ShellExec()?

Код

OpenRegEdit(1, "\\Software\\Microsoft\\Shared Tools\\MSConfig\\startupfolder");
...
...
void __fastcall TForm1::OpenRegEdit(int Root, String Key)
{
        TRegistry *pReg = new TRegistry;
        pReg->RootKey = (Root == 0) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE;
        pReg->OpenKey(Key, true);
        // ----
        try
        {
                ShellExecute(NULL, "open", "C:\\windows\\regedit.exe", NULL, NULL, SW_SHOWNORMAL);
        }
        catch(...) {}
        // ----
        pReg->CloseKey();
        delete pReg;
}

- Данный вариант не работает =(

Это сообщение отредактировал(а) MuForum - 12.11.2008, 15:56


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
MuForum
Дата 12.11.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 4



# for all - Не особо мне нравиться этот способ, но другого пока не вижу. (Regedit Jump)

Код

void __fastcall TForm1::OpenRegEdit2(String KeyEdit)
{
        HWND Regedit = FindWindow("RegEdit_RegEdit", NULL), Tree, List;
        if(Regedit == NULL)
        {
                SHELLEXECUTEINFO info;
                ZeroMemory(&info, sizeof(SHELLEXECUTEINFO));
                info.cbSize = sizeof info;
                info.fMask = SEE_MASK_NOCLOSEPROCESS;
                info.lpVerb = "open";
                info.lpFile = "Regedit.exe";
                info.nShow = SW_SHOWNORMAL;
                ShellExecuteEx(&info);
                WaitForInputIdle(info.hProcess, INFINITE);
                Regedit = FindWindow("RegEdit_RegEdit", NULL);
        }
        // ----
        if(Regedit == NULL)
        {
                MessageDlg("nНевозможно запустить Regedit.exe.", mtError, TMsgDlgButtons()<<mbOK, 0);
                return;
        }
        // ----
        ShowWindow(Regedit, SW_MAXIMIZE);
        SetForegroundWindow(Regedit);
        Tree = FindWindowEx(Regedit, NULL, "SysTreeView32", NULL);
        PostMessage(Tree, WM_KEYDOWN, VK_HOME, 0);
        // ----
        DEVMODE dm;
        EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);
        if(dm.dmBitsPerPel > 8) Sleep(500);
        // ----
        char *ch = KeyEdit.c_str();
        for(; *ch; ++ch)
        {
                if(*ch == '\\')
                {
                        PostMessage(Tree, WM_KEYDOWN, VK_RIGHT, 0);
                        if(dm.dmBitsPerPel > 8) Sleep(250);
                }
                else PostMessage(Tree, WM_CHAR, toupper(*ch), 0);
        }
}



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
mrbrooks
Дата 12.11.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



MuForum, а regedit'ом обязательно пользоваться? Я к тому что - используя TRegistry - ты можешь сделать с требуемым ключем все что нужно.
PM MAIL   Вверх
MuForum
Дата 12.11.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 4



Цитата(mrbrooks @ 12.11.2008,  17:18)
MuForum, а regedit'ом обязательно пользоваться? Я к тому что - используя TRegistry - ты можешь сделать с требуемым ключем все что нужно.

Я знаю, но вопрос был поставлен по другому!
- Мне нужно было открыть редактор сразу на указанном ключе.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
mrbrooks
Дата 12.11.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(MuForum @  12.11.2008,  17:20 Найти цитируемый пост)
Я знаю, но вопрос был поставлен по другому!

я его понял так, как я его понял. ок?

PM MAIL   Вверх
YanTsys
Дата 12.11.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 22.3.2006

Репутация: нет
Всего: нет



Цитата(MuForum @ 12.11.2008,  17:20)
Цитата(mrbrooks @ 12.11.2008,  17:18)
MuForum, а regedit'ом обязательно пользоваться? Я к тому что - используя TRegistry - ты можешь сделать с требуемым ключем все что нужно.

Я знаю, но вопрос был поставлен по другому!
- Мне нужно было открыть редактор сразу на указанном ключе.

Откуда у тебя информация что ключ /e это переход к определенной ветви реестра?

/s (импортирует значения из reg-файла без вывода диалогового окна)
/e (экспортирует параметры в reg-файл. Пример: regedit /e myfile.reg
HKEY_USERS\.DEFAULT

Добавлено через 2 минуты и 36 секунд
Нашел описание прикольного способа узнать ключи

Цитата

С какими ключами можно использовать regedit?

Чтобы получить список ключей, с которыми можно использовать regedit, загрузитесь с системной дискеты. Перейдите в каталог, содержащий редактор реестра и в командной строке выполните REGEDIT. На экране отобразится список ключей, используемых regedit`ом.

В отличие от большинства других исполняемых файлов, для вызова справки по regedit не нужно ставить после имени файла обратный слеш со знаком вопроса (/?).

Кроме указанных в справке ключей, есть недокументированный ключ /S, позволяющий выполнять команды без вывода предупреждений. Данный ключ работает только при запуске regedit через Пуск -> Выполнить -> Открыть.


PM MAIL ICQ   Вверх
THandle
Дата 12.11.2008, 21:13 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



Коряво... Но...

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TRegistry *Reg = new TRegistry;
    Reg->RootKey = HKEY_CURRENT_USER;
    Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit", False);
    Reg->WriteString("LastKey", "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Shared Tools\\MSConfig\\startupfolder");
    delete Reg;
    ShellExecute(Handle, "Open", "Regedit.exe", NULL, NULL, SW_SHOW);
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0621 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.