Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 065d341320 | |||
| 24384d70ba |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "jiangchang-platform-kit"
|
||||
version = "1.2.8"
|
||||
version = "1.2.10"
|
||||
description = "匠厂平台共享组件:Skill 实体 SDK + 桌面应用自动化 SDK + 桌面 UIA 暖树"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.10"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# jiangchang_desktop_wake 验收(ensure 主路径,1.2.8+)
|
||||
# jiangchang_desktop_wake 验收(ensure 主路径,1.2.10+)
|
||||
|
||||
正式对外路径是 **`ensure`**(内部:`activate` → `desktop-wake --mode n2-wake` → `probe`)。
|
||||
`n2-wake`:**仅 OBJID_CLIENT** 走 DuiLib;不做进程内 FindAll、不同步 GETOBJECT、不 SPI 读屏;判暖只看进程外 probe。
|
||||
@@ -7,7 +7,7 @@
|
||||
| profile | 窗 | 说明 |
|
||||
|---|---|---|
|
||||
| `wecom` | `WeWorkWindow` | 主窗(原有) |
|
||||
| `wecom_search` | `SearchResultWindow2` | 搜索浮层;**不对浮层 Maximize**;n2-wake **子类化浮层本身**(DLL 支持多窗;主窗已暖后仍可再装浮层) |
|
||||
| `wecom_search` | `SearchResultWindow2` | 搜索浮层;**不对浮层 Maximize**;n2-wake **子类化浮层本身**(多 HWND;1.2.10+) |
|
||||
|
||||
## 0. 编译(企微先完全退出,含托盘)
|
||||
|
||||
@@ -77,9 +77,9 @@ python -m jiangchang_desktop_wake probe --profile wecom
|
||||
|
||||
---
|
||||
|
||||
## C. 搜索浮层 wecom_search(1.2.8+)
|
||||
## C. 搜索浮层 wecom_search(1.2.10+)
|
||||
|
||||
1. **建议先** `ensure --profile wecom` 暖主窗(可与浮层分步)。
|
||||
1. **建议先** `ensure --profile wecom` 暖主窗(可与浮层分步;验证多 HWND)。
|
||||
2. 在搜索框输入联系人,**保持搜索结果浮层打开**(类名 `SearchResultWindow2`)。
|
||||
3. 验收:
|
||||
|
||||
@@ -94,9 +94,9 @@ python -m jiangchang_desktop_wake probe --profile wecom_search
|
||||
| 期望 | 说明 |
|
||||
|---|---|
|
||||
| ensure 退出码 `0` | 浮层已暖 |
|
||||
| `warm=true` | markers 含 `search_result` / `user_item`(或 findall 足够) |
|
||||
| `%TEMP%\jiangchang_desktop_wake_subclass.txt` | 含浮层 hwnd,`ok=1`(主窗已暖后再 ensure 浮层也会再写一条) |
|
||||
| 企微 UI | 浮层**不**被 Maximize 撑满、**不白屏**、不无故关闭 |
|
||||
| `warm=true` | markers 含 `search_result` / `user_item`;findall 从 ~2 升到几十/上百 |
|
||||
| `%TEMP%\jiangchang_desktop_wake_subclass.txt` | 含浮层 hwnd,`ok=1`(主窗已暖后再 ensure 浮层可 `slots>=2`) |
|
||||
| 企微 UI | 浮层**不**被 Maximize、**不崩**、不无故关闭 |
|
||||
| `WINDOW_NOT_FOUND` | 浮层未打开——先展开搜索结果再测 |
|
||||
|
||||
---
|
||||
|
||||
@@ -42,7 +42,7 @@ print(rs.warm, rs.probe_after.findall_count, rs.probe_after.markers_found)
|
||||
| profile | 窗 | 说明 |
|
||||
|---|---|---|
|
||||
| `wecom` | `WeWorkWindow` | 主窗;markers=`con_op`,`searchedit` |
|
||||
| `wecom_search` | `SearchResultWindow2` | 搜索浮层;markers=`search_result`,`user_item`;不 Maximize;**n2-wake 对浮层子类化**(1.2.8+ 支持主窗+浮层多窗) |
|
||||
| `wecom_search` | `SearchResultWindow2` | 搜索浮层;markers=`search_result`,`user_item`;不 Maximize;**n2-wake 对浮层子类化**(1.2.10+) |
|
||||
|
||||
| CLI | 退出码 |
|
||||
|---|---|
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -169,6 +169,8 @@ namespace JiangchangDesktopWake
|
||||
if (!doWakeProvider)
|
||||
EnableScreenReaderFlag();
|
||||
|
||||
// 1.2.10:允许对 SearchResultWindow2 n2-wake(本机验证可暖且不崩);
|
||||
// 仍靠 ShouldMaximize=false,禁止 Maximize 打掉浮层。
|
||||
if (doN2)
|
||||
{
|
||||
string n2Detail;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
* - 不做进程内 UIAutomation FindAll;不做同步 SendMessage(GETOBJECT)
|
||||
* - 重入守卫;判暖交给进程外 probe
|
||||
* 1.2.8:支持多 HWND 子类化(主窗 + SearchResultWindow2),禁止「全局只装一次」。
|
||||
* 1.2.10:恢复对 SearchResultWindow2 子类化暖树(本机验证 2→122 且不崩);仍禁止 Maximize(exe 侧)。
|
||||
*/
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
@@ -44,7 +44,7 @@ _BUILTIN = {
|
||||
},
|
||||
"wecom_search": {
|
||||
"id": "wecom_search",
|
||||
"description": "企业微信搜索结果浮层 SearchResultWindow2(n2-wake 对浮层子类化,1.2.8+)",
|
||||
"description": "企业微信搜索结果浮层 SearchResultWindow2;n2-wake 对浮层子类化(1.2.10+),禁止 Maximize",
|
||||
"window_class": "SearchResultWindow2",
|
||||
"warm_min_findall": 20,
|
||||
"warm_markers": ["search_result", "user_item"],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"id": "wecom_search",
|
||||
"description": "企业微信搜索结果浮层 SearchResultWindow2(联系人列表 user_item);n2-wake 对浮层本身子类化(1.2.8+ 支持多窗),禁止 Maximize",
|
||||
"description": "企业微信搜索结果浮层 SearchResultWindow2;n2-wake 对浮层子类化暖树(1.2.10+),禁止 Maximize",
|
||||
"window_class": "SearchResultWindow2",
|
||||
"warm_min_findall": 20,
|
||||
"warm_markers": ["search_result", "user_item"],
|
||||
|
||||
@@ -30,7 +30,7 @@ class Profile:
|
||||
# 浮层窗(如搜索结果)禁止 Maximize,避免打乱搜索态
|
||||
activate_maximize: bool = True
|
||||
# native_helper / n2-wake 目标窗 class;空则用 probe 窗本身。
|
||||
# 1.2.8+ wecom_search 留空(对浮层子类化);若需改注其它窗可再设。
|
||||
# 1.2.10+ wecom_search 留空(对浮层自身 n2-wake);勿改注主窗。
|
||||
native_hwnd_class: Optional[str] = None
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -34,7 +34,7 @@ class ProfileTests(unittest.TestCase):
|
||||
self.assertIn("search_result", p.warm_markers)
|
||||
self.assertIn("user_item", p.warm_markers)
|
||||
self.assertFalse(p.activate_maximize)
|
||||
# 1.2.8+:对浮层本身 n2-wake(多窗子类化);不再改注主窗
|
||||
# 1.2.10+:对浮层本身 n2-wake(多窗子类化);禁止 Maximize;不改注主窗
|
||||
self.assertFalse((p.native_hwnd_class or "").strip())
|
||||
self.assertIn("native_helper", p.wake_strategies)
|
||||
self.assertIn("n2-wake", p.native_args or [])
|
||||
|
||||
Reference in New Issue
Block a user