注册表查找定位
来源:互联网 发布:linux 显存 编辑:程序博客网 时间:2024/06/06 15:35
参考:http://topic.csdn.net/u/20100627/10/d39caf34-cbcd-41c0-ab60-4ad140250df1.html
原先的代码需要进行修改才能使用,直接使用会报错(什么东西都不能不劳而获吗,呵呵~~),主要是获取注册表编辑器进程窗体句柄、左侧属性控件句柄、还有列表控件句柄,因为在代码中需要操作这些窗体句柄实现注册表键值的查找及定位,所以这些代码必须能真正获取到,否则将导致查找定位失败,改写代码中也就是对上面的三处进行了修改,并修改了一个分割字符串的函数,感觉原先的不好用,就自己写了个(可能原先的我自己没用好,见谅),下面是代码:
class CJumpToRegistry { public: static int SplitString(CString str, CStringArray& strArr,LPTSTR split) { CString strLeft; int nCurPos = 0; strArr.RemoveAll();//清空结果 if (str.IsEmpty() || str.GetLength() <= 0) { return 0; } strLeft = str.Tokenize(split,nCurPos); while (strLeft != _T("")) { strArr.Add(strLeft); strLeft = str.Tokenize(split,nCurPos); } return strArr.GetCount(); } static BOOL JumpToRegistry(LPCTSTR lpszPath, LPCTSTR lpszValue) { CWaitCursor wc; CString strKeyPath(lpszPath); CString strValName(lpszValue); CString strCmd=_T( "regedit.exe "); TRACE1("%s",lpszPath);HWND hTop=NULL; hTop = FindWindow(_T("RegEdit_RegEdit"), NULL );if ( hTop == 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 );hTop = FindWindow(_T("RegEdit_RegEdit"), NULL );}if (hTop==NULL) return FALSE; //前端显示 ::SetWindowPos(hTop,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); //得到TREEVIEW HWND hTree=NULL; { hTree = FindWindowEx( hTop, NULL, _T("SysTreeView32"), NULL );} if (hTree==NULL) return FALSE; //得到listview HWND hList=NULL; { hList = FindWindowEx( hTop, NULL, _T("SysListView32"), NULL );} if (hList==NULL) return FALSE; //选中ROOT结点 ::SendMessage(hTree,WM_SETFOCUS,0,0); ::SendMessage(hTree,WM_KEYDOWN,VK_HOME,0); //展开TREE CStringArray vKeys;int nCount = SplitString(strKeyPath,vKeys,_T("\\"));for (int i=0; i <nCount; ++i) { ::SendMessage(hTree,WM_KEYDOWN,VK_RIGHT,0); CString sSelectKey=vKeys[i]; sSelectKey.MakeUpper(); for (int iLetter=0; iLetter <sSelectKey.GetLength(); ++iLetter) { ::SendMessage(hTree,WM_CHAR,sSelectKey.GetAt(iLetter),0); } } //LISTVIEW定位 ::SendMessage(hList,WM_SETFOCUS,0,0); //选中value Sleep(300); ::SendMessage(hList,WM_KEYDOWN,VK_HOME,0); CString sSelectVal=strValName; sSelectVal.MakeUpper(); for (int iLetter=0; iLetter <sSelectVal.GetLength(); ++iLetter) { ::SendMessage(hList,WM_CHAR,sSelectVal.GetAt(iLetter),0); }return TRUE; } };
使用方式和原先的一样:
用的时候,先包含上面的文件,调用例子:
CJumpToRegistry::JumpToRegistry(_T( "HKEY_LOCAL_MACHINE\\SOFTWARE "), "testsoft ");
CJumpToRegistry::JumpToRegistry(_T( "HKEY_LOCAL_MACHINE\\SOFTWARE "),NULL);
- 注册表查找定位
- 定位注册表
- C# 快速定位注册表
- 注册表键值快速定位
- 注册表定位技巧
- vb查找注册表键值
- 快速定位注册表收藏夹分支
- java 使用命令行查找注册表
- win32 查找注册表找网卡
- bat 批处理 注册表查找,删除
- CListCtrl的查找定位
- 文件的查找定位
- LBS 定位查找附件
- 数组的查找定位
- 定位式查找---哈希表
- AHK-简单实现的注册表定位脚本
- 【4招搞定注册表键值快速定位】
- C#注册表的读,写,删除,查找
- EJB
- Qt多线程编程
- Servlet
- 在myeclipse中启动tomcat自动进入debug
- 0欧电阻作用
- 注册表查找定位
- 注册控件bat
- C#索引器
- 在AIR编写的Android/iOS程序中控制设备方向
- arcgisServer JavascriptAPI下载地址
- 黑马程序员笔记——数据库sql杂碎
- 计时器(4)之获取鼠标所在位置的颜色
- C++的string的用法详解
- 二进制中1的个数