使用JNA(Java)的Windows缩略图预览

使用JNA(Java)的Windows缩略图预览,java,winapi,jna,dwm,Java,Winapi,Jna,Dwm,给我 W32API.HWND targetHwnd = User32.INSTANCE.FindWindow("SunAwtFrame", "Frame") W32API.HWND sourceHwnd = User32.INSTANCE.FindWindow("triuiScreen", "EVE") W32API.HANDLE thumbnailH = new W32API.HANDLE() NativeLibrary dwm = NativeLibrary.getInstance("dw

给我

W32API.HWND targetHwnd = User32.INSTANCE.FindWindow("SunAwtFrame", "Frame")
W32API.HWND sourceHwnd = User32.INSTANCE.FindWindow("triuiScreen", "EVE")
W32API.HANDLE thumbnailH = new W32API.HANDLE()

NativeLibrary dwm = NativeLibrary.getInstance("dwmapi")
dwm.getFunction('DwmRegisterThumbnail').invoke(targetHwnd, sourceHwnd, thumbnailH)
我有种感觉,我做得完全不对,但深入研究文档却一无所获。

第三个参数是一个“out”参数,需要是指向句柄的指针,而不是句柄本身。比如

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x70f34bee, pid=7208, tid=7364
#
# JRE version: 6.0_18-b07
# Java VM: Java HotSpot(TM) Client VM (16.0-b13 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [DWMAPI.DLL+0x4bee]

看起来是W32API.HANDLEByReference,但是谢谢你的提示。我认为引用传递是由JNA处理的。
dwm.getFunction("DwmRegisterThumbnail")
  .invoke(targetHwnd, sourceHwnd, new PointerByReference(thumbnailH))