2016-08-21 2 views
-3

Donc, c'est ce que je suis en train d'essayer de copier le numéro de série dans le presse-papiers, mais ça ne marche pas, y at-il quelque chose que je me suis trompé si oui alors, aidez-moi un projet de moi que je vendsHwid à presse-papiers

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

} 
+1

Le bon outil pour résoudre ces problèmes est d'utiliser votre débogueur, mais ne pas demander à Stack Overflow avant de le faire. Dites-nous toutes vos observations que vous avez faites en inspectant votre code en passant ligne par ligne en 1ère place. Aussi, vous pourriez vouloir lire ** [Comment déboguer de petits programmes (par Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** Au moins laissez-nous avec un [MCVE] qui reproduit votre problème. (Ceci est un commentaire de stock personnel fourni par πάντα ῥεῖ ™) –

+0

est 'GetVolumeInformation' une fonction? pourquoi passez-vous à 'SetClipboardData'? – elyashiv

+0

parce que je veux obtenir SerialNumber et si je passe serialnumber à clipboardata il donnerait une erreur parce qu'il est DWORD – Arix

Répondre

0

Vous devez éviter d'utiliser les macros T (les macros commençant par _T et _t). Microsoft utilise encore ces macros dans certaines de ses documentations pour des raisons historiques, mais c'est inutile et déroutant. Je ne sais pas si vous utilisez ANSI ou Unicode (Unicode est recommandé).

Si vous avez seulement besoin du numéro de série de GetVolumeInformation, vous pouvez définir les autres variables sur NULL, voir la documentation.

Une fois le numéro de série obtenu, convertissez-le en texte. Ensuite, copiez le texte dans le presse-papiers. Voici un exemple 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

ty les hommes que vous m'avez aidés – Arix

+0

Cliquez sur la coche pour accepter le répondez, si cela a répondu à votre question –