吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2147|回复: 13
收起左侧

[求助] c++调用win32 api 函数无法修改win10系统计算机名称

  [复制链接]
xiaomayi2012 发表于 2020-11-22 21:40
c++调用win32 api 函数 setComputerName()用于修改win10系统的计算机名称,但修改完后重启计算机,发现名称没有改变,但是在win7 32位系统下就可以更改成功。请教这是什么原因造成的。
以下是从网上找的代码
[C++] 纯文本查看 复制代码
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

//获取计算机名称
wstring getComputerName() {
	DWORD size = 0;
	wstring wstr;
	GetComputerName(NULL, &size); //得到电脑名称长度
	wchar_t *name = new wchar_t[size];
	if (GetComputerName(name, &size)) {
		wstr = name;
	}
	delete[] name;
	return wstr;
}


//设置计算机名称
bool setComputerName(string pcName) {
	if (!pcName.length())
		return false;
	size_t size = pcName.length();
	wchar_t *buffer = new wchar_t[size + 1];
	MultiByteToWideChar(CP_ACP, 0, pcName.c_str(), size, buffer, size * sizeof(wchar_t));
	buffer[size] = 0;
	bool isOk = SetComputerNameEx(ComputerNamePhysicalDnsHostname, buffer);
	delete[] buffer;
	return isOk;
}

void getInput(string title, string &arg) {
	cout << title << endl;
	getline(cin, arg);
}

//打印基本信息
void view_welcome() {
	//设置字体背景色红色
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED);
	printf("******************修改工具v1.0*****************\n");
	printf("	            作者:wangtong	               \n\n");
	printf("-------------------包含功能--------------------\n");
	printf("【修改计算机名】--【修改IP】--【修改子网掩码】 \n");
	printf("-----------------------------------------------\n\n\n");
	//设置字体颜色 绿色
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
}
/**
*确认语句
例子:yOrN(“确认要修改以上信息吗?”)
输出:确认要修改以上信息吗?(y/n)
**/
bool yOrN(string desc) {

	cout << desc << "(y/n)";
	int ch = getchar();
	ch = toupper(ch);
	getchar();//这句的作用是清空缓冲区-回车键换行符10
	if (ch == 'Y') {
		return true;
	}
	return false;
}
//修改IP和掩码。调用dos命令
void modifyIpAndMask(string ip, string mask) {
	if (ip.length() == 0 || mask.length() == 0)
		return;
	string cmd = "netsh interface ip set address name=本地连接 static ";
	cmd += ip + " " + mask;
	system(cmd.c_str());
}
//修改电脑主机名,调用windowAPI
bool modifyPCName(string pcName) {

	if (setComputerName(pcName)) {
		return true;
	}
	else {
		printf("Error  %d\n", GetLastError());
		return false;
	}

}

int main() {
	view_welcome();
	wcout << "【ComputerName】" << getComputerName() << endl;
	string pcName;
	string mask;
	string ip;
	getInput("Please enter a new computer name(Enter the default does not change)", pcName);
	getInput("请输入新的ip(回车默认不改)", ip);
	if (ip.length()) {
		getInput("Please enter a new IP(回车默认255.255.255.0)", mask);
		if (!mask.length()) {
			mask = "255.255.255.0";
		}
	}
	if (ip.length() || pcName.length()) {
		printf("您修改了如下信息:\n");
		if (ip.length())
			cout << "【ip地址】:" + ip << "\n【子网掩码】:" + mask << endl;
		if (pcName.length())
			cout << "【ComputerName】:" + pcName << endl;
		if (yOrN("确认要修改以上信息吗?")) {
			if (ip.length())
				modifyIpAndMask(ip, mask);
			if (pcName.length()) {
				if (modifyPCName(pcName)) {
					printf("修改成功,重启后生效\n");
					if (yOrN("现在要重启吗?回车默认不重启!")) {
						system("shutdown /r /t 0");
					}
				}
				else {
					printf("修改计算机名发生错误\n");
				}
			}

		}
	}
	printf("按任意键退出!");
	_getch();
	return 0;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

邪恶海盗 发表于 2020-11-22 21:55
我之前好像是通过修改注册表能改名的...
 楼主| xiaomayi2012 发表于 2020-11-22 21:58
邪恶海盗 发表于 2020-11-22 21:55
我之前好像是通过修改注册表能改名的...

通过api不行吗?不知道和修改注册表这两者修改后效果有不同吗
repobor 发表于 2020-11-22 22:23
 楼主| xiaomayi2012 发表于 2020-11-22 22:28

额,,有可能哈。。。
tanlijing 发表于 2020-11-22 22:46
大佬太强了吧
邪恶海盗 发表于 2020-11-22 23:11
xiaomayi2012 发表于 2020-11-22 21:58
通过api不行吗?不知道和修改注册表这两者修改后效果有不同吗

忘记了,好久没玩这个了...
Rodriguezs 发表于 2020-11-23 01:09
用管理员登录打开程序试过没?
fanvalen 发表于 2020-11-23 02:09
可能系统版本不对位,32位只能32系统,64位要64。
还有可能就是win10 api变更了
 楼主| xiaomayi2012 发表于 2020-11-28 09:28
Rodriguezs 发表于 2020-11-23 01:09
用管理员登录打开程序试过没?

测试了 确实 是管理员问题,,必须以管理员模式运行才可以。。感谢提醒~!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 11:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表