Здравствуйте
Здесь немало пробегало, как открыть regedit и выделить ключ/значение
Решил все таки угробить пару часиков и накатать себе утилитку.
В коде ничего нового, что касается самого поиска и выделения, а вот работа с длл взята
отсюдаАвтор(ы): Сергей Холодилов
Дата: 13.02.2005
В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.
Можт, кому будет полезна
reggo
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;
}
Здравствуйте, Аноним, Вы писали:
G>>Здравствуйте
G>>Здесь немало пробегало, как открыть regedit и выделить ключ/значение
G>>Решил все таки угробить пару часиков и накатать себе утилитку.
G>>В коде ничего нового, что касается самого поиска и выделения, а вот работа с длл взята отсюдаАвтор(ы): Сергей Холодилов
Дата: 13.02.2005
В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.
G>>Можт, кому будет полезна
G>>reggo
А>Вот как делает это товарищ Bryce Cogswell в своей утилите autoruns на чистом C (раньше была в сорсах)
Да знаю, видел. Здесь на РСДН есть еще варианты таких реализаций. Но у меня они не всегда работали, поэтому решил работать напрямую с контролами, без посылки сообщений