是否可以使用java禁用Windows键 [英] is it is possible to disable the windows keys using java

查看:121
本文介绍了是否可以使用java禁用Windows键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以使用java禁用windows键和alt + tab ...

is it is possible to disable the windows keys and alt+tab using java ...

推荐答案

你可以使用JNA实现这一点。

You can use JNA to achieve this.

在类路径中包含jna.jar和platform.jar并创建以下类。
此类禁用左窗口密钥(0x5B)和右窗口密钥(0x5C)。因此,您可以在switch case语句中添加其他代码。

Include jna.jar and platform.jar on the classpath and create the following class. This class disables left windows key (0x5B) and right windows key (0x5C). So you can add other codes at the switch case statement.

在应用程序启动时尽快调用KeyHook.blockWindowsKey()。
另一方面,在app shutdown时调用unblockWindowsKey()。

Call KeyHook.blockWindowsKey() as soon as possible when your application starts. On the other side, call unblockWindowsKey() at app shutdown.

由于代码仅在isWindows()为true时执行,因此您始终可以调用KeyHook .blockWindowsKey(),即使在另一个操作系统上运行。

Since the code is only executed when isWindows() is true, you can always call KeyHook.blockWindowsKey(), even when running on another OS.




    import com.sun.jna.platform.win32.Kernel32;
    import com.sun.jna.platform.win32.User32;
    import com.sun.jna.platform.win32.WinDef.HMODULE;
    import com.sun.jna.platform.win32.WinDef.LRESULT;
    import com.sun.jna.platform.win32.WinDef.WPARAM;
    import com.sun.jna.platform.win32.WinUser.HHOOK;
    import com.sun.jna.platform.win32.WinUser.KBDLLHOOKSTRUCT;
    import com.sun.jna.platform.win32.WinUser.LowLevelKeyboardProc;
    import com.sun.jna.platform.win32.WinUser.MSG;


    public class KeyHook {
        private static HHOOK hhk;
        private static LowLevelKeyboardProc keyboardHook;
        private static User32 lib;

        public static void blockWindowsKey() {
            if (isWindows()) {
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        lib = User32.INSTANCE;
                        HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
                        keyboardHook = new LowLevelKeyboardProc() {
                            public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT info) {
                                if (nCode >= 0) {
                                    switch (info.vkCode){
                                        case 0x5B:
                                        case 0x5C:
                                            return new LRESULT(1);
                                        default: //do nothing
                                    }
                                }
                                return lib.CallNextHookEx(hhk, nCode, wParam, info.getPointer());
                            }
                        };
                        hhk = lib.SetWindowsHookEx(13, keyboardHook, hMod, 0);

                        // This bit never returns from GetMessage
                        int result;
                        MSG msg = new MSG();
                        while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
                            if (result == -1) {
                                break;
                            } else {
                                lib.TranslateMessage(msg);
                                lib.DispatchMessage(msg);
                            }
                        }
                        lib.UnhookWindowsHookEx(hhk);
                    }
                }).start();
            }
        }

        public static void unblockWindowsKey() {
            if (isWindows() && lib != null) {
                lib.UnhookWindowsHookEx(hhk);
            }
        }

        public static boolean isWindows(){
            String os = System.getProperty("os.name").toLowerCase();
            return (os.indexOf( "win" ) >= 0);
        }
    }


这篇关于是否可以使用java禁用Windows键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆