SWT程序如何实现非激活状态下 的监控,如同企鹅那样,最小化了后处于非激活状态,按下CTRL+ALT+Z可以快速切换到界面,打开消息。

时间:2021-01-10 22:23:57
本人自己编写的一个小程序,有SWT写的。
程序最小化后,任务图标也隐藏了,只保留了任务栏左侧的系统栏图标,单击图标可以显示窗口并激活。
想实现快捷键快速显示窗口并激活,就像QQ一样,最小化只有系统栏图标后,只需按下CTRL+ALT+Z组合快捷键就能实现窗口的快速激活。我尝试了好久都没能成功,在Display上的监控貌似只在窗口激活状态时才能生效,求高手解惑。
下面这个是Display层面的监控,在激活状态时生效,但是最小化之后,非激活状态下组合快捷键就不行了,求高手解惑。
shell.getDisplay().addFilter(SWT.KeyDown, new Listener(){
@Override
public void handleEvent(Event e) {
// TODO Auto-generated method stub
if((e.keyCode==SWT.CR) && (e.stateMask==(SWT.CTRL|SWT.ALT))){
toggleDisplay(shell,tray);
}
}
});

8 个解决方案

#1


自己先顶一下。 SWT程序如何实现非激活状态下 的监控,如同企鹅那样,最小化了后处于非激活状态,按下CTRL+ALT+Z可以快速切换到界面,打开消息。

#2


这么晚了,不晓得有高手指教一二不。

#3


已解决了,谢谢各位。

#4


SWT程序如何实现非激活状态下 的监控,如同企鹅那样,最小化了后处于非激活状态,按下CTRL+ALT+Z可以快速切换到界面,打开消息。

#5


注册全局组合键的

#6


谢谢各位的回答,但是新的问题又出现了。
我用HOOK来是先全局键盘的监控,已经实现了,但是为什么经常会出现资源管理器异常的情况,通常都是任务栏卡死,甚至桌面都卡死了。一个特别明显的就是 按下“ALT”+“TAB”组合的时候,会显示所有的窗口缩量图,然后不能再他们之间切换。我在想是不是我的代码过于简单,占用太多的资源管理器资源?对win32里面的东西不熟悉,有木有碰到同样问题的人啊,求指点一二。
下面是我的代码:
//窗口隐藏时,按下键盘中“ALT”+“Z”组合键,显示窗口,系统栏图标隐藏
Hook.KEYBOARD.addListener(Main.this,new HookEventListener(){
//@Override
public void acceptHookData(HookData arg0) {
KeyboardHookData KHD = ((KeyboardHookData)arg0);
System.out.println(KHD.getWParam()+" - "+KHD.getTransitionState());  //Print code 
if( KHD.getScanCode() == 44 && KHD.getTransitionState() && KHD.isAltPressed()){  //按下ALT+Z执行
Display.getDefault().syncExec(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
if(!shell.getVisible()){
toggleDisplay(shell,tray);
}
}
});
}
}});
Hook.KEYBOARD.install(Main.this);  //注册事件

程序本身能够执行,按下ALT+Z组合键,程序会从任务栏的最小状态下跳出来,就像QQ的Ctrl+Alt+Z那样,效果是实现了。但是反复多次执行任务栏会卡住,资源管理器会无响应。不知道是啥情况,希望动的大牛能指点迷津。谢谢啦。

#7


或者有没有其他的不用Hook这种方法的思路吗,真心求教。

#8


有木有人啊  SWT程序如何实现非激活状态下 的监控,如同企鹅那样,最小化了后处于非激活状态,按下CTRL+ALT+Z可以快速切换到界面,打开消息。

#1


自己先顶一下。 SWT程序如何实现非激活状态下 的监控,如同企鹅那样,最小化了后处于非激活状态,按下CTRL+ALT+Z可以快速切换到界面,打开消息。

#2


这么晚了,不晓得有高手指教一二不。

#3


已解决了,谢谢各位。

#4


SWT程序如何实现非激活状态下 的监控,如同企鹅那样,最小化了后处于非激活状态,按下CTRL+ALT+Z可以快速切换到界面,打开消息。

#5


注册全局组合键的

#6


谢谢各位的回答,但是新的问题又出现了。
我用HOOK来是先全局键盘的监控,已经实现了,但是为什么经常会出现资源管理器异常的情况,通常都是任务栏卡死,甚至桌面都卡死了。一个特别明显的就是 按下“ALT”+“TAB”组合的时候,会显示所有的窗口缩量图,然后不能再他们之间切换。我在想是不是我的代码过于简单,占用太多的资源管理器资源?对win32里面的东西不熟悉,有木有碰到同样问题的人啊,求指点一二。
下面是我的代码:
//窗口隐藏时,按下键盘中“ALT”+“Z”组合键,显示窗口,系统栏图标隐藏
Hook.KEYBOARD.addListener(Main.this,new HookEventListener(){
//@Override
public void acceptHookData(HookData arg0) {
KeyboardHookData KHD = ((KeyboardHookData)arg0);
System.out.println(KHD.getWParam()+" - "+KHD.getTransitionState());  //Print code 
if( KHD.getScanCode() == 44 && KHD.getTransitionState() && KHD.isAltPressed()){  //按下ALT+Z执行
Display.getDefault().syncExec(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
if(!shell.getVisible()){
toggleDisplay(shell,tray);
}
}
});
}
}});
Hook.KEYBOARD.install(Main.this);  //注册事件

程序本身能够执行,按下ALT+Z组合键,程序会从任务栏的最小状态下跳出来,就像QQ的Ctrl+Alt+Z那样,效果是实现了。但是反复多次执行任务栏会卡住,资源管理器会无响应。不知道是啥情况,希望动的大牛能指点迷津。谢谢啦。

#7


或者有没有其他的不用Hook这种方法的思路吗,真心求教。

#8


有木有人啊  SWT程序如何实现非激活状态下 的监控,如同企鹅那样,最小化了后处于非激活状态,按下CTRL+ALT+Z可以快速切换到界面,打开消息。