1. 如何获取控制台窗口句柄
1.调用 GetConsoleTitle() 来保存当前的控制台窗口标题。
2.调用 SetConsoleTitle() 来将控制台标题更改为一个唯一的标题。
3.调用 Sleep(40),以确保已更新窗口标题。
4.调用 FindWindow(NULL, uniquetitle),以获取 HWND,此调用将返回 HWND, 如果操作失败,将返回 NULL。
5.从步骤 1 中,若要恢复原始窗口标题检索调用 SetConsoleTitle() 的值。
应该测试结果的 HWND。例如可以测试是否返回的 HWND 对应于当前进程在 HWND 上调用 GetWindowText() 并将结果与 GetConsoleTitle() 进行比较。
示例代码
下面的函数中检索当前控制台应用程序窗口句柄 (HWND)。如果此函数成功,则返回值是控制台窗口的句柄。如果此函数失败,则返回值为 NULL。省略一些错误检查,为简洁起见。
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Buffer size for console window titles.
HWND hwndFound; // This is what is returned to the caller.
char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
// WindowTitle.
char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
// WindowTitle.
// Fetch current window title.
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Format a "unique" NewWindowTitle.
wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());
// Change current window title.
SetConsoleTitle(pszNewWindowTitle);
// Ensure window title has been updated.
Sleep(40);
// Look for NewWindowTitle.
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// Restore original window title.
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
2. 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的引用,应该就是你所说的句柄
不知道我说的是不是你想知道的那样
3. java通过pid获取句柄
楼主,是想得到窗口的句柄吗,可以使用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;
}
4. 请问在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);
// }
5. java 调用window API 获取窗口句柄 并发消息 有人会吗 谢谢
使用JNI调用WIN32 API ,先得到窗口句柄,再得到窗口的RECT 先WindowFromPoint(point); 再GetWindowRect(hwnd, &rect); 返回的rect,就是窗口的left/top/width/height 这个不麻烦、也不复杂,很简单的JNI。
6. Java如何获取窗口的句柄,得到句柄后如何操作这个句柄的窗口(比如透明窗口、设置窗口大小等)
使用 JNA, 或JNI技术 + WIN32 API,可以做到,过程有些复杂
~
7. 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");
8. 请教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;
}