使用GetVolumeInformation后char()ASCII码转为字符成乱码

huazi9999 2018-03-14 05:07:24
MT4-统19-2统3-58统-74

本该是字母的成乱码了



fastcall TForm7::TForm7(TComponent* Owner)
: TForm(Owner)
{

String DiskLabel,RefDisk,str1,str;
unsigned long HDSerial;

long long SerialNum;
if(DirectoryExists("c:\\"))
{ RefDisk="c:\\";
}

else
{

RefDisk="D:\\";
}

GetVolumeInformation(RefDisk.w_str(),DiskLabel.w_str(),15,&HDSerial,0,0,NULL,0);
SerialNum=HDSerial;
Edit1->Text=GenMachineID(SerialNum);
str1=GetRegCode(SerialNum,str);
Edit2->Text=str;




}

String GenMachineID(long long SerialNum)
{
long long SN;
String MID,tmp1,tmp2;
if(SerialNum>19920110)
SN=SerialNum-19920110;
else SN=19920110-SerialNum;
tmp1=IntToStr(SN);
while(tmp1.Length()>3)
{

tmp2=tmp1.SubString(1,3);
tmp1=tmp1.Delete(1,3);
MID=MID+char(65+StrToInt(tmp2)*24/999)+tmp2;

}
MID=MID+char(65+StrToInt(tmp1)*24/999)+tmp1;
tmp1=MID;
MID="";

while(tmp1.Length()>3)
{
tmp2=tmp1.SubString(1,3);
tmp1=tmp1.Delete(1,3);
MID=MID+tmp2+"-";
}

MID=MID+tmp1;
if (SerialNum > 19920110)
MID="7A9-"+MID;
else MID="MT4-"+MID;
return MID;


}













...全文
446 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongss 2018-03-15
  • 打赏
  • 举报
回复
我这里倒是没出现乱码,但放在Button下和构造函数里结果不一样~~~~ 试试这个,是不是你想要的
	 WideString DiskLabel,RefDisk,str1,str;
	 unsigned long  HDSerial;

	  long long SerialNum;
	  if(DirectoryExists("c:\\"))
	   { RefDisk="c:\\";
		}

	   else
	   {

			RefDisk="D:\\";
	   }

	  GetVolumeInformation(RefDisk.c_bstr(),DiskLabel.c_bstr(),15,&HDSerial,0,0,NULL,0);
	  SerialNum=HDSerial;
	  Edit1->Text=GenMachineID(SerialNum);

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧