Skip to content
This repository was archived by the owner on Aug 21, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 36 additions & 59 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,89 +3,66 @@
<div align="center">
<a href="https://www.oracle.com/java/">
<img
src="https://img.shields.io/badge/Made%20with-Java-red"
src="https://img.shields.io/badge/Made%20with-Java-red?style=for-the-badge"
height="30"
/>
</a>
<a href="https://jitpack.io/#lukasl-dev/jwinkey/1.0.6">
<img
src="https://jitpack.io/v/lukasl-dev/jwinkey.svg"
src="https://img.shields.io/badge/Build-Jitpack-lgreen?style=for-the-badge"
height="30"
/>
</a>
<a href="https://jitpack.io/#lukasl-dev/jwinkey/1.0.6">
<a href="https://micartey.github.io/jwinkey/docs" target="_blank">
<img
src="https://jitci.com/gh/lukasl-dev/jwinkey/svg"
src="https://img.shields.io/badge/javadoc-reference-5272B4.svg?style=for-the-badge"
height="30"
/>
</a>
</a>
</div>

<br>

- [jwinkey](#jwinkey)
- [What is `jwinkey`?](#what-is-jwinkey)
- [Dependency](#dependency)
- [Gradle](#gradle)
- [Maven](#maven)
- [Getting started](#getting-started)
<p align="center">
<a href="#-introduction">Introduction</a> |
<a href="#-terms-of-use">Getting started</a> |
<a href="https://github.com/lukasl-dev/jwinkey/issues">Troubleshooting</a>
</p>

---
## 📚 Introduction

## What is `jwinkey`?

`jwinkey` is a windowless/global keyboard and mouse listener for Windows written in Java.
`jwinkey` is a windowless/global keyboard and mouse listener for Windows written in Java. It works by using the windows api in order to work even if the window isn't focused or hidden.

**You are a Go developer? Check this out: <https://github.com/daspoet/gowinkey/>**

---
## 📝 Getting started

## Dependency
To use `jwinkey` with Gradle or Maven, check out the documentation of jitpack [[here]](https://jitpack.io/#lukasl-dev/jwinkey/)

### Gradle
### Create a keyboard observer

Add the [JitPack](https://jitpack.io/#lukasl-dev/jwinkey/1.0.6) repository to your build file.
In order to observe for keyboard interactions, you need to create a `KeyStateObservable` with an array of `VirtualKey` which contains all keys that the given observer will look for.

```groovy
repositories {
maven { url = 'https://jitpack.io' }
}
```
```java
import dev.lukasl.jwinkey.enums.VirtualKey;
import dev.lukasl.jwinkey.observables.KeyStateObservable;

Add the dependency to your build file.

```groovy
dependencies {
implementation 'com.github.lukasl-dev:jwinkey:1.0.6'
}
KeyStateObservable observer = KeyStateObservable.of(Arrays.asList(
VirtualKey.VK_SHIFT,
VirtualKey.VK_LEFT_SHIFT,
VirtualKey.VK_RIGHT_SHIFT
));
```

### Maven

Add the [JitPack](https://jitpack.io/#lukasl-dev/jwinkey/1.0.6) repository to your build file.

```xml

<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
```

Add the dependency to your build file.

```xml

<dependencies>
<dependency>
<groupId>com.github.lukasl-dev</groupId>
<artifactId>jwinkey</artifactId>
<version>1.0.6</version>
</dependency>
</dependencies>
```
### Do on changes

---
After creating the observer in the step above, you can append different consumers to the observer which will be invoked once changes occur.

## Getting started
```java
observer.subscribe(keyState -> {
if (keyState.getKeyState().equals(KeyState.PRESSED))
return;

Coming soon...
System.out.println("Shift released");
})
```
26 changes: 26 additions & 0 deletions docs/allclasses-frame.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="de">
<head>
<!-- Generated by javadoc (1.8.0_181) on Wed Oct 19 20:56:15 CEST 2022 -->
<title>All Classes</title>
<meta name="date" content="2022-10-19">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h1 class="bar">All&nbsp;Classes</h1>
<div class="indexContainer">
<ul>
<li><a href="dev/lukasl/jwinkey/components/Hotkey.html" title="class in dev.lukasl.jwinkey.components" target="classFrame">Hotkey</a></li>
<li><a href="dev/lukasl/jwinkey/throwables/HotkeyException.html" title="class in dev.lukasl.jwinkey.throwables" target="classFrame">HotkeyException</a></li>
<li><a href="dev/lukasl/jwinkey/JWinKey.html" title="class in dev.lukasl.jwinkey" target="classFrame">JWinKey</a></li>
<li><a href="dev/lukasl/jwinkey/enums/KeyState.html" title="enum in dev.lukasl.jwinkey.enums" target="classFrame">KeyState</a></li>
<li><a href="dev/lukasl/jwinkey/observables/KeyStateObservable.html" title="class in dev.lukasl.jwinkey.observables" target="classFrame">KeyStateObservable</a></li>
<li><a href="dev/lukasl/jwinkey/components/KeyStateUpdate.html" title="class in dev.lukasl.jwinkey.components" target="classFrame">KeyStateUpdate</a></li>
<li><a href="dev/lukasl/jwinkey/enums/Modifier.html" title="enum in dev.lukasl.jwinkey.enums" target="classFrame">Modifier</a></li>
<li><a href="dev/lukasl/jwinkey/enums/VirtualKey.html" title="enum in dev.lukasl.jwinkey.enums" target="classFrame">VirtualKey</a></li>
</ul>
</div>
</body>
</html>
26 changes: 26 additions & 0 deletions docs/allclasses-noframe.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="de">
<head>
<!-- Generated by javadoc (1.8.0_181) on Wed Oct 19 20:56:15 CEST 2022 -->
<title>All Classes</title>
<meta name="date" content="2022-10-19">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h1 class="bar">All&nbsp;Classes</h1>
<div class="indexContainer">
<ul>
<li><a href="dev/lukasl/jwinkey/components/Hotkey.html" title="class in dev.lukasl.jwinkey.components">Hotkey</a></li>
<li><a href="dev/lukasl/jwinkey/throwables/HotkeyException.html" title="class in dev.lukasl.jwinkey.throwables">HotkeyException</a></li>
<li><a href="dev/lukasl/jwinkey/JWinKey.html" title="class in dev.lukasl.jwinkey">JWinKey</a></li>
<li><a href="dev/lukasl/jwinkey/enums/KeyState.html" title="enum in dev.lukasl.jwinkey.enums">KeyState</a></li>
<li><a href="dev/lukasl/jwinkey/observables/KeyStateObservable.html" title="class in dev.lukasl.jwinkey.observables">KeyStateObservable</a></li>
<li><a href="dev/lukasl/jwinkey/components/KeyStateUpdate.html" title="class in dev.lukasl.jwinkey.components">KeyStateUpdate</a></li>
<li><a href="dev/lukasl/jwinkey/enums/Modifier.html" title="enum in dev.lukasl.jwinkey.enums">Modifier</a></li>
<li><a href="dev/lukasl/jwinkey/enums/VirtualKey.html" title="enum in dev.lukasl.jwinkey.enums">VirtualKey</a></li>
</ul>
</div>
</body>
</html>
124 changes: 124 additions & 0 deletions docs/constant-values.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="de">
<head>
<!-- Generated by javadoc (1.8.0_181) on Wed Oct 19 20:56:15 CEST 2022 -->
<title>Constant Field Values</title>
<meta name="date" content="2022-10-19">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Constant Field Values";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="overview-summary.html">Overview</a></li>
<li>Package</li>
<li>Class</li>
<li>Use</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Constant Field Values" class="title">Constant Field Values</h1>
<h2 title="Contents">Contents</h2>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="overview-summary.html">Overview</a></li>
<li>Package</li>
<li>Class</li>
<li>Use</li>
<li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?constant-values.html" target="_top">Frames</a></li>
<li><a href="constant-values.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
Loading