regedit jump
От: elGeminy  
Дата: 15.04.06 20:26
Оценка:
Здравствуйте
Здесь немало пробегало, как открыть regedit и выделить ключ/значение
Решил все таки угробить пару часиков и накатать себе утилитку.
В коде ничего нового, что касается самого поиска и выделения, а вот работа с длл взята отсюда
Автор(ы): Сергей Холодилов
Дата: 13.02.2005
В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.


Можт, кому будет полезна
reggo
Re: regedit jump
От: Аноним  
Дата: 15.04.06 20:48
Оценка:
G>Здравствуйте
G>Здесь немало пробегало, как открыть regedit и выделить ключ/значение
G>Решил все таки угробить пару часиков и накатать себе утилитку.
G>В коде ничего нового, что касается самого поиска и выделения, а вот работа с длл взята отсюда
Автор(ы): Сергей Холодилов
Дата: 13.02.2005
В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.


G>Можт, кому будет полезна

G>reggo

Вот как делает это товарищ Bryce Cogswell в своей утилите autoruns на чистом C (раньше была в сорсах)

/******************************************************************************
*
*    FUNCTION:    RegeditJump
*
*    PURPOSE:    Opens Regedit and navigates the desired key
*
*****************************************************************************/
BOOL RegeditJump( const TCHAR * RegPath )
{
    int            pos;
    const TCHAR    * ch;
    HWND        hTreeview, hRegedit;
    TCHAR        *value = _tcsrchr( RegPath, '\\' ) + 1;
    HDC            hdcSceeen = CreateDC( TEXT("DISPLAY"), NULL, NULL, NULL ); 
    DWORD        numColors = GetDeviceCaps( hdcSceeen, NUMCOLORS );

    DeleteDC( hdcSceeen );

    // Open RegEdit
    hRegedit = FindWindow( TEXT("RegEdit_RegEdit"), NULL );
    if ( hRegedit == NULL )  {
        SHELLEXECUTEINFO info;
        memset( &info, 0, sizeof info );
        info.cbSize = sizeof info;
        info.fMask    = SEE_MASK_NOCLOSEPROCESS; 
        info.lpVerb    = TEXT("open"); 
        info.lpFile    = TEXT("regedit.exe"); 
        info.nShow    = SW_SHOWNORMAL; 
        ShellExecuteEx( &info );
        WaitForInputIdle( info.hProcess, INFINITE );
        hRegedit = FindWindow( TEXT("RegEdit_RegEdit"), NULL );
    } 
    if ( hRegedit == NULL )
        return FALSE;

    ShowWindow( hRegedit, SW_SHOW );
    SetForegroundWindow( hRegedit );

    // Get treeview
    hTreeview = FindWindowEx( hRegedit, NULL, TEXT("SysTreeView32"), NULL );
    SetForegroundWindow( hTreeview );
    SetFocus( hTreeview );

    // Close it up
    for ( pos = 0; pos < 30; ++pos )  {
        UINT vk = VK_LEFT;
        SendMessage( hTreeview, WM_KEYDOWN, vk, 0 );
    }

    // wait for slow displays - 
    // Regedit takes a while to open keys with lots of subkeys
    // when running at high color depths 
    if ( numColors > 256 )
        Sleep( 750 ); 

    // Open path
    SendMessage( hTreeview, WM_KEYDOWN, VK_RIGHT, 0 );
    for ( ch = RegPath; ch < value  &&  *ch; ++ch )  {
        if ( *ch == '\\' )  {
            UINT vk = VK_RIGHT;
            SendMessage( hTreeview, WM_KEYDOWN, vk, 0 );

            // wait for slow displays - 
            // Regedit takes a while to open keys with lots of subkeys
            // when running at high color depths 
            if ( numColors > 256 )
                Sleep( 750 ); 

        } else {
            UINT vk = toupper(*ch);

            SendMessage( hTreeview, WM_CHAR, vk, 0 );
        }
    }

    // If its a value select the value
    if ( value ) {
        UINT vk = VK_HOME;

        hTreeview = FindWindowEx( hRegedit, NULL, TEXT("SysListView32"), NULL );
        SetForegroundWindow( hTreeview );
        SetFocus( hTreeview );
        Sleep(1000); // have to wait for Regedit to update listview
        SendMessage( hTreeview, WM_KEYDOWN, vk, 0 );

        for ( ch = value; *ch; ++ch )  {
            UINT vk = toupper(*ch);

            SendMessage( hTreeview, WM_CHAR, vk, 0 );
        }
    }

    SetForegroundWindow( hRegedit );
    SetFocus( hRegedit );
    return TRUE;
}
Re[2]: regedit jump
От: elGeminy  
Дата: 15.04.06 21:07
Оценка:
Здравствуйте, Аноним, Вы писали:

G>>Здравствуйте

G>>Здесь немало пробегало, как открыть regedit и выделить ключ/значение
G>>Решил все таки угробить пару часиков и накатать себе утилитку.
G>>В коде ничего нового, что касается самого поиска и выделения, а вот работа с длл взята отсюда
Автор(ы): Сергей Холодилов
Дата: 13.02.2005
В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.


G>>Можт, кому будет полезна

G>>reggo

А>Вот как делает это товарищ Bryce Cogswell в своей утилите autoruns на чистом C (раньше была в сорсах)


Да знаю, видел. Здесь на РСДН есть еще варианты таких реализаций. Но у меня они не всегда работали, поэтому решил работать напрямую с контролами, без посылки сообщений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.