如何在JNI调用中使用windows.h setClipboardContent方法?

时间:2011-10-22 22:38:55

标签: java winapi java-native-interface

我正在实现一个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;

}

1 个答案:

答案 0 :(得分:0)

假设剪贴板格式只是一团数据,您需要使用GlobalAlloc(GMEM_MOVEABLE)分配一块内存并从数据阵列中复制数据。某些剪贴板格式需要特殊行为(CF_BITMAP需要HBITMAP等)。