創造と開発ノート
WindowControl
最終更新:
Bot(ページ名リンク)
-
view
Win32専用Window制御クラス-WindowControl
JavaからWindows(Win32)のネイティブアプリのウィンドウを制御するための便利なクラス。
GPLで公開します。
SWTの裏ワザらしきものを使っているのでいつまで動くかは保証できません。
SWTをダウンロードしてから使用してください。
SWTの裏ワザらしきものを使っているのでいつまで動くかは保証できません。
SWTをダウンロードしてから使用してください。
主な機能としては、ウィンドウハンドラの取得(クラス名、ウィンドウ名)、サイズ変更、最大化、最小化などなど。メソッド名から判断してください。
サンプルを末尾に載せておきます。Firefoxとメモ帳を制御する例です。
サンプルを末尾に載せておきます。Firefoxとメモ帳を制御する例です。
ウィンドウクラス名などは「窓ちぇき!」などを使用してください。
ダウンロード:
WindowControl.java,WindowControlTest.java
を下部の添付ファイルからダウンロードしてください。
WindowControl.java,WindowControlTest.java
を下部の添付ファイルからダウンロードしてください。
WindowControl.java
/**
* Created on 2006/02/28
* Copyright(c) 2006 @auther akichika
*
* Purpose:Window Control for WIN32 with SWT
*
* Function:Window Control
*
* History: 2006/02/28 ver.1.0
*
* Lisence: GPL
*/
package jp.worg;
import java.awt.Rectangle;
import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.internal.win32.RECT;
import org.eclipse.swt.internal.win32.TCHAR;
import org.eclipse.swt.internal.win32.WINDOWPLACEMENT;
public class WindowControl {
public enum NameType {
CLASSNAME, WINDOWNAME
};// ウィンドウ名かウィンドウクラス名かを判別するフラグ
private NameType nameType;
private String name;
private int handler;
public WindowControl(String name, NameType nameType) {
this.name = name;
this.nameType = nameType;
handler = getHandler();
}
public int getHandler() {
int handler;
switch (nameType) {
case CLASSNAME:
handler = OS.FindWindow(new TCHAR(0, name, true), null);// ウィンドウクラス名からウィンドウハンドラを作成
break;
case WINDOWNAME:
handler = OS.FindWindow(null,
new TCHAR(OS.CP_INSTALLED, name, true));// ウィンドウ名からウィンドウハンドラを作成
break;
default:
handler = 0;
break;
}
if (handler == 0) { System.err.println("[WindowControl]Getting Window Handler Failed.");
}
/*
* else { System.out.println("[WindowControl]handler:" + handler + "
* Name:" + name + " NameType:" + nameType); }
*/
return handler;
}
public void printStatus() {
if (isWindowHung()) { System.err.println("[WindowControl]Window " + name + " " + handler
+ " is hung!");
}
if (isWindowMinimized()) { System.err.println("[WindowControl]Window " + name + " " + handler
+ " is minimized!");
}
if (isWindowMaximized()) { System.err.println("[WindowControl]Window " + name + " " + handler
+ " is maximized!");
}
if (!isWindowEnabled()) {
System.err.println("[WindowControl]Window " + name + " " + handler
+ " is disabled!");
}
if (!isWindowVisible()) { System.err.println("[WindowControl]Window " + name + " " + handler
+ " is invisible!");
}
}
public Rectangle getRectangle() {
printStatus();
RECT rect = new RECT();
OS.GetWindowRect(handler, rect);// ネイティブのウィンドウサイズを取得
return new Rectangle(rect.left, rect.top, rect.right - rect.left,
rect.right - rect.left);
}
public Rectangle getWindowPlacement() {
printStatus();
WINDOWPLACEMENT wndpl = new WINDOWPLACEMENT();
OS.GetWindowPlacement(handler, wndpl);// ネイティブのウィンドウサイズを取得
return new Rectangle(wndpl.left, wndpl.top, wndpl.right - wndpl.left,
wndpl.bottom - wndpl.top);
}
public void setWindowPlacement(Rectangle rect) {
printStatus();
if (isWindowMaximized())
setWindowMaximized(false);
if (isWindowMinimized())
setWindowMinimized(false);
WINDOWPLACEMENT wndpl = new WINDOWPLACEMENT();
OS.GetWindowPlacement(handler, wndpl);// ネイティブのウィンドウサイズを取得
wndpl.left = rect.x;
wndpl.top = rect.y;
wndpl.right = rect.x + rect.width;
wndpl.bottom = rect.y + rect.height;
OS.SetWindowPlacement(handler, wndpl);// ネイティブのウィンドウサイズに反映
}
public boolean isWindowMaximized() {
return OS.IsZoomed(handler);
}
public boolean isWindowMinimized() {
return OS.IsIconic(handler);
}
public boolean isWindowHung() {
return OS.IsHungAppWindow(handler);
}
public boolean isWindowVisible() {
return OS.IsWindowVisible(handler);
}
public boolean isWindowEnabled() {
return OS.IsWindowEnabled(handler);
}
public void setWindowMaximized(boolean maximized) {
int swFlags = maximized ? OS.SW_SHOWMAXIMIZED : OS.SW_RESTORE;
if (!isWindowVisible())
return;
if (maximized == isWindowMaximized())
return;
setShowWindow(swFlags);
setUpdateWindow();
}
public void setWindowMinimized(boolean minimized) {
int swFlags = minimized ? OS.SW_SHOWMINNOACTIVE : OS.SW_RESTORE;
if (!isWindowVisible())
return;
if (minimized == isWindowMinimized())
return;
setShowWindow(swFlags);
setUpdateWindow();
}
public void setShowWindow(int flag) {
OS.ShowWindow(handler, flag);
}
public void setFocus() {
OS.SetFocus(handler);
}
public void setWindowToTop() {
OS.BringWindowToTop(handler);
}
public void setForegroundWindow() {
OS.SetForegroundWindow(handler);
}
public void setUpdateWindow() {
OS.UpdateWindow(handler);
}
public void setActiveWindow() {
OS.SetActiveWindow(handler);
}
public void setEnableWindow(boolean enable) {
OS.EnableWindow(handler, enable);
}
public String getName() {
return name;
}
public NameType getNameType() {
return nameType;
}
}
WindowControlTest.java
/**
* Created on 2006/02/28
* Copyright(c) 2006 @auther akichika
*
* Purpose:
*
* Function:
*
* History:
*
* Lisence: GPL
*/
package jp.worg;
import java.awt.Rectangle;
public class WindowControlTest {
/**
* @param args
*/
public static void main(String[] args) {
// Function:
String name = "MozillaUIWindowClass";// Class Name
WindowControl wc = new WindowControl(name,WindowControl.NameType.CLASSNAME);
wc.setWindowPlacement(new Rectangle(100, 100, 640, 480));// x,y,width,height;
String name2 = "無題 - メモ帳";// Window Name
WindowControl wc2 = new WindowControl(name2,WindowControl.NameType.WINDOWNAME);
wc2.setWindowPlacement(new Rectangle(0, 0, 1024, 768));// x,y,width,height;
}
}