add 硬件控制模块 (hardware_control.py) 并修复游戏状态扫描区域宽度

- 新增 wyhkm.dll 硬件盒子 COM 接口封装,支持键盘鼠标控制
- 修复 game_state_config.json 中 scan_region_width 过小导致截图越界的问题
- 添加鼠标路径录制器、硬件测试脚本等工具
- 更新多项配置默认值

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
王鹏
2026-04-15 12:15:00 +08:00
parent b4de5278ed
commit 33dc741fd9
203 changed files with 12197 additions and 247 deletions

View File

@@ -0,0 +1,131 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>HKMGetError</title>
<link rel="stylesheet" type="text/css" href="css/help.css">
</head>
<body>
<table width="100%" border="0" cellpadding="0" cellspacing="1" class="ts">
<tr>
<th width="50"><EFBFBD><EFBFBD><EFBFBD><EFBFBD></th>
<td class="name">HKMGetError <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></td>
</tr>
<tr>
<th><EFBFBD><EFBFBD><EFBFBD><EFBFBD></th>
<td><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>йغ<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>к<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>иú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>йغ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD></td>
</tr>
<tr>
<th><EFBFBD><EFBFBD><EFBFBD><EFBFBD></th>
<td class="canshu"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>ʹ<EFBFBD><EFBFBD><a href="HKMOpen.html">HKMOpen</a><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></td>
</tr>
<tr>
<th><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ</th>
<td class="fanhui"><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>0<EFBFBD>dzɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>57344<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳAPI&ldquo;GetLastError&rdquo;<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ֵ<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ľ<EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>57344<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><br />
<table width="370" border="1" cellpadding="0" cellspacing="0">
<tr>
<th width="80" scope="col"><span class="thf">ֵ</span></th>
<th width="100" scope="col"><span class="thf">˵<EFBFBD><EFBFBD></span></th>
<th width="80" scope="col"><span class="thf">ֵ</span></th>
<th width="100" scope="col"><span class="thf">˵<EFBFBD><EFBFBD></span></th>
</tr>
<tr>
<td>0000(0)</td>
<td><EFBFBD>ɹ<EFBFBD></td>
<td>E020(57376)</td>
<td><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸ʧ<EFBFBD><EFBFBD></td>
</tr>
<tr>
<td>E001(57345)</td>
<td>ʧ<EFBFBD><EFBFBD></td>
<td>E021(57377)</td>
<td>ͨ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD></td>
</tr>
<tr>
<td>E002(57346)</td>
<td><EFBFBD><EFBFBD>Ч<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD></td>
<td>E022(57378)</td>
<td><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD></td>
</tr>
<tr>
<td>E003(57347)</td>
<td><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD></td>
<td>E023(57379)</td>
<td><EFBFBD><EFBFBD>ʱ</td>
</tr>
<tr>
<td>E004(57348)</td>
<td><EFBFBD><EFBFBD>Ч<EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD></td>
<td>E024(57380)</td>
<td><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD></td>
</tr>
<tr>
<td>E005(57349)</td>
<td><EFBFBD><EFBFBD>Ч<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD>ֵ</td>
<td>E025(57381)</td>
<td><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></td>
</tr>
<tr>
<td>E006(57350)</td>
<td><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></td>
<td>E026(57382)</td>
<td><EFBFBD><EFBFBD>ȡDPI<EFBFBD><EFBFBD>Ϣʧ<EFBFBD><EFBFBD></td>
</tr>
<tr>
<td>E007(57351)</td>
<td><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD></td>
<td>E027(57383)</td>
<td><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD></td>
</tr>
<tr>
<td>E008(57352)</td>
<td><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD></td>
<td>E028(57384)</td>
<td><EFBFBD>豸ʧ<EFBFBD><EFBFBD></td>
</tr>
<tr>
<td>E009(57353)</td>
<td><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫С</td>
<td>E029(57385)</td>
<td><EFBFBD><EFBFBD><EFBFBD>ʱ</td>
</tr>
<tr>
<td>E00A(57354)</td>
<td><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>E00B(57355)</td>
<td><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>E00C(57356)</td>
<td>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table></td>
</tr>
<tr>
<th>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><br /><EFBFBD><EFBFBD><EFBFBD><EFBFBD></th>
<td class="lizi">DWORD dwDevId;<br />
LPVOID lpDev;<br />
dwDevId=HKMSearchDevice(0x1234,0xABCD,0);<br />
if(dwDevId==0xFFFFFFFF)<br />
{<br /> &nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;δ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n&quot;);<br /> &nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
lpDev=HKMOpen(dwDevId,0);<br />
if(lpDev==NULL)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
printf(&quot;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%04X\n&quot;,HKMGetError(lpDev) &amp; 0xFFFF);<br />
HKMClose(lpDev);</td>
</tr>
</table>
</body>
</html>