java调用系统user32.dll中的GetWindowRect()
java调用系统user32.dll中的GetWindowRect(),在c#中是GetWindowRect(IntPtrhWnd,refRectanglerect),但...
java调用系统user32.dll中的GetWindowRect(),在 c#中是GetWindowRect(IntPtr hWnd, ref Rectangle rect) ,但是在java中没有ref这种东西...该怎么处理?
展开
2个回答
2013-08-13
展开全部
可以自己写JNI来调用,自己生成的中间DLL,自己还能完全控制。
追问
JNative.jar 我用的这个 ... 具体点儿解释下呗...
追答
这个好多年没发布更新了,找个来试试先
Pointer rect = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * 4));
JNative ja = new JNative("User32.DLL", "GetWindowRect");
ja.setRetVal(Type.INT);
int p = 0;
ja.setParameter(p++, 0x27050a);// 窗口的句柄
ja.setParameter(p++, rect);
ja.invoke();
System.out.println("RetVal=" + ja.getRetVal());
ja.dispose();
byte[] bb = rect.getMemory();
for (int i = 0; i < bb.length; i++) {
System.out.print(bb[i] + " ");
}
System.out.print("\n");
int x = (bb[3] << 24) + (bb[2] << 16) + (bb[1] << 8) + bb[0];
int y = (bb[7] << 24) + (bb[6] << 16) + (bb[5] << 8) + bb[4];
int w = (bb[11] << 24) + (bb[10] << 16) + (bb[9] << 8) + bb[8];
int h = (bb[15] << 24) + (bb[14] << 16) + (bb[13] << 8) + bb[12];
System.out.println("x=" + x + ", y=" + y + ", w=" + w + ", h=" + h);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询