2010-05-12 23 views
1
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) 

me donneaperçu Windows miniature avec la JNA (Java)

# 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] 

Je sens que je fais complètement tort, mais creuser dans la documentation m'a nulle part.

Répondre

3

Le 3ème paramètre est un paramètre "out", et doit être un pointeur vers le handle, pas le handle lui-même. Donc, quelque chose comme

dwm.getFunction("DwmRegisterThumbnail") 
    .invoke(targetHwnd, sourceHwnd, new PointerByReference(thumbnailH)) 
+0

On dirait que c'est W32API.HANDLEByReference, mais merci pour l'indice. Je pensais que passer par référence était géré par la JNA. – rukoche