{"id":20165383,"url":"https://github.com/pattazl/showkeyboard","last_synced_at":"2026-04-14T16:00:52.980Z","repository":{"id":191953457,"uuid":"685567535","full_name":"pattazl/showKeyBoard","owner":"pattazl","description":"Display keyboard, mouse, or gamepad keys, analyze key data and application usage","archived":false,"fork":false,"pushed_at":"2026-03-09T11:56:19.000Z","size":31744,"stargazers_count":133,"open_issues_count":1,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-03-09T16:51:23.745Z","etag":null,"topics":["app-statistics","apphistory","carnac","heatmap","history","keyboard","keyboardindicator","keypress","keystroke","manictime","mouse-history-record","show","whatpluse"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pattazl.png","metadata":{"files":{"readme":"README_CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-31T14:17:21.000Z","updated_at":"2026-03-09T11:59:20.000Z","dependencies_parsed_at":"2023-09-01T18:05:19.922Z","dependency_job_id":"447eb619-a289-41d4-a515-594079285834","html_url":"https://github.com/pattazl/showKeyBoard","commit_stats":null,"previous_names":["pattazl/showkeyboard"],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/pattazl/showKeyBoard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pattazl%2FshowKeyBoard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pattazl%2FshowKeyBoard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pattazl%2FshowKeyBoard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pattazl%2FshowKeyBoard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pattazl","download_url":"https://codeload.github.com/pattazl/showKeyBoard/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pattazl%2FshowKeyBoard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31803790,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app-statistics","apphistory","carnac","heatmap","history","keyboard","keyboardindicator","keypress","keystroke","manictime","mouse-history-record","show","whatpluse"],"created_at":"2024-11-14T00:37:40.197Z","updated_at":"2026-04-14T16:00:52.975Z","avatar_url":"https://github.com/pattazl.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# showKeyBoard\n\n[English](./readme.md) | [简体中文](./README_CN.md)\n\n## 功能简介\n\n1. 按键统计，可自定义键盘，查看统计数据\n2. 按键显示，实时显示按键状态，支持多种按键显示风格，圆角、渐变消失、自定义移动方向等，支持多屏，类似 Carnac 功能\n3. 支持中英文切换和主题切换\n4. 支持参数导入导出\n5. 可支持远程统计和设置\n6. 为了隐私安全，只记录统计信息，不记录具体内容，且内容保存在本地\n7. 支持应用程序的鼠标和键盘使用统计\n8. 支持每个应用的使用时间分析。基本原理：统计每分钟使用应用的清单，然后分摊后汇总到每个应用，注意：应用需要有鼠标或键盘操作才算使用\n9. 实时显示控制键/状态键状态，包括大小写状态，scroll状态，数字键，Ctrl，Shift，Atl等键。\n10. 显示最近N个按键(不保存)\n11. 支持游戏手柄摇杆和按键检测\n12. 支持通过第三方工具（推荐FreeFileSync）实现多台设备记录的同步\n13. 支持历史应用时长统计和每日使用时长和应用数量趋势分析\n14. 支持通过Web页面实时查看按键信息，方法：设置-\u003e按键界面-\u003eWeb按键显示，从而可以支持OBS(Open Broadcaster Software)中独立显示按键，也可关闭桌面按键显示只在web中显示。\n\n## 系统要求\n\n1. Windows 64 位系统，推荐 Windows10 或 Windows11\n2. 有现代浏览器（Edge/Chrome/FireFox 等）\n\n## 使用方法\n\n第一次安装或没有 node10 以上环境，安装\n\n`ShowKeyBoard_Setup_版本_日期.exe`\n\n直接解压可用如下版本，但是此版本升级时需要手工备份还原数据\n\n`ShowKeyBoard_portable_版本_日期.exe`\n\n如果有 node10 及以上环境或已经安装过一次，安装\n\n`ShowKeyBoard_Setup_版本_日期(node).exe` 或 `ShowKeyBoard_Setup_版本_日期.node.exe` \n\n安装时根据提示进行选择，如是否保留配置，是否创建快捷方式等，一般使用默认配置即可\n\n**注意**：\n1. 由于使用了系统钩子，可能部分电脑上会误报病毒，需要信任。\n2. 部分系统上可能需要使用管理员方式运行，否则不能监听到按键\n3. 有些公司可能安装了加密软件，将对配置文件进行加密，将导致参数全部失效，此时可以修改安装目录下的 `./httpdist/dist/node.exe` 重命名为  `./httpdist/dist/chrome.exe`(策略允许) ,修改安装目录的 showKeyBoard.ini 文件，增加参数` serverExecName=./httpdist/dist/chrome.exe`\n4. 如果系统时间不正确，比如某一天的时间变成了N年后，可能导致之后的应用时长数据丢失，请运行安装目录的 fixStat修复统计数据.bat\n\n### 同步说明\n\n此处以 FreeFileSync 同步FTP举例\n\n1. 首先设定共享文件的保存目录，默认为安装目录下的 **share**\n2. 在 FreeFileSync 中配置本地share 和 FTP服务器双向同步，将同步文件生成为 ffs_batch文件，比如 Keyboard.ffs_batch\n3. 设定\"**生成共享文件间隔小时数**\" ,表示每隔多久将本地的记录打包\n4. 设置打包完成后自动执行的命令，如果安装了 FreeFileSync ,则可以直接执行 ffs_batch文件，比如命令可配置为上面的 Keyboard.ffs_batch\n5. 共享名默认为计算机名，可自行更改，将会在 历史和统计模块显示\n6. 系统每分钟会检查 共享文件目录的文件，解压到**dbs**目录中，如果有更新则会重新解压\n7. 在 历史和统计模块 可选择和查看本地解压后的其他设备的记录\n\n## 截图演示\n\n![实时显示按键状态和内容](screenshot/%E5%AE%9E%E6%97%B6%E6%98%BE%E7%A4%BA%E6%8C%89%E9%94%AE%E7%8A%B6%E6%80%81%E5%92%8C%E5%86%85%E5%AE%B9.gif)\n\n![历史按键趋势](screenshot/%E5%8E%86%E5%8F%B2%E6%8C%89%E9%94%AE%E8%B6%8B%E5%8A%BF.png)\n\n![实时按键热力图](screenshot/%E5%AE%9E%E6%97%B6%E6%8C%89%E9%94%AE%E7%83%AD%E5%8A%9B%E5%9B%BE.jpg)\n\n![image-20250324183940491](screenshot/today.png)\n\n![自定义键盘](screenshot/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%94%AE%E7%9B%98.png)\n\n![setting](screenshot/setting.png)\n\n![data](screenshot/data.png)\n\n![keymap](screenshot/keymap.png)\n\n![dialogsetting](screenshot/dialogsetting.png)\n\n![appStat](screenshot/appStat.png)\n\n![appHistory](screenshot/appHistory.png)\n\n## 技术架构\n\n按键监控客户端采用 AutoHotkey v2.1alpha.18 + Windows API\n\n界面显示用 HTML，node 做 WebSocket 和 HTTP 通讯\n\n客户端程序只管读取配置文件和发送数据，一般不写配置文件\n\n客户端有一个底层钩子进程，用于将进程和数据处理界面显示分离\n\nHTTP 端负责写配置文件，接收 HTML 前端数据\n\n```mermaid\ngraph LR\nClient --\u003e|Post/Launch|NodeServer ---|WebSocket/Post/Get|Web\nNodeServer --\u003e|WebSocket|Client\nNodeServer ---|R/W|ConfigFile\nConfigFile --\u003e|Reload|Client\nHookKey --\u003e|SendMessage|Client\nClient --\u003e|Launch|HookKey\n```\n\n## 编译说明\n\n1. `http` 里面的是服务器端代码，使用 `npm run build` 打包，生成 `httpdist` 目录\n2. `ui-helper` 是客户端配置页面 `npm run build` 生成 `dist` 目录，发布时候要放到 `httpdist/dist/ui` 目录中\n3. 根目录是 AutoHotkey v2.1alpha.18 脚本，需要用 AutoHotkey 工具对 `showKeyBoard.ahk` 打包为 exe，对应的 exe 文件需要放到和 `httpdist` 同级目录\n\n## 目录说明\n\n1. 根目录下的 `KeyList.txt` 键盘映射关系，`showKeyBoard.ini` 是客户端配置信息\n2. 目录 `httpdist/dist/records.db` 文件保存按键的统计信息和统计的相关配置信息\n3. 文件 `httpdist/dist/node.exe` 用于启动后端 `http/websocket` 服务\n\n## 二次开发\n\n每个目录下均有 readme.md或readme.txt提供相关说明，相关开发接口见 [接口说明](./ interface.md)\n\n## 已知问题\n\n在快速输入的时候，由于通过队列处理，所以界面显示可能会有一定延时\n\n## 感谢\n\n客户端功能参考 [KMCounter](https://github.com/telppa/KMCounter) 和 [Carnac](https://github.com/Code52/carnac) 的部分设计\n\nUI 界面使用 [Naive UI](https://www.naiveui.com/) 框架","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpattazl%2Fshowkeyboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpattazl%2Fshowkeyboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpattazl%2Fshowkeyboard/lists"}