我正在实现一个JNI方法,它调用windows.h中的setClipboardContent()函数来设置Windows剪贴板内容。标题如下所示。 formatName是剪贴板格式,数据是Java中的byte []。这是您要放入剪贴板的数据。
我对如何在JNI方法中调用setClipboardContent()函数感到困惑。有人可以帮忙吗?
JNIEXPORT jboolean JNICALL Java_msoffice_MSOfficeClipboard_setClipboardContents(JNIEnv *pEnv, jobject, jstring formatName, jbyteArray data)
{
BOOL fSucces = OpenClipboard(NULL);
if (fSucces) {
EmptyClipboard();
const char *str = pEnv->GetStringUTFChars(formatName, NULL);
if (str = NULL) return false; /* OutOfMemoryError already thrown */
UINT format = RegisterClipboardFormat(str);
pEnv->ReleaseStringUTFChars(formatName, str);
// This is where I should call setClipboardContent(format, HANDLE) method. I don't know what to do here.
CloseClipboard();
}
return fSucces;
}
答案 0 :(得分:0)
假设剪贴板格式只是一团数据,您需要使用GlobalAlloc(GMEM_MOVEABLE)分配一块内存并从数据阵列中复制数据。某些剪贴板格式需要特殊行为(CF_BITMAP需要HBITMAP等)。