Как использовать метод windows.h setClipboardContent в вызове JNI? - PullRequest
0 голосов
/ 23 октября 2011

Я реализую метод JNI, который вызывает функцию setClipboardContent () в windows.h для установки содержимого буфера обмена Windows.Заголовок выглядит следующим образом.FormatName - это формат буфера обмена. Данные - это байт [] в Java.Это данные, которые вы хотите поместить в буфер обмена.

Я не совсем понимаю, как вызывать функцию setClipboardContent () в методе JNI.Кто-нибудь может помочь?

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 голосов
/ 23 октября 2011

Предполагая, что формат буфера обмена - это просто блок данных, вам нужно выделить часть памяти с помощью GlobalAlloc (GMEM_MOVEABLE) и скопировать данные из массива данных. Некоторые форматы буфера обмена требуют особого поведения (CF_BITMAP требует HBITMAP и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...