- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题与c++有关,有多种变体,但我正在尝试在C中使用注册表函数。我知道包括,那么为什么它没有看到RegGetValue()。它是C++独有的吗?有没有办法在C中使用它?
这是我发现的一些代码,我试图用它来测试将显示的内容。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <Windows.h>
#include <errno.h>
#define BUFFER 8192
int main()
{
char value[255];
DWORD BufferSize = BUFFER;
RegGetValue(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
"RegisteredOwner",
RRF_RT_ANY | RRF_SUBKEY_WOW6464KEY,
NULL,
(PVOID)&value,
&BufferSize);
printf("\n%s\n", value);
system("pause");
return 0;
}
我是这样编译的
gcc -Wall RegistryParser.c -o RegistryParser.exe
我收到此警告和错误
RegistryParser.c:在函数“main”中:RegistryParser.c:26:2:警告:函数“RegGetValue”的隐式声明[-Wimplicit-function-declaration] RegGetValue(HKEY_LOCAL_MACHINE, ^~~~~~~~~~~
RegistryParser.c:29:3:错误:“RRF_RT_ANY”未声明(在此函数中首次使用) RRF_RT_ANY | RRF_SUBKEY_WOW6464KEY, ^~~~~~~~~~RegistryParser.c:29:3:注意:每个未声明的标识符对于它出现的每个函数仅报告一次
RegistryParser.c:29:16:错误:“RRF_SUBKEY_WOW6464KEY”未声明(在此函数中首次使用) RRF_RT_ANY | RRF_SUBKEY_WOW6464KEY, ^~~~~~~~~~~~~~~~~~~~~
最佳答案
我明白了我的问题是什么。这是我的编译器。简短而甜蜜的是我更新了 C:\MinGW\include
文件夹
[1] 前往 https://sourceforge.net/projects/mingw-w64/files/
[2] 单击MinGW-W64-install.exe
。保存并运行
[3] 然后从 C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\x86_64-w64-mingw32\复制“include”文件夹include
(这就是我的默认位置)到 C:\MinGW
覆盖了所有 header (在详细信息部分解释了这种愚蠢的情况)
我认为我的问题中的代码会起作用,因为 https://learn.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-reggetvaluew 中的信息。我正在查看 Windows 套件 C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\Windows.h
中的 header ,其中包含代码块
#if !defined(_MAC) || defined(_WIN32REG)
#include <winreg.h>
#endif
和C:\Program Files(x86)\Windows Kits\10\Include\10.0.17763.0\um\winreg.h
有代码
//
// RRF - Registry Routine Flags (for RegGetValue)
//
#define RRF_RT_REG_NONE 0x00000001 // restrict type to REG_NONE (other data types will not return ERROR_SUCCESS)
#define RRF_RT_REG_SZ 0x00000002 // restrict type to REG_SZ (other data types will not return ERROR_SUCCESS) (automatically converts REG_EXPAND_SZ to REG_SZ unless RRF_NOEXPAND is specified)
#define RRF_RT_REG_EXPAND_SZ 0x00000004 // restrict type to REG_EXPAND_SZ (other data types will not return ERROR_SUCCESS) (must specify RRF_NOEXPAND or RegGetValue will fail with ERROR_INVALID_PARAMETER)
#define RRF_RT_REG_BINARY 0x00000008 // restrict type to REG_BINARY (other data types will not return ERROR_SUCCESS)
#define RRF_RT_REG_DWORD 0x00000010 // restrict type to REG_DWORD (other data types will not return ERROR_SUCCESS)
#define RRF_RT_REG_MULTI_SZ 0x00000020 // restrict type to REG_MULTI_SZ (other data types will not return ERROR_SUCCESS)
#define RRF_RT_REG_QWORD 0x00000040 // restrict type to REG_QWORD (other data types will not return ERROR_SUCCESS)
#define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD) // restrict type to *32-bit* RRF_RT_REG_BINARY or RRF_RT_REG_DWORD (other data types will not return ERROR_SUCCESS)
#define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD) // restrict type to *64-bit* RRF_RT_REG_BINARY or RRF_RT_REG_DWORD (other data types will not return ERROR_SUCCESS)
#define RRF_RT_ANY 0x0000ffff // no type restriction
#if (_WIN32_WINNT >= _WIN32_WINNT_WINTHRESHOLD)
#define RRF_SUBKEY_WOW6464KEY 0x00010000 // when opening the subkey (if provided) force open from the 64bit location (only one SUBKEY_WOW64* flag can be set or RegGetValue will fail with ERROR_INVALID_PARAMETER)
#define RRF_SUBKEY_WOW6432KEY 0x00020000 // when opening the subkey (if provided) force open from the 32bit location (only one SUBKEY_WOW64* flag can be set or RegGetValue will fail with ERROR_INVALID_PARAMETER)
#define RRF_WOW64_MASK 0x00030000
#endif
#define RRF_NOEXPAND 0x10000000 // do not automatically expand environment strings if value is of type REG_EXPAND_SZ
#define RRF_ZEROONFAILURE 0x20000000 // if pvData is not NULL, set content to all zeros on failure
...更多代码,然后
#if (_WIN32_WINNT >= 0x0502)
WINADVAPI
LSTATUS
APIENTRY
RegGetValueA(
_In_ HKEY hkey,
_In_opt_ LPCSTR lpSubKey,
_In_opt_ LPCSTR lpValue,
_In_ DWORD dwFlags,
_Out_opt_ LPDWORD pdwType,
_When_((dwFlags & 0x7F) == RRF_RT_REG_SZ ||
(dwFlags & 0x7F) == RRF_RT_REG_EXPAND_SZ ||
(dwFlags & 0x7F) == (RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ) ||
*pdwType == REG_SZ ||
*pdwType == REG_EXPAND_SZ, _Post_z_)
_When_((dwFlags & 0x7F) == RRF_RT_REG_MULTI_SZ ||
*pdwType == REG_MULTI_SZ, _Post_ _NullNull_terminated_)
_Out_writes_bytes_to_opt_(*pcbData,*pcbData) PVOID pvData,
_Inout_opt_ LPDWORD pcbData
);
WINADVAPI
LSTATUS
APIENTRY
RegGetValueW(
_In_ HKEY hkey,
_In_opt_ LPCWSTR lpSubKey,
_In_opt_ LPCWSTR lpValue,
_In_ DWORD dwFlags,
_Out_opt_ LPDWORD pdwType,
_When_((dwFlags & 0x7F) == RRF_RT_REG_SZ ||
(dwFlags & 0x7F) == RRF_RT_REG_EXPAND_SZ ||
(dwFlags & 0x7F) == (RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ) ||
*pdwType == REG_SZ ||
*pdwType == REG_EXPAND_SZ, _Post_z_)
_When_((dwFlags & 0x7F) == RRF_RT_REG_MULTI_SZ ||
*pdwType == REG_MULTI_SZ, _Post_ _NullNull_terminated_)
_Out_writes_bytes_to_opt_(*pcbData,*pcbData) PVOID pvData,
_Inout_opt_ LPDWORD pcbData
);
#ifdef UNICODE
#define RegGetValue RegGetValueW
#else
#define RegGetValue RegGetValueA
#endif
但是,由于我使用的是 MinGW gcc,MinGW 在包含文件夹中使用自己修改的 header 。如果您将其保存在默认路径 C:\MinGW\include
中。因此,它会查看其 C:\MinGW\include
文件夹中的 header ,并且其 C:\MinGW\include\winreg.h
中没有 RegGetValue()
函数。
我会显示原始 C:\MinGW\include\winreg.h
header 中的内容,但我已经覆盖了它。
因此,我在前面提到的网站上获取了 MinGW 的更新版本,并尝试按照步骤编辑“系统变量”来更新路径。我删除了 C:\MinGW\bin 的路径以添加新的路径路径
C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin
C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\x86_64-w64-mingw32\bin
C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\opt\bin
我仍然有编译警告和错误,所以当时我只想到 MinGW\include
文件夹中我需要的 header 。所以我删除了新路径并将路径放回 C:\MinGW\bin。并做了我在帖子开头提到的事情。我必须修改我的代码并删除“| RRF_SUBKEY_WOW6464KEY”,因为 MinGW 的 winreg.h
中没有定义它,但其他一切都是相同的,它编译时没有警告或错误,并返回我所期望的结果.
很抱歉这篇文章很长。
关于c - RegGetValue(), header <winreg.h> 在 c 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59016114/
我正在测试这个功能::RegGetValue .下面的代码返回成功。 DWORD data_size = 0; LONG result = ::RegGetValue(HKEY_LOCAL_MACHI
我正在尝试用 C++ 编写(我认为会是)一个简单的脚本来搜索注册表(特别是 SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)并返回 Displa
假设您要开发一个函数,给定一个有效的注册表项句柄和一个值名称,如果输入项下存在该值,则返回 true,如果不存在,则返回 false它不会,并在所有其他情况下抛出 C++ 异常。 bool RegVa
我试图了解如何在 WinApi 中使用 PVOID 数据类型,因此我尝试使用 RegGetValue 函数显示一个名为 MyValue 的值(它是一个 DWORD 值),但它对我不起作用。 这是我的代
在某些代码中,我使用了 Win32 RegGetValue()从注册表中读取字符串的 API。 我两次调用上述 API: 第一次调用的目的是获得合适的大小,以便为字符串分配目标缓冲区。 第二次调用从注
注册表函数在确实存在的键上返回“未找到”。我有正确的字符集并使用双反斜杠,所以这不是问题。 这是导出 key 的输出: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\N
这个问题与c++有关,有多种变体,但我正在尝试在C中使用注册表函数。我知道包括,那么为什么它没有看到RegGetValue()。它是C++独有的吗?有没有办法在C中使用它? 这是我发现的一些代码,我试
Reading the Windows registry key "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" using RegGetValue()
我是一名优秀的程序员,十分优秀!