调用C函数获取电脑信息及执行cmd命令时隐藏窗口

这篇博客介绍了如何在C/C++中调用函数获取电脑详细信息,包括操作系统、CPU、内存、GPU和硬件连接状态等,并在执行CMD命令时隐藏窗口,提供了一种无界面获取系统数据的方法。
摘要由CSDN通过智能技术生成

GetPCInfo.h

#include <iostream> 
#include <string>
using namespace std;

//
wstring Str2Wstr(string str);
string ExecCmd(const char *cmd);							// 执行 cmd 命令
void GetResultFromCmd(string & str);						// 得到结果
//

void getNetworkInfo(char *local_ip, char *local_mac);		// 获取IP、MAC

string GetPCInfo();		// 获取电脑相关信息

string GetCurrentDir();

//
// 获取两个日期的时间差
time_t convert(int year,int month,int day);
int get_days(const char* from, const char* to);
//

GetPCInfo.cpp

#include <iostream> 
#include <string>
#include <winsock2.h> // include must before window.h
#include <iphlpapi.h>
#include <windows.h>  
#include <DXGI.h>  
#include <vector>  
 
#pragma comment(lib, "iphlpapi.lib")

using namespace std;

// ---- get harddisk info ---- //
wstring Str2Wstr(string str)
{
	unsigned len = str.size() * 2;// 预留字节数
	setlocale(LC_CTYPE, "");     //必须调用此函数
	wchar_t *p = new wchar_t[len];// 申请一段内存存放转换后的字符串
	mbstowcs(p, str.c_str(), len);// 转换
	std::wstring str1(p);
	delete[] p;// 释放申请的内存
	return str1;
}

string ExecCmd(string pszCmd)
{
	wstring pszCmd_w = Str2Wstr(pszCmd);
	wcout << "pszCmd_w is " << pszCmd_w << endl;

	// 创建匿名管道,write->read;
	SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
	HANDLE hRead, hWrite;
	if (!CreatePipe(&hRead, &hWrite, &sa, 0))
	{
		cout << "@ CreatePipe failed!" << endl;
		return (" ");
	}
	cout << "@0" << endl;

	// 设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWrite
	STARTUPINFO si = { sizeof(STARTUPINFO) }; // Pointer to STARTUPINFO structure;
	GetStartupInfo(&si);
	si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
	//si.dwFlags = STARTF_USESHOWWINDOW;
	si.wShowWindow = SW_HIDE; //隐藏窗口;
	si.hStdError = hWrite;
	si.hStdError = hWrite;
	si.hStdOutput = hWrite; //管道的输入端口连接命令行的输出;

	// 启动命令行
	PROCESS_INFORMATION pi;// Pointer to PROCESS_INFORMATIO
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值