我见过一种实践,如果您要通过GetClipboardData()
从Windows剪贴板中获取内容,则首先在GlobalLock()
返回的句柄上调用GetClipboardData()
函数-在检索数据之前(例如,转换并存储)。
但是我发现(至少在C++ 11中)我可以得到相同的数据而无需锁定...
所以有3个子问题...
...导致一个大问题-什么时候使用或不使用
GlobalLock()
&&? PS:当然,在每个可能的
GlobalLock()
之后,您应该调用GlobalUnlock()
这是我检索数据的简单部分:
HANDLE clipboardHandle;
string clipboardContents = "";
clipboardHandle = GetClipboardData( CF_OEMTEXT );
clipboardContents = (string)static_cast<char*>( clipboardHandle );
cout << "Clipboard data:" << clipboardContents; //prints out fine
最佳答案
GlobalAlloc
可以根据调用方式返回两个不同的东西。GlobalAlloc(GMEM_FIXED, n)
返回一个指向不动的内存块的指针。 GlobalLock
是多余的:它将返回相同的值。GlobalAlloc(GMEM_MOVEABLE, n)
返回一个句柄,它不是指向数据的指针。您需要调用GlobalLock
将其转换为指针,然后您将获得另一个值。
如果您不知道分配内存的方式,请致电GlobalLock
。
关于c++ - Windows API-剪贴板-GlobalLock-使用还是不使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27151468/