darkworks
darkworks

Reputation: 63

How to get Machine id using c++

am facing two problems one big problem and one small problem :) problem # 1 : am unable to read Machine ID from below path ... i get my processor name like intel i7 @2.2ghz like that , i do not know why , i should get machine id , long integer string but i not get it , so please help

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

my registery reading function

   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;
}

second problem : currently i have function which can totally clean recycle bin :)

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

but i want to delete single file from recycle bin like passing filename

Upvotes: 0

Views: 4782

Answers (2)

Remy Lebeau
Remy Lebeau

Reputation: 596352

To delete a single file from the Recycle Bin, use SHGetSpecialFolderLocation(CSIDL_BITBUCKET) or SHGetKnownFolderIDList(FOLDERID_RecycleBinFolder) to get the absolute PIDL of the Recycle Bin, then use SHBindToObject() to get the IShellFolder interface for it and call its ParseDisplayName() method to convert the desired filename into a relative PIDL, then use SHBindToObject() to get the IContextMenu interface for the file and call its InvokeCommand() method to execute the file's "delete" verb.

Upvotes: 0

mvp
mvp

Reputation: 116187

You should really post it as two different questions, but I'll try to answer both.

1. Get MachineGuid

I think your issue is in this line:

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

You should change it to:

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

By the way, dhMHz does not sound like right variable name - change it to reflect reality.

Also, you should have this:

 DWORD BufSize = sizeof(Buffer) - 1;

And, it would be nice to NOT have both buffer and Buffer variables.

2. Delete one file from recycle bin

According to Microsoft documentation on SHFileOperation, you should just use DeleteFile on filename like C:\$Recycle.Bin\file.txt:

  • When used to delete a file, SHFileOperation permanently deletes the file unless you set the FOF_ALLOWUNDO flag in the fFlags member of the SHFILEOPSTRUCT structure pointed to by lpFileOp. Setting that flag sends the file to the Recycle Bin. If you want to simply delete a file and guarantee that it is not placed in the Recycle Bin, use DeleteFile.

Upvotes: 3

Related Questions