win8 写入注册表

注册表写入失败,看到一网友的回帖,记录在此备忘。

代码在win8,64位系统上刷新注册表显示不出来,是因为它写到了Wow6432Node键所对应的键下。
Microsoft® Windows® 64 位技术白皮书
网址:https://www.microsoft.com/china/ ... cover.mspx?mfr=true
知识:
/*********************************
xp下具体的程序在电脑中的位置位于:
HKEY_LOCAL_MACHINE\SOFTWARE
vista中是位于
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
如果你在vista64下面依然访问如下位置,
HKEY_LOCAL_MACHINE\SOFTWARE
你得到的其实就是vista下
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
的列表。
这其中其实是WOW进行了转换。
*********************************/

直接上代码给你,自己去看了。

typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;

BOOL CTestDlg::IsWow64()
{
        BOOL bIsWow64 = FALSE;

        fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
                GetModuleHandle(TEXT("kernel32")),"IsWow64Process");

        if (NULL != fnIsWow64Process)
        {
                if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
                {
                        // handle error
                }
        }
        return bIsWow64;
}

void CTestDlg::SetSelfRun()
{
        HKEY hRoot = HKEY_LOCAL_MACHINE;
        HKEY RegKey;
        TCHAR szPath[MAX_PATH] = {0};
        GetModuleFileName(NULL, szPath, MAX_PATH); 
        REGSAM flag = KEY_WOW64_64KEY; //加入一个标志就行
        /************
        typedef ACCESS_MASK REGSAM;
        typedef DWORD ACCESS_MASK;
        ************/
        if( RegOpenKeyEx(hRoot ,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS|flag, &RegKey) != ERROR_SUCCESS ) 
        {
                MessageBox(_T("打开失败!"));
                return;
        }

        if ( RegSetValueEx(RegKey, _T("www.baidu.com"), 0, REG_SZ, (const BYTE*)szPath, sizeof(szPath)) != ERROR_SUCCESS )
        {
                MessageBox(_T("设置自启动失败!"));
                return;
        }
        RegCloseKey(RegKey); 
}
void CTestDlg::OnBnClickedBtn()//按钮函数测试成功
{
        if (IsWow64()) 
                SetSelfRun();
        else
                MessageBox(_T("运行在32位操作系统上!"));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值