QT中如何获取硬盘ID

HELLOWORLD319 2012-02-13 01:45:01
如题
...全文
837 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
HELLOWORLD319 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xiachm 的回复:]

C/C++ code

QString lpRootPathName = "C:\\";
LPTSTR lpVolumeNameBuffer=new TCHAR[12];//磁盘卷标
DWORD nVolumeNameSize=12;// 卷标的字符串长度
DWORD VolumeSerialNumber;//硬盘序列号
DWORD MaximumCom……
[/Quote]
太感谢您了,总算出来个号码了。但是就像其他人说的,这个看起来不像是硬盘序列号,而是磁盘序列号。但至少够我用了。谢谢您
xiachm 2012-02-13
  • 打赏
  • 举报
回复

QString lpRootPathName = "C:\\";
LPTSTR lpVolumeNameBuffer=new TCHAR[12];//磁盘卷标
DWORD nVolumeNameSize=12;// 卷标的字符串长度
DWORD VolumeSerialNumber;//硬盘序列号
DWORD MaximumComponentLength;// 最大的文件长度
LPTSTR lpFileSystemNameBuffer=new TCHAR[10];// 存储所在盘符的分区类型的长指针变量
DWORD nFileSystemNameSize=10;// 分区类型的长指针变量所指向的字符串长度
DWORD FileSystemFlags;// 文件系统的一此标志

GetVolumeInformation((LPTSTR)lpRootPathName.utf16(),
lpVolumeNameBuffer, nVolumeNameSize,
&VolumeSerialNumber, &MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize);

qDebug() << VolumeSerialNumber;


需要#include <windows.h>
HELLOWORLD319 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiachm 的回复:]

引用 7 楼 pzhuyy 的回复:

不可以直接这样使用的吧,你可以用vc生成一个dll,获取相应的字符串,然后在qt中调用。

Qt代码可以和Win32 API完美共生,MinGW编译器一样可以。只要包含头文件windows.h,楼主的代码在我这里已经调通了。
[/Quote]

我都快绝望了,用VC编的也通不过,好久没用过了。大侠发给我一份吧。319guantou@163.com
xiachm 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pzhuyy 的回复:]

不可以直接这样使用的吧,你可以用vc生成一个dll,获取相应的字符串,然后在qt中调用。
[/Quote]
Qt代码可以和Win32 API完美共生,MinGW编译器一样可以。只要包含头文件windows.h,楼主的代码在我这里已经调通了。
xiachm 2012-02-13
  • 打赏
  • 举报
回复
关于QString和LPTSTR之间的转换,可以从网上搜到呀。

QString src;
LPTSTR dest=(LPTSTR)src.utf16;
pzhuyy 2012-02-13
  • 打赏
  • 举报
回复
不可以直接这样使用的吧,你可以用vc生成一个dll,获取相应的字符串,然后在qt中调用。
HELLOWORLD319 2012-02-13
  • 打赏
  • 举报
回复
而且QT中那个函数是GetVolumeInformationA和GetVolumeInformationW
HELLOWORLD319 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiachm 的回复:]

楼主不要搜Qt的相关东西了,应该没有。查查Win32 API吧。
[/Quote]
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // 硬盘的路径
LPTSTR lpVolumeNameBuffer, // 硬盘的卷标
DWORD nVolumeNameSize, // 卷标的字符串长度
LPDWORD lpVolumeSerialNumber, // 硬盘的序列号
LPDWORD lpMaximumComponentLength, // 最大的文件长度
LPDWORD lpFileSystemFlags, // 文件系统的一此标志
LPTSTR lpFileSystemNameBuffer, // 存储所在盘符的分区类型的长指针变量
DWORD nFileSystemNameSize // 分区类型的长指针变量所指向的字符串长度
);
如果上述函数成功就返回一个非0值。

首选用MFC AppWizard建立一个基于Dialog base的对话框工程,名为GetHardID,点击finish。
加一个按钮,双击它,点击ok,并在对应的函数中加入如下代码:
LPCTSTR lpRootPathName="c:\\"; //取C盘
LPTSTR lpVolumeNameBuffer=new char[12];//磁盘卷标
DWORD nVolumeNameSize=12;// 卷标的字符串长度
DWORD VolumeSerialNumber;//硬盘序列号
DWORD MaximumComponentLength;// 最大的文件长度
LPTSTR lpFileSystemNameBuffer=new char[10];// 存储所在盘符的分区类型的长指针变量
DWORD nFileSystemNameSize=10;// 分区类型的长指针变量所指向的字符串长度
DWORD FileSystemFlags;// 文件系统的一此标志
::GetVolumeInformation(lpRootPathName,
lpVolumeNameBuffer, nVolumeNameSize,
&VolumeSerialNumber, &MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize);

CString str;
str.Format("Seria Num is %lx ",VolumeSerialNumber);
AfxMessageBox(str);


在QT的环境中加入这些代码,会有错误,LPTSTR和char之间的转换有问题,实在是不会了。
xiachm 2012-02-13
  • 打赏
  • 举报
回复
楼主不要搜Qt的相关东西了,应该没有。查查Win32 API吧。
pzhuyy 2012-02-13
  • 打赏
  • 举报
回复
没看见现成的方案,作个win和linux的判断,分别针对不同平台用相应平台下代码。
HELLOWORLD319 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiachm 的回复:]

Qt好像没这功能吧,应该使用本地的API
[/Quote]
那应该怎么用啊?不管什么办法,只要我的QT程序能获得硬盘ID就行了
xiachm 2012-02-13
  • 打赏
  • 举报
回复
Qt好像没这功能吧,应该使用本地的API

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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