www.pudn.com > 44w.rar > RegJump.cpp
#include#include #include "AccessEnum.h" #include "Enumeration.h" /****************************************************************************** * * FUNCTION: RegeditJump * * PURPOSE: Opens Regedit and navigates the desired key * *****************************************************************************/ void RegeditJump( HWND hWnd, const TCHAR * path ) { TCHAR * ch; TCHAR * value = NULL; TCHAR RegPath[ MAX_PATH ] = _T("\\"); const TCHAR * FullName = NULL; // convert to full path HKEY hKey = CRegEnumeration::OpenPath( path, &FullName ); if ( hKey ) RegCloseKey( hKey ); // get full path name TCHAR * ptr = _tcschr( path, '\\' ); if ( ptr ) ++ptr; else ptr = _T(""); _stprintf( RegPath, _T("\\%s\\%s"), FullName, ptr ); // Open RegEdit HWND regeditMainHwnd = FindWindow( _T("RegEdit_RegEdit"), NULL ); if ( regeditMainHwnd == NULL ) { SHELLEXECUTEINFO info; memset( &info, 0, sizeof info ); info.cbSize = sizeof info; info.fMask = SEE_MASK_NOCLOSEPROCESS; info.lpVerb = _T("open"); info.lpFile = _T("regedit.exe"); info.nShow = SW_SHOWNORMAL; ShellExecuteEx( &info ); WaitForInputIdle( info.hProcess, INFINITE ); regeditMainHwnd = FindWindow( _T("RegEdit_RegEdit"), NULL ); } if ( regeditMainHwnd == NULL ) { MessageBox( hWnd, APPNAME _T(" was unable to launch Regedit."), APPNAME, MB_OK|MB_ICONERROR ); return; } ShowWindow( regeditMainHwnd, SW_SHOW ); SetForegroundWindow( regeditMainHwnd ); // Get treeview HWND regeditHwnd = FindWindowEx( regeditMainHwnd, NULL, _T("SysTreeView32"), NULL ); SetForegroundWindow( regeditHwnd ); SetFocus( regeditHwnd ); DWORD ProcessID = 0; GetWindowThreadProcessId( regeditHwnd, &ProcessID ); HANDLE hProcess = OpenProcess( SYNCHRONIZE, false, ProcessID ); // Close it up for ( int pos = 0; pos < 30; ++pos ) { SendMessage( regeditHwnd, WM_KEYDOWN, VK_LEFT, 0 ); } // wait for slow displays WaitForInputIdle( hProcess, INFINITE ); // Open path for ( ch = RegPath; *ch; ++ch ) { if ( *ch == '\\' ) { UINT vk = VK_RIGHT; SendMessage( regeditHwnd, WM_KEYDOWN, vk, 0 ); // wait for slow displays WaitForInputIdle( hProcess, INFINITE ); } else { UINT vk = toupper(*ch); SendMessage( regeditHwnd, WM_CHAR, vk, 0 ); } } SetForegroundWindow( regeditMainHwnd ); SetFocus( regeditMainHwnd ); CloseHandle( hProcess ); }