关于注册表的问题

command1980 2003-12-03 10:25:02
在看到vc技术内幕注册表着一块时,书上说SetRegistryKey()函数能在HKEY_CURRENT_USER\SoftWare\.... 下面建立一个根级目录,并且设置CWinApp的成员m_pszRegistryKey,以使CWinApp的成员函数GetProfileInt GetProfileString WriteProfileInt WriteProfileString能根据m_pszRegistryKey来读写注册表.

但是程序执行时,却在根级目录下又建立了一个程序目录, 所以用CWinApp的成员函数读写注册表时,总是找不到正确的位置,请问这是怎么回事?
...全文
31 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
command1980 2003-12-03
  • 打赏
  • 举报
回复
我没有自己再调用,只是在我派生的CMyApp里面的InitInstance()函数里面调用了

mfc默认的是SetRegistryKey(_T("Local AppWizard-Generated Applications"));

但每次执行完后,就在Local AppWizard-Generated Applications目录下, 又新建了一个我

的应用程序的名字,当我用WriteProfileString 等函数协注册表时,都写在了他的下面

但读的时候就读不到了,系统只是去Local AppWizard-Generated Applications目录下

读!!
ggw007 2003-12-03
  • 打赏
  • 举报
回复
用MFC生成的程序中已调用了SetRegistryKey()函数,不用自己在程序中调用。
如果你再调用一次就在根级目录下又建一程序目录
xiaohedou 2003-12-03
  • 打赏
  • 举报
回复
这是在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run下建立一个abc的键值

void MyAbcReg(void)
{
//定义注册表根关键字及子关键字
HKEY hkRoot,hSubKey;
char sTmp[256];
char szProductType[80];
DWORD dwBufLen;
#ifdef _DEBUG
LPVOID lpMsgBuf;
#endif

ZeroMemory(szProductType, sizeof(szProductType));
//打开注册表根关键字
if(RegOpenKey(HKEY_LOCAL_MACHINE,NULL,&hkRoot)==ERROR_SUCCESS)
{
//打开子关键字
if(RegOpenKeyEx(hkRoot,
"Software\\Microsoft\\Windows\\CurrentVersion\\Run",
0,
KEY_ALL_ACCESS,
&hSubKey)==ERROR_SUCCESS)
{
if(RegQueryValueEx( hSubKey, "abc", NULL, NULL,(LPBYTE) szProductType, &dwBufLen)!=ERROR_SUCCESS)
{
#ifdef _DEBUG
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL );
// Process any inserts in lpMsgBuf.
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "提示", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
#endif

//wsprintf(sTmp,"Software\\Microsoft\\Windows\\CurrentVersion\\Run\\abc");
//RegCreateKeyEx (HKEY_LOCAL_MACHINE,sTmp,0,"",0,KEY_ALL_ACCESS, NULL, &hKey, &res); 这句可以建立子键
wsprintf(sTmp,"c:\\Program Files\\BC\\Gps Clock\\GpsClock.exe");
if(RegSetValueEx (hSubKey, "abc", 0, REG_SZ,(CONST BYTE *)sTmp,strlen(sTmp)+1)!=ERROR_SUCCESS)
AfxMessageBox("注册失败!");
}
}
}
//关闭注册表
RegCloseKey(hSubKey);
RegCloseKey(hkRoot);
}
command1980 2003-12-03
  • 打赏
  • 举报
回复
快帮忙啊

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧