我想給我的應用程序集中另一個窗口(在這種情況下,記事本)電源的Java JNA聚焦於特定的窗口
我的班級正在尋找這樣
public static class Win32WindowUtils {
public interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);
HWND GetParent(HWND hWnd);
HWND FindWindow(String lpClassName, String lpWindowName);
HWND SetFocus(HWND hWnd);
HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter, String lpszClass, String lpszWindow);
int GetWindowText(HWND hWnd, char[] lpString, int nMaxCount);
}
private static final int WIN_TITLE_MAX_SIZE = 512;
public static HWND GetWindowHandle(String strSearch, String strClass) {
char[] lpString = new char[WIN_TITLE_MAX_SIZE];
String strTitle;
int iFind = -1;
HWND hWnd = User32.INSTANCE.FindWindow(strClass, null);
while(hWnd != null) {
User32.INSTANCE.GetWindowText(hWnd, lpString, WIN_TITLE_MAX_SIZE);
strTitle = new String(lpString);
strTitle = strTitle.toUpperCase();
iFind = strTitle.indexOf(strSearch);
if(iFind != -1) {
return hWnd;
}
hWnd = (User32.INSTANCE).FindWindowEx(null, hWnd, strClass, null);
}
return hWnd;
}
}
而且我叫它使用:
User32.INSTANCE.SetFocus(Win32WindowUtils.GetWindowHandle(windowTitle, null));
注:
public String windowTitle = "Unbennant - Editor";
可悲的是什麼也沒有發生,我不知道爲什麼
根據[MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646312(v = vs.85).aspx),「窗口必須連接到調用線程的消息隊列「。這個提示似乎意味着你不能通過'SetFocus()'函數強調不同的應用程序。 – technomage
您可能希望使用[BringWindowToTop()](https://msdn.microsoft.com/en-us/library/windows/desktop/ms632673(v = vs.85).aspx)。 – technomage
您是否想要激活應用程序(將其置於前面)還是隻確保將鍵盤事件定向到所選窗口? – technomage