Skip to content

Commit

Permalink
Merge pull request #35 from Hellosager/win-key-pressed-support
Browse files Browse the repository at this point in the history
added support for hold down win key
  • Loading branch information
kristian authored Jun 17, 2019
2 parents 4b00ee8 + d3aa1ce commit dc99402
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 6 deletions.
12 changes: 8 additions & 4 deletions src/main/java/lc/kra/system/keyboard/GlobalKeyboardHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import static lc.kra.system.keyboard.event.GlobalKeyEvent.VK_RMENU;
import static lc.kra.system.keyboard.event.GlobalKeyEvent.VK_RSHIFT;
import static lc.kra.system.keyboard.event.GlobalKeyEvent.VK_RWIN;
import static lc.kra.system.keyboard.event.GlobalKeyEvent.VK_LWIN;
import static lc.kra.system.keyboard.event.GlobalKeyEvent.VK_SHIFT;

import java.util.List;
Expand All @@ -50,7 +51,7 @@ public class GlobalKeyboardHook {

private BlockingQueue<GlobalKeyEvent> inputBuffer =
new LinkedBlockingQueue<GlobalKeyEvent>();
private boolean menuPressed, shiftPressed, controlPressed, extendedKey;
private boolean menuPressed, shiftPressed, controlPressed, winPressed, extendedKey;

private List<GlobalKeyListener> listeners = new CopyOnWriteArrayList<GlobalKeyListener>();
private Thread eventDispatcher = new Thread() {{
Expand Down Expand Up @@ -104,7 +105,7 @@ public GlobalKeyboardHook(boolean raw) throws UnsatisfiedLinkError {
*/
@Override public void handleKey(int virtualKeyCode, int transitionState, char keyChar, long deviceHandle) {
switchControlKeys(virtualKeyCode, transitionState);
inputBuffer.add(new GlobalKeyEvent(this, virtualKeyCode, transitionState, keyChar, menuPressed, shiftPressed, controlPressed, extendedKey, deviceHandle));
inputBuffer.add(new GlobalKeyEvent(this, virtualKeyCode, transitionState, keyChar, menuPressed, shiftPressed, controlPressed, winPressed, extendedKey, deviceHandle));
}
};

Expand Down Expand Up @@ -212,9 +213,12 @@ public NativeKeyboardHook(boolean raw) {
* Switch control states for menu/shift/control
*/
private void switchControlKeys(int virtualKeyCode, int transitionState) {
boolean downTransition = transitionState==TS_DOWN;
boolean downTransition = (transitionState==TS_DOWN);
switch(virtualKeyCode) {
case VK_RWIN: extendedKey = downTransition; break;
case VK_RWIN: extendedKey = downTransition;
case VK_LWIN:
winPressed = downTransition;
break;
case VK_RMENU: extendedKey = downTransition;
case VK_MENU: case VK_LMENU:
menuPressed = downTransition;
Expand Down
11 changes: 9 additions & 2 deletions src/main/java/lc/kra/system/keyboard/event/GlobalKeyEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -218,17 +218,19 @@ public class GlobalKeyEvent extends EventObject {
menuPressed,
shiftPressed,
controlPressed,
winPressed,
extendedKey;
private long deviceHandle;

public GlobalKeyEvent(Object source, int virtualKeyCode, int transitionState, char keyChar, boolean menuPressed, boolean shiftPressed, boolean controlPressed, boolean extendedKey, long deviceHandle) {
public GlobalKeyEvent(Object source, int virtualKeyCode, int transitionState, char keyChar, boolean menuPressed, boolean shiftPressed, boolean controlPressed, boolean winPressed, boolean extendedKey, long deviceHandle) {
super(source);
this.virtualKeyCode = virtualKeyCode;
this.transitionState = transitionState;
this.keyChar = keyChar;
this.menuPressed = menuPressed;
this.shiftPressed = shiftPressed;
this.controlPressed = controlPressed;
this.winPressed = winPressed;
this.extendedKey = extendedKey;
this.deviceHandle = deviceHandle;
}
Expand Down Expand Up @@ -267,7 +269,11 @@ public GlobalKeyEvent(Object source, int virtualKeyCode, int transitionState, ch
*/
public boolean isControlPressed() { return controlPressed; }
/**
* Returns true if the menu/shift/control key pressed is an extended key.
* Returns true if the windows key is pressed on the keyboard.
*/
public boolean isWinPressed() { return winPressed; }
/**
* Returns true if the menu/shift/control/win key pressed is an extended key.
*/
public boolean isExtendedKey() { return extendedKey; }

Expand All @@ -287,6 +293,7 @@ public GlobalKeyEvent(Object source, int virtualKeyCode, int transitionState, ch
if(menuPressed) builder.append(",menu");
if(shiftPressed) builder.append(",shift");
if(controlPressed) builder.append(",control");
if(winPressed) builder.append(",win");
if(extendedKey) builder.append(",extended");
return builder.append(']').toString();
}
Expand Down

0 comments on commit dc99402

Please sign in to comment.