九阳道人 2020-10-15 17:48 采纳率: 0%
浏览 50

求前辈告知用c\c++或者MFC代码如何打开注册表窗口,并锁定到某一个项的界面?

我使用了ShellExecute()API 找到regedit.exe后能打开注册表窗口,但是他显示的界面不是我想要的 如下图

图片说明

但我想要的界面是他直接显示到SOFTWARE\Microsoft\Windows\CurrentVersion\Run 这个目录里面 如下图

图片说明

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-25 03:51
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要实现这个功能,你需要在你的应用程序中创建一个窗口并加载特定的注册表键。以下是一个基本的示例,展示了如何使用MFC库来创建这样的窗口和加载特定的键。

    首先,确保你已经安装了Microsoft Visual C++ 2019或更高版本。然后,按照以下步骤操作:

    1. 创建一个新的解决方案项目。
    2. 添加必要的头文件和资源。
    3. 编写MFC代码以创建注册表窗口。
    4. 使用ShellExecuteW()函数加载特定的注册表键。
    5. 在应用程序退出时调用卸载函数,确保不会留下任何残留项。

    以下是示例代码:

    #include <windows.h>
    #include <mfc.h>
    
    // 模拟注册表项的名称
    const char* REG_KEY_NAME = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    
    void LoadRegistryKey() {
        // 通过ShellExecuteW()函数打开注册表编辑器窗口
        ShellExecuteW(NULL, L"open", L"regedit", NULL, NULL, SW_SHOWNORMAL);
    }
    
    int main(int argc, wchar_t** argv)
    {
        // 创建注册表窗口
        HINSTANCE hInstance = nullptr;
        WNDCLASS wc;
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = DefWindowProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = GetModuleHandle(nullptr);
        wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
        wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
        wc.hbrBackground = static_cast<HBRUSH>(COLOR_WINDOW + 1);
        wc.lpszMenuName = nullptr;
        wc.lpszClassName = wc.lpszClassName;
        if (!RegisterClass(&wc)) {
            return -1;
        }
    
        // 创建窗口
        HWND hWnd = CreateWindow(wc.lpszClassName, L"Test Registry Window", WS_OVERLAPPEDWINDOW,
                                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                                nullptr, nullptr, hInstance, nullptr);
    
        // 设置标题
        SetWindowText(hWnd, L"Test Registry Window");
    
        // 获取焦点
        SetFocus(hWnd);
    
        // 避免窗口被最小化
        ShowWindow(hWnd, SW_SHOW);
    
        // 初始化窗口位置
        POINT pt;
        GetCursorPos(&pt);
        int x = pt.x;
        int y = pt.y;
    
        // 将焦点移动到新位置
        MoveWindow(hWnd, x, y, 640, 480, TRUE);
    
        // 加载特定的注册表键
        LoadRegistryKey();
    
        // 关闭窗口
        DestroyWindow(hWnd);
    
        return 0;
    }
    

    注意:这段代码只是一个简单的示例,实际使用时可能需要根据具体需求进行调整。例如,你可能需要添加错误处理、响应用户输入等额外功能。此外,由于这是一个模拟的例子,实际运行时可能无法完全满足需求。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵