进入剪贴板
Hwid to clipboard
所以这就是我正在尝试做的事情我正在尝试将序列号复制到剪贴板但是它不起作用我做错了什么如果是那么请帮助我我想让这个工作因为它的东西我正在销售的项目
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include "windows.h"
namespace std {}
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR volumeName[MAX_PATH + 1] = { 0 };
TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
DWORD serialNumber = 0;
DWORD maxComponentLen = 0;
DWORD fileSystemFlags = 0;
if (GetVolumeInformation(
_T("C:\"),
volumeName,
ARRAYSIZE(volumeName),
& serialNumber,
& maxComponentLen,
& fileSystemFlags,
fileSystemName,
ARRAYSIZE(fileSystemName)))
{
_tprintf(_T("Serial Number: %lu\n"), serialNumber);
GlobalUnlock(GetVolumeInformation);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(1, GetVolumeInformation);
CloseClipboard();
MessageBoxA(NULL, "HWID COPYED.", "HWID", NULL);
std::cout << std::endl << "Press any key to continue...";
getchar();
}
}
您应该避免使用 T
宏(以 _T
和 _t
开头的宏)。由于历史原因,Microsoft 仍在其某些文档中使用这些宏,但它们毫无用处且令人困惑。不知道你用的是ANSI还是Unicode(推荐Unicode)。
如果您只需要 GetVolumeInformation
中的序列号,那么您可以将其他变量设置为 NULL
,请参阅文档。
获得序列号后,将其转换为文本。然后将文本复制到剪贴板。下面是 ANSI 示例:
void copy(const char* text)
{
int len = strlen(text) + 1;
HGLOBAL hmem = GlobalAlloc(GMEM_MOVEABLE, len);
char* buffer = (char*)GlobalLock(hmem);
strcpy_s(buffer, len, text);
GlobalUnlock(hmem);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_TEXT, hmem);
CloseClipboard();
}
int _tmain()
{
DWORD serialNumber = 0;
if (GetVolumeInformation(
_T("C:\"),
NULL,
0,
&serialNumber,
NULL,
0,
NULL,
0))
{
std::cout << serialNumber << std::endl;
char buf[100];
sprintf_s(buf, 100, "%d", serialNumber);
copy(buf);
MessageBoxA(NULL, buf, "HWID", NULL);
}
return 0;
}
所以这就是我正在尝试做的事情我正在尝试将序列号复制到剪贴板但是它不起作用我做错了什么如果是那么请帮助我我想让这个工作因为它的东西我正在销售的项目
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include "windows.h"
namespace std {}
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR volumeName[MAX_PATH + 1] = { 0 };
TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
DWORD serialNumber = 0;
DWORD maxComponentLen = 0;
DWORD fileSystemFlags = 0;
if (GetVolumeInformation(
_T("C:\"),
volumeName,
ARRAYSIZE(volumeName),
& serialNumber,
& maxComponentLen,
& fileSystemFlags,
fileSystemName,
ARRAYSIZE(fileSystemName)))
{
_tprintf(_T("Serial Number: %lu\n"), serialNumber);
GlobalUnlock(GetVolumeInformation);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(1, GetVolumeInformation);
CloseClipboard();
MessageBoxA(NULL, "HWID COPYED.", "HWID", NULL);
std::cout << std::endl << "Press any key to continue...";
getchar();
}
}
您应该避免使用 T
宏(以 _T
和 _t
开头的宏)。由于历史原因,Microsoft 仍在其某些文档中使用这些宏,但它们毫无用处且令人困惑。不知道你用的是ANSI还是Unicode(推荐Unicode)。
如果您只需要 GetVolumeInformation
中的序列号,那么您可以将其他变量设置为 NULL
,请参阅文档。
获得序列号后,将其转换为文本。然后将文本复制到剪贴板。下面是 ANSI 示例:
void copy(const char* text)
{
int len = strlen(text) + 1;
HGLOBAL hmem = GlobalAlloc(GMEM_MOVEABLE, len);
char* buffer = (char*)GlobalLock(hmem);
strcpy_s(buffer, len, text);
GlobalUnlock(hmem);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_TEXT, hmem);
CloseClipboard();
}
int _tmain()
{
DWORD serialNumber = 0;
if (GetVolumeInformation(
_T("C:\"),
NULL,
0,
&serialNumber,
NULL,
0,
NULL,
0))
{
std::cout << serialNumber << std::endl;
char buf[100];
sprintf_s(buf, 100, "%d", serialNumber);
copy(buf);
MessageBoxA(NULL, buf, "HWID", NULL);
}
return 0;
}