⑴ java 調用window API 獲取窗口句柄 並發消息 有人會嗎 謝謝
使用JNI調用WIN32
API
,先得到窗口句柄,再得到窗口的RECT
先WindowFromPoint(point);
再GetWindowRect(hwnd,
&rect);
返回的rect,就是窗口的left/top/width/height
這個不麻煩、也不復雜,很簡單的JNI。
⑵ java能獲得窗口句柄嗎
JFrame jf = new JFrame("窗口句柄");
這個 jf 對象就是 你所說的窗口句柄,因為java把指針屏蔽了,所以沒有什麼值地址的東西,如果你 要像C裡面哪裡傳地址的話
java就這樣
JFrame jf1 = new JFrame("窗口句柄");
JFrame jf2 = jf1;
這個jf2 就是 jf1的引用,你改變jf2就改變了jf1
同樣的 函數裡面返回時,只要你不再new一個,
比如
JFrame jf1 = new JFrame("窗口句柄");
public JFrame getJFrameHander(){
return jf1;
}
你在另外的代碼里調用這個函數
比如
{
JFrame jf2 = getJFrameHander();
}
這個jf2就擁有了 jf1的引用,應該就是你所說的句柄
不知道我說的是不是你想知道的那樣
⑶ 請問在java中怎麼使用jna 獲取說有的窗口句柄
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
public class Demo1 {
public static void main(String[] args) {
name();
}
//窗體句柄的截獲
public static void name() {
// HWND hwnd = User32.INSTANCE.FindWindow(null, "列印");
String zh="列印";
HWND hwndDialog = User32.INSTANCE.FindWindow(null,zh);
if(hwndDialog==null) {
System.err.println("沒有找到窗體");
}else {
System.err.println("找到窗體"+hwndDialog);
//HWND root, String className, long timeout, TimeUnit unit,String caption
// List<HWND> hwndButton= Win32Util.findHandleByClassNameJKSD(hwndDialog,"Button", 10, TimeUnit.SECONDS,"列印");
// for (HWND hwnd : hwndButton) {
// System.err.println(hwnd);
// }
⑷ 如何獲得Java編寫的程序的控制項句柄
windows下獲取當前進程的話可以用dos命令tasklist
Runtime r=Runtime.getRuntime();
Process p=r.exec("cmd /C tasklist");
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream(),"gbk"));//windows的默認系統中文編碼是gbk所以從cmd控制台的信息已gbk來解碼
String line=null;
while((line=reader.readLine())!=null)
System.out.println(line);
⑸ JAVAFX怎麼獲取窗口句柄
1 內部匿名類和Lambda表達式
在之前的例子上對
button.setOnAction(this);
進行更改
button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
System.out.println("I am an annonymous inner class");
}
});
此時點擊按鈕調用的時間就是我們後來修改的,不用去檢驗每個按鈕的名字,直接在生成對象之後對象的方法上調用內部類,使得事件發生。"Click me"。
但是後來會出現一個問題。按照上一次的想法我們有很多個按鈕的時候會寫出if條件結構,然後還要去對應代碼中的對象,但是都使用內部匿名類也不方便。
甲骨文公司在Java 8中開始加入了Lambda表達式,此時將這個語句改成如下:
button.setOnAction(e-> System.out.println("heyyyyy, I am Lambda"));
此時控制台對我們點擊了按鈕進行回應:heyyyyy, I am Lambda,Java自動幫我們處理這個事件。同時也可以改成
button.setOnAction(e->{
System.out.println("heyyyyy, I am Lambda1");
⑹ Java如何獲取窗口的句柄,得到句柄後如何操作這個句柄的窗口(比如透明窗口、設置窗口大小等)
使用 JNA, 或JNI技術 + WIN32 API,可以做到,過程有些復雜
~
⑺ 請教JAVA中用JNA獲得窗口句柄後,如何捕獲該窗口是否彈出了窗口(類似MessageBox)
樓主,是想得到窗口的句柄嗎,可以使用JNA
參考 WIN32 API
typedef struct
{
HWND hWnd;
DWORD dwPid;
}WNDINFO;
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
WNDINFO* pInfo = (WNDINFO*)lParam;
DWORD dwProcessId = 0;
GetWindowThreadProcessId(hWnd, &dwProcessId);
if(dwProcessId == pInfo->dwPid)
{
pInfo->hWnd = hWnd;
return FALSE;
}
return TRUE;
}
HWND GetHwndByProcessId(DWORD dwProcessId)
{
WNDINFO info = {0};
info.hWnd = NULL;
info.dwPid = dwProcessId;
EnumWindows(EnumWindowsProc, (LPARAM)&info);
return info.hWnd;
}