am面临两个问题——一个大问题和一个小问题:)问题#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听起来不像是一个正确的变量名称——改变它以反映现实。
此外,你应该有这个:
DWORD BufSize = sizeof(Buffer) - 1;
并且,最好不要同时具有buffer
和Buffer
变量。
2.从回收站删除一个文件
根据微软关于SHFileOperation的文档,你应该只在文件名上使用DeleteFile
,比如C:$Recycle.Binfile.txt
:
- 用于删除文件时,除非在lpFileOp指向的SHFILEOPSTRUCT结构的fFlags成员中设置了FOF_ALLOWUNDO标志,否则SHFileOperation将永久删除该文件。设置该标志会将文件发送到回收站如果您只想删除一个文件并保证它不会被放入回收站,请使用DeleteFile
要从回收站中删除单个文件,请使用SHGetSpecialFolderLocation(CSIDL_BITBUCKET)
或SHGetKnownFolderIDList(FOLDERID_RecycleBinFolder)
获取回收站的绝对PIDL,然后使用SHBindToObject()
为其获取IShellFolder
接口,并调用其ParseDisplayName()
方法将所需文件名转换为相对PIDL,再使用SHBindToObject()
为该文件获取IContextMenu
接口,并使用其InvokeCommand()
方法执行文件的"删除"谓词。