Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
8af85e7
feat: customize input methods, macro triggers and improvements by GMTPC
ghostminhtoan Aug 17, 2026
f5af877
ponyman: batch SendInput events for lower input latency
ghostminhtoan Aug 17, 2026
430853b
fix: reset stale _flag and guard IME null after alt-tab from game
ghostminhtoan Aug 17, 2026
275dc16
fix: TBT 6/7/8/9 luon output standalone, bo logic ghep a6 e7 o8 a9; f…
ghostminhtoan Aug 17, 2026
9dee0ff
fix: alt+\ toggle backslash; IDM clipboard restore; TBT giu]/uo fix g…
ghostminhtoan Aug 17, 2026
606dd25
ponyman: fix consecutive numbers typing and distinct beep sounds
ghostminhtoan Aug 17, 2026
f195792
ponyman: beep tram-bong cho switch VI/EN va alt-backslash; fix TBT so…
ghostminhtoan Aug 18, 2026
7e83eb4
ponyman: fix TBT numbers typing to instantly restore raw input on con…
ghostminhtoan Aug 18, 2026
461f65c
ponyman: sync beep sounds for Eng-VI and Alt+\ switch across all files
ghostminhtoan Aug 18, 2026
b22acb5
ponyman: change vcxproj output directory to win32/OpenKey/x64/Release…
ghostminhtoan Aug 18, 2026
96b4854
ponyman: toi uu kieu go TBT, macro enter/numpad, unhook ctrl va defau…
ghostminhtoan Aug 18, 2026
4cb6a51
ponyman: restrict wrong spelling restore to space enter and punctuation
ghostminhtoan Aug 19, 2026
18bc005
ponyman: batch small macro sendinput events
ghostminhtoan Aug 19, 2026
06cc876
ponyman: switch macro sendinput or clipboard based on line count
ghostminhtoan Aug 19, 2026
1e0cbea
ponyman: default ctrl+shift switch, per-app exclusions and emoji shor…
ghostminhtoan Aug 19, 2026
0b73ac9
ponyman: add cycle case shortcut and caret indicator overlay, remove …
ghostminhtoan Aug 19, 2026
69b3d67
ponyman: reselect text after cycle case to support continuous shift+f3
ghostminhtoan Aug 19, 2026
07b89e3
ponyman: fix reselection modifiers release after cycle case
ghostminhtoan Aug 19, 2026
82f6bb5
ponyman: robust cycle case reselection and always show caret overlay …
ghostminhtoan Aug 19, 2026
550ee96
ponyman: increase overlay delay to 1.6s and anchor position to focuse…
ghostminhtoan Aug 19, 2026
9e38c7b
ponyman: dynamic in-game chat text input detection and smart switch
ghostminhtoan Aug 20, 2026
fe61cde
ponyman: bỏ xử lý dấu tiếng Việt cho phím số numpad trong kiểu gõ Tư …
ghostminhtoan Aug 21, 2026
85b851c
Merge branch 'GMTPC' of https://github.com/ghostminhtoan/OpenKey into…
ghostminhtoan Aug 21, 2026
af2d6e2
feat: add shortcuts tab with F1-F12 hotkeys and fix numpad vs dpad an…
ghostminhtoan Aug 31, 2026
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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,9 @@
/Sources/OpenKey/win32/OpenKey/OpenKey/x64/Debug
/Sources/OpenKey/win32/OpenKey/OpenKey/x64/Release
/Sources/OpenKey/win32/OpenKey/OpenKeyUpdate/x64/Release

# Local agent/workflow files
/workflow.md
/build.cmd
/.agents
/.agents/
18 changes: 18 additions & 0 deletions .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "gcc",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "windows-gcc-x64",
"compilerArgs": [
""
]
}
],
"version": 4
}
24 changes: 24 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++ Runner: Debug Session",
"type": "cppdbg",
"request": "launch",
"args": [],
"stopAtEntry": false,
"externalConsole": true,
"cwd": "c:/Users/Admin/source/repos/ghostminhtoan/openkey/Sources/OpenKey/win32/OpenKey/OpenKey",
"program": "c:/Users/Admin/source/repos/ghostminhtoan/openkey/Sources/OpenKey/win32/OpenKey/OpenKey/build/Debug/outDebug",
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
59 changes: 59 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{
"C_Cpp_Runner.cCompilerPath": "gcc",
"C_Cpp_Runner.cppCompilerPath": "g++",
"C_Cpp_Runner.debuggerPath": "gdb",
"C_Cpp_Runner.cStandard": "",
"C_Cpp_Runner.cppStandard": "",
"C_Cpp_Runner.msvcBatchPath": "",
"C_Cpp_Runner.useMsvc": false,
"C_Cpp_Runner.warnings": [
"-Wall",
"-Wextra",
"-Wpedantic",
"-Wshadow",
"-Wformat=2",
"-Wcast-align",
"-Wconversion",
"-Wsign-conversion",
"-Wnull-dereference"
],
"C_Cpp_Runner.msvcWarnings": [
"/W4",
"/permissive-",
"/w14242",
"/w14287",
"/w14296",
"/w14311",
"/w14826",
"/w44062",
"/w44242",
"/w14905",
"/w14906",
"/w14263",
"/w44265",
"/w14928"
],
"C_Cpp_Runner.enableWarnings": true,
"C_Cpp_Runner.warningsAsError": false,
"C_Cpp_Runner.compilerArgs": [],
"C_Cpp_Runner.linkerArgs": [],
"C_Cpp_Runner.includePaths": [],
"C_Cpp_Runner.includeSearch": [
"*",
"**/*"
],
"C_Cpp_Runner.excludeSearch": [
"**/build",
"**/build/**",
"**/.*",
"**/.*/**",
"**/.vscode",
"**/.vscode/**"
],
"C_Cpp_Runner.useAddressSanitizer": false,
"C_Cpp_Runner.useUndefinedSanitizer": false,
"C_Cpp_Runner.useLeakSanitizer": false,
"C_Cpp_Runner.showCompilationTime": false,
"C_Cpp_Runner.useLinkTimeOptimization": false,
"C_Cpp_Runner.msvcSecureNoWarnings": false
}
17 changes: 15 additions & 2 deletions Sources/OpenKey/engine/DataType.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ enum vKeyInputType {
vTelex = 0,
vVNI,
vSimpleTelex1,
vSimpleTelex2
vSimpleTelex2,
vTuBinhTranDonGian,
vTuDinhNghia
};

typedef unsigned char Byte;
Expand Down Expand Up @@ -71,6 +73,7 @@ struct vKeyHookState {
* 2: Delete key
* 3: Normal key
* 4: Should not send empty character
* 6: Macro triggered by Space, send one trailing space
*/
Byte extCode;

Expand All @@ -80,6 +83,11 @@ struct vKeyHookState {
vector<Uint32> macroData; //used for macro function; it is keycode data
};

struct CustomRule {
Uint32 key;
int action;
};

#ifdef LINUX
#include "platforms/linux.h"
#elif _WIN32
Expand Down Expand Up @@ -131,6 +139,7 @@ struct vKeyHookState {
//#define IS_MARK_KEY(keyCode) (keyCode == KEY_S || keyCode == KEY_F || keyCode == KEY_R || keyCode == KEY_J || keyCode == KEY_X)
#define CHR(index) (Uint16)TypingWord[index]
#define IS_SPECIALKEY(keyCode) \
(vInputType == vTuDinhNghia ? isSpecialKeyCustom(keyCode) : \
(vInputType == vTelex ? \
keyCode == KEY_W || keyCode == KEY_E || keyCode == KEY_R || keyCode == KEY_O || keyCode == KEY_LEFT_BRACKET || \
keyCode == KEY_RIGHT_BRACKET || keyCode == KEY_A || keyCode == KEY_S || keyCode == KEY_D || keyCode == KEY_F || keyCode == KEY_J || \
Expand All @@ -143,7 +152,11 @@ struct vKeyHookState {
keyCode == KEY_D || keyCode == KEY_F || keyCode == KEY_J || keyCode == KEY_Z || keyCode == KEY_X || keyCode == KEY_W \
: (vInputType == vSimpleTelex2 ? \
keyCode == KEY_W || keyCode == KEY_E || keyCode == KEY_R || keyCode == KEY_O || keyCode == KEY_A || keyCode == KEY_S || \
keyCode == KEY_D || keyCode == KEY_F || keyCode == KEY_J || keyCode == KEY_Z || keyCode == KEY_X || keyCode == KEY_W : false))))
keyCode == KEY_D || keyCode == KEY_F || keyCode == KEY_J || keyCode == KEY_Z || keyCode == KEY_X || keyCode == KEY_W \
: (vInputType == vTuBinhTranDonGian ? \
keyCode == KEY_1 || keyCode == KEY_2 || keyCode == KEY_3 || keyCode == KEY_4 || keyCode == KEY_5 || \
keyCode == KEY_6 || keyCode == KEY_7 || keyCode == KEY_8 || keyCode == KEY_9 || keyCode == KEY_0 || \
keyCode == KEY_Z || keyCode == KEY_D || keyCode == KEY_LEFT_BRACKET || keyCode == KEY_RIGHT_BRACKET : false))))))

//is VNI or Unicode compound...
#define IS_DOUBLE_CODE(code) (code == 2 || code == 3)
Expand Down
Loading