RegQueryInfoKey的问题

在WIN7中发现

RegQueryInfoKey中枚举的子键数目与注册表中看到的不一至,不知道是何原因,记录如下。






#include "stdafx.h"
#include <windows.h>

int main(int argc, char* argv[])
{
	//CString str_path=_T("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost");

	HKEY key;
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost",0,KEY_ENUMERATE_SUB_KEYS|KEY_QUERY_VALUE,&key)==ERROR_SUCCESS)
	{
	}else{
		OutputDebugStringA("RegOpenKeyEx !=ERROR_SUCCESS");
	}
	
	DWORD dwIndex=0,NameSize=0,NameCnt=0,MaxNameLen=0,Type=0;
	DWORD KeySize=0,KeyCnt=0,KeyMaxLen=0,DateSize=0,MaxDateLen=0;
	
	if(RegQueryInfoKey(key,NULL,NULL,NULL,&KeyCnt,&KeyMaxLen,NULL,&NameCnt,&MaxNameLen,&MaxDateLen,NULL,NULL)!=ERROR_SUCCESS)
	{
		OutputDebugStringA("RegQueryInfoKey Error \n");
	}
	printf("这里打印出子键的数目与注册表中看到的不一样是何原因:%d\r\n",KeyCnt);
	getchar();
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在 Windows 中,您可以使用 CreateProcess 函数来创建子进程并运行 exe 文件。以下是一个示例代码: ```c++ #include <windows.h> #include <iostream> #include <string> #include <sstream> using namespace std; int main() { string exePath = "C:\\MyProgram.exe"; // exe 文件路径 string arg1 = "argument1"; // 参数1 string arg2 = "argument2"; // 参数2 // 读取注册表中的空闲串口数量 HKEY hKey; DWORD dwNum = 0; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwNum, NULL, NULL, NULL, NULL); RegCloseKey(hKey); } // 根据空闲串口数量创建对应数量的子进程 for (DWORD i = 0; i < dwNum; i++) { STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; stringstream ss; ss << exePath << " " << arg1 << " " << arg2 << " " << i; // 传递参数 string cmdLine = ss.str(); if (!CreateProcess(NULL, (LPSTR)cmdLine.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { cout << "Failed to create process: " << GetLastError() << endl; } else { cout << "Process created with ID " << pi.dwProcessId << endl; CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } } return 0; } ``` 在上面的示例代码中,我们首先定义了 exe 文件的路径和需要传递的参数。然后,使用 RegOpenKeyEx 函数和 RegQueryInfoKey 函数来读取注册表中的空闲串口数量。接着,使用 CreateProcess 函数根据空闲串口数量创建对应数量的子进程,并将 exe 文件路径和参数传递给子进程。最后,关闭子进程的句柄并结束程序。 请注意,此示例代码仅供参考,并且可能需要进行适当调整才能满足您的需求。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值