c++ - 如何使用 C++ 获取机器 ID

标签 c++ winapi

我面临两个问题,一个大问题,一个小问题:) 问题 #1:我无法从下面的路径读取机器 ID ...我得到我的处理器名称像 intel i7 @2.2ghz 那样,我不知道为什么,我应该得到机器 ID,长整数字符串但我不明白, 所以请帮忙

  reg_path="SOFTWARE\\Microsoft\\Cryptography";    
  rvalue="MachineGuid";  // data value

我的注册阅读功能

   string read_reg_sz(char rpath[],char rdata[])    // read registery Loaction
{
    REGSAM flag = KEY_WOW64_32KEY or KEY_WOW64_64KEY; 
    char buffer[MAX];   
    char Buffer[MAX];
    DWORD BufSize = _MAX_PATH;
    char dwMHz[MAX];
    DWORD dataType = REG_SZ;       
    HKEY hKey;
    long lError = RegOpenKeyEx(HKEY_LOCAL_MACHINE,rpath,NULL, KEY_READ | KEY_WRITE | flag,&hKey);
    if(lError != ERROR_SUCCESS)
      {// if the key is not found, tell the user why:
           FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                         NULL,
                         lError,
                         0,
                         Buffer,
                         _MAX_PATH,
                         0);
            cout<<"\n reg erro : "<<Buffer;
           return "N/A";
       }
        // query the key:
        RegQueryValueEx(hKey,rdata,NULL,&dataType,(LPBYTE) &dwMHz,&BufSize);
    RegCloseKey(hKey);  // close open handle ....
    cout<<"\n reg data read: "<<dwMHz;
return dwMHz;
}

第二个问题: 目前我有可以完全清理回收站的功能:)

SHEmptyRecycleBin(NULL, NULL, SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI | SHERB_NOSOUND); 

但是我想从回收站中删除单个文件,比如传递文件名

最佳答案

你真的应该把它作为两个不同的问题发布,但我会尽量回答这两个问题。

1。获取 MachineGuid

我认为您的问题出在这一行:

    // query the key:
    RegQueryValueEx(hKey,rdata,NULL,&dataType,(LPBYTE) &dwMHz,&BufSize);

你应该把它改成:

    // query the key:
    RegQueryValueEx(hKey,rvalue,NULL,&dataType,(LPBYTE) &dwMHz,&BufSize);

顺便说一句,dhMHz 听起来不像是正确的变量名称 - 更改它以反射(reflect)现实。

另外,你应该有这个:

 DWORD BufSize = sizeof(Buffer) - 1;

而且,最好不要同时拥有 bufferBuffer 变量。

2。从回收站中删除一个文件

根据微软documentation在 SHFileOperation 上,你应该只使用 DeleteFile文件名如 C:\$Recycle.Bin\file.txt:

  • 当用于删除文件时,除非您在 lpFileOp 指向的 SHFILEOPSTRUCT 结构的 fFlags 成员中设置 FOF_ALLOWUNDO 标志,否则 SHFileOperation 会永久删除该文件。设置该标志会将文件发送到回收站。 如果您只想删除一个文件并保证它不在回收站中,请使用 DeleteFile

关于c++ - 如何使用 C++ 获取机器 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14683834/

相关文章:

c++ - 为什么在 C++ 中我们使用 DWORD 而不是 unsigned int?

c++ - 当文本位于编辑控件中时,GetWindowTextLength 返回 0

c++ - 尝试 Hook 窗口的窗口过程。 SetWindowsHookEx 失败返回 NULL HHOOK 且 GetLastError 返回错误代码 126

c++ - 初始化一个未知维度的数组

c++ - CComboBox(公共(public)控件 6.0)中的下拉高度错误?

c++ - 在 Qt 中将结构传递给信号

c++ - 在 C++ 中通过类型列表键入访问者

c++ - 在创建线程时无法理解此错误

android - free_heap 中的强指针赋值

c++ - 用 Boost.Python 包装 Eigen 的 operator()() 时的重载分辨率