■
もしやと思って探してみたら、SWTにWinAPIのラッパクラスがありました。
以下のサンプルを作ってみました。結構、いろんなことができます。
import org.eclipse.swt.internal.win32.*; public class SwtTest { void testWinAPI() { int hWnd = OS.FindWindow(null, new TCHAR(OS.CP_INSTALLED, "(無題) - 秀丸", true)); if (hWnd != 0) { RECT rect = new RECT(); OS.GetWindowRect (hWnd, rect); System.out.println("rect="+rect.left+" "+rect.top+" "+rect.right+" "+rect.bottom); RECT client = new RECT(); OS.GetClientRect(hWnd, client); POINT pt = new POINT(); OS.ClientToScreen(hWnd, pt); System.out.println("client pos=("+(pt.x-rect.left)+" "+(pt.y-rect.top)+ ") size=("+client.right+" "+client.bottom+")"); // ウィンドウのサイズを変更! WINDOWPLACEMENT wndpl = new WINDOWPLACEMENT(); OS.GetWindowPlacement(hWnd, wndpl); wndpl.bottom -= 100; OS.SetWindowPlacement(hWnd, wndpl); // 秀丸にキーイベントを送る! OS.SendMessage(hWnd, OS.WM_CHAR, 'H', 0); OS.SendMessage(hWnd, OS.WM_CHAR, 'e', 0); OS.SendMessage(hWnd, OS.WM_CHAR, 'l', 0); OS.SendMessage(hWnd, OS.WM_CHAR, 'l', 0); OS.SendMessage(hWnd, OS.WM_CHAR, 'o', 0); } // 画面に対して描画! int hDC = OS.GetDC(0); for (int i=0; i<1000; i+=5) { OS.MoveToEx(hDC, 0, i, 0); OS.LineTo(hDC, 1000, 1000-i); } OS.ReleaseDC(0, hDC); } public static void main(String[] args) { new SwtTest().testWinAPI(); } }