pctr 0.3.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pctr
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Element-based Windows UI Automation CLI for AI agents. Find controls by name/type/id and click, type, hold, drag, and screenshot - no pixel coordinates.
5
5
  Author: Space-lab515
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pctr"
7
- version = "0.3.0"
7
+ version = "0.3.1"
8
8
  description = "Element-based Windows UI Automation CLI for AI agents. Find controls by name/type/id and click, type, hold, drag, and screenshot - no pixel coordinates."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -0,0 +1 @@
1
+ __version__ = "0.3.1"
@@ -36,30 +36,11 @@ def _iter_windows():
36
36
 
37
37
 
38
38
  def _find_window(title_re, process=None, timeout=5.0, index=0):
39
- rx_title = _compile(title_re, "title") if title_re else None
40
- desktop = Desktop(backend="uia")
41
- deadline = time.time() + timeout
42
- last = None
43
- while time.time() < deadline:
44
- matches = []
45
- for w in desktop.windows():
46
- try:
47
- t = w.window_text()
48
- except Exception:
49
- continue
50
- if rx_title and not rx_title.search(t):
51
- continue
52
- if process is not None and w.process_id() != process:
53
- continue
54
- matches.append(w)
55
- if len(matches) > index:
56
- return matches[index]
57
- last = matches
58
- time.sleep(0.25)
59
- raise SystemExit(
60
- "window not found: title_re=%r process=%r (saw %d match(es))"
61
- % (title_re, process, len(last or []))
62
- )
39
+ # Locate the HWND with Win32 first (fast, and never touches UIA providers of
40
+ # windows on *other* virtual desktops, which don't answer and can deadlock a
41
+ # full desktop enumeration). Then bind a UIA wrapper to just that one window.
42
+ h = _find_hwnd(title_re, process, timeout)
43
+ return Desktop(backend="uia").window(handle=h)
63
44
 
64
45
 
65
46
  def _enum_top_windows():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pctr
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Element-based Windows UI Automation CLI for AI agents. Find controls by name/type/id and click, type, hold, drag, and screenshot - no pixel coordinates.
5
5
  Author: Space-lab515
6
6
  License-Expression: MIT
@@ -1 +0,0 @@
1
- __version__ = "0.3.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes