2011-02-23 88 views
2

我寫了一個突出顯示數字並複製它們的程序。我希望能夠對複製的文本進行一些基本的數學運算,例如乘法或加法,但我無法弄清楚如何將剪貼板數據分配給變量。基本上,我希望能夠複製一個數字,將其分配給變量「a」,然後用變量「b」重複並將它們相乘。我已經想出瞭如何選擇和複製數字,以便部分不是問題。任何幫助,將不勝感激,甚至是一種完全不同的方法,而不是我所嘗試過的。如何將剪貼板文本分配給C++中的變量?

這裏是我的問題的最新嘗試:

HANDLE clip0; 
    OpenClipboard(NULL); 
    EmptyClipboard(); 
     clip0 = GetClipboardData(CF_TEXT); 
    variable = (char)clip0; 
    CloseClipboard(); 

其中「變量」是變量。

每當我運行該程序,並告訴它輸出「變量」,則返回0

另一次嘗試我做了這個值:

HANDLE clip1; 
    if (OpenClipboard(NULL)) 
     clip1 = GetClipboardData(CF_TEXT); 
    variable = (char)clip1; 
    CloseClipboard(); 

但「變量」總是拿取值爲-8

+0

當你說「C++」時,你的意思大概是「Win32 API」? – EboMike 2011-02-23 22:47:42

+0

這不是該語言的一部分,而是一項OS服務。標記它,以便人們可以回答*正確*操作系統。 – dmckee 2011-02-23 22:47:56

回答

1

剪貼板的文本內容是由c指向的c字符串。

if(OpenClipboard(NULL) != FALSE) 
{ 
    HANDLE clip0 = GetClipboardData(CF_TEXT); 
    if(clip0 != NULL) 
    { 
    char *c = reinterpret_cast<char*>(GlobalLock(clip0)); 
    // Use c before it goes out of scope 
    ... 
    GlobalUnlock(clip0); 
    } 
    CloseClipboard(); 
} 
+1

當然你的意思是第4行的char * x =(char *)h'? 'h'應該是'void *'類型,而不是'HANDLE';這只是一個巧合,'HANDLE'被定義爲void *',但你應該把它當作一個不透明的類型。 – 2011-02-24 02:33:30

8

您需要調用GlobalLock(clip0)來獲取指向數據的指針,而不是轉換句柄。然後,完成後,請撥GlobalUnlock以釋放指針。

OpenClipboard(NULL); 
HANDLE clip0 = GetClipboardData(CF_TEXT); 
char* p=(char*)GlobalLock(clip0); 
variable=*p; 
GlobalUnlock(clip0); 
CloseClipboard(); 
+0

您可能想要將字符串轉換爲具有'sscanf'或'strtol'的整數,而不僅僅是取第一個字符。 – 2011-02-23 23:06:56

+0

是的---我只是借用了問題中單個字符的賦值。 – 2011-02-23 23:12:54

+0

我對我犯的錯誤表示歉意,我對此很陌生。我的意思是Win32 API。亞當是對的,我確實需要將字符串轉換爲整數。我用sscanf和安東尼的建議,似乎運作良好。 感謝大家的幫助。 – 2011-02-24 00:44:19

相關問題