2011-02-23 81 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

相关问题