0

我面临两个问题一个大问题和一个小问题:) 问题#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); 

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

4

2 回答 2

3

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

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 听起来不像是正确的变量名称 - 更改它以反映现实。

另外,你应该有这个:

 DWORD BufSize = sizeof(Buffer) - 1;

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

2.从回收站删除一个文件

根据关于 SHFileOperation 的 Microsoft文档,您应该只DeleteFile在文件名上使用,例如C:\$Recycle.Bin\file.txt

  • 当用于删除文件时,SHFileOperation 将永久删除文件,除非您在 lpFileOp 指向的 SHFILEOPSTRUCT 结构的 fFlags 成员中设置 FOF_ALLOWUNDO 标志。设置该标志会将文件发送到回收站。如果您想简单地删除文件并保证它没有放入回收站,请使用 DeleteFile
于 2013-02-04T10:06:47.860 回答
0

要从回收站中删除单个文件,使用SHGetSpecialFolderLocation(CSIDL_BITBUCKET)SHGetKnownFolderIDList(FOLDERID_RecycleBinFolder)获取回收站的绝对PIDL,然后使用SHBindToObject()获取IShellFolder它的接口并调用其ParseDisplayName()方法将所需文件名转换为相对PIDL,然后使用SHBindToObject()获取IContextMenu接口文件并调用其InvokeCommand()方法来执行文件的“删除”动词。

于 2013-02-04T11:21:16.147 回答