В буфер обмена

Так что это то, что я пытаюсь сделать, я пытаюсь скопировать серийный номер в буфер обмена, но это не работает, есть ли что-то, что я сделал неправильно, если да, то, пожалуйста, помогите мне, я хотел бы, чтобы это работало, потому что это что-то для меня проекта, продаю

#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();
}

}

-3

Решение

Вы должны избегать использования 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;
}
0

Другие решения

Других решений пока нет …