-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Windows update KB5034765 completely broke pyvda #34
Comments
Sorry, I'm using Windows 11 Pro and I have Python 3.11.8 installed. |
Thanks for reporting. The Windows APIs that pyvda uses are not documented/stable so this happens every so often. I haven't had the update yet but when it happens I'll see what changed and fix it, or if you'd like you can see if you can find the new interface definition. I gave some instructions for this here #15 (comment) |
I'm back to this same issue with from pyvda import get_apps_by_z_order
from win32gui import GetWindowText
for window in get_apps_by_z_order():
print(GetWindowText(window.hwnd)) generates the exception...
For some reason it is having problems with pinned apps, cause this works... from pyvda import VirtualDesktop as Desktop
from win32gui import GetWindowText
window = Desktop.current().apps_by_z_order(include_pinned = False)[0]
print(GetWindowText(window.hwnd)) Generates the title from PyCharm...
|
It has something to do with the last update v0.4.1 'cause v0.4.0 works just fine. |
Also broken for me after updating at 0.4.1, albeit with a slightly different error:
I didn't yet run the tool to fetch the GUIDs on my machine, but maybe the dumps found here could help |
Thanks for the reports. I'll work on this this weekend. The version/build numbers reported by windows are sufficiently unreliable that I think it will be better to just try all of the interfaces and see whether one works, which seems to be what Microsoft recommend doing. |
Also, for people feeling like contributing: |
@peterder72 @phpjunkie420 @stdedos I have just pushed a big change. It would be great if you could run the tests on the master branch on your machines and see whether it makes things better, worse, or no change. I'll test on an up-to-date win11 laptop tomorrow. |
Unfortunately, I can do it late tomorrow the earliest |
That's fine, no rush, any testing is appreciated 👍 |
I looked at the releases and it shows 0.4.1 which is the release that generated the exception I posted. |
@mrob95 I seem to be still having the same issue with the new master, I'll try getting the exact interface UUID tomorrow |
Thanks, any information you could give would be great - has it worked on a previous version of pyvda? Theoretically nothing should have changed relating to version |
I don't know what changed from 0.4.0 to 0.4.1, 'case 0.4.0 works just fine. I did a bit of testing to figure out the source of the problem and it has something to do with pinned apps. |
@mrob95 Everything worked for a long time before, I think I was even on 0.3.X earlier. After a Windows update all my pyvda scripts started crashing, an update to 0.4.1 also didn't help |
@mrob95 Just checked, now makes sense why the fix doesn't work. The interface is not there at all... |
Sorry for the tangent: @phpjunkie420, what are those widgets top-right? 🤩 |
On the matter-at-hand: If you really go the https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversionexw#remarks avenue, I think you need to re-wire the library 😅
|
Alright, so I've looked into it a bit. Apparently I was blind yesterday, and the error I got was about IVirtualDesktopManagerInternal2, not IVirtualDesktopManagerInternal, which actually succeeded after the latest fix. It also turned out I don't have any names associated with my COM interfaces anymore (or OleView doesn't show them on Windows 11, also possible), so I have to only deal with GUIDs, which is why I couldn't find anything in the screenshot I posted above. I did some manual digging, and found the missing GUID for IVirtualDesktopManagerInternal2: 53F5CA0B-158F-4124-900C-057158060B27. Manually changing the GUID in the library fixed all issues on my machine. The GUID seems to match with this dump |
This is the skin I'm using. Gadgets: Gadgets for Rainmeter |
downgrade to 0.4.0 pip install pyvda==0.4.0 |
Broken for me as well: /pyvda ((1a7591f...)|BISECTING)
$ git bisect good
fedcbc55679eeea19fe0e9f0a8b6d8bacba8553d is the first bad commit
commit fedcbc55679eeea19fe0e9f0a8b6d8bacba8553d
Author: Mike Roberts <mike.roberts.2k10@googlemail.com>
Date: Mon Feb 26 13:57:14 2024 +0000
fix catching of not implemented error when creating internal2
pyvda/utils.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
$ git bisect log
git bisect start
# status: waiting for both good and bad commits
# bad: [cd21c5dfc1f0da328e94281d4820da01382ad29e] Merge pull request #42 from mrob95/win11_fixes
git bisect bad cd21c5dfc1f0da328e94281d4820da01382ad29e
# status: waiting for good commit(s), bad commit known
# good: [8b67db68587292e19e596fa3f23ca3c78e18c581] bump version to 0.4.1
git bisect good 8b67db68587292e19e596fa3f23ca3c78e18c581
# good: [208a324b3849197d7165af7489d94b8a69718b0d] refactor: use feature detection to get build rather than relying on unreliable win32 api
git bisect good 208a324b3849197d7165af7489d94b8a69718b0d
# good: [200aa0487cc319203713ec4be10870f162413c16] improve no supported version error message
git bisect good 200aa0487cc319203713ec4be10870f162413c16
# bad: [764cfaaf44105b35d12d33122c453181c63a627a] fix com definitions for the latest win11
git bisect bad 764cfaaf44105b35d12d33122c453181c63a627a
# bad: [fedcbc55679eeea19fe0e9f0a8b6d8bacba8553d] fix catching of not implemented error when creating internal2
git bisect bad fedcbc55679eeea19fe0e9f0a8b6d8bacba8553d
# good: [1a7591fe24ace66c92c57102b4c8d97aeccad641] Merge pull request #41 from mrob95/feature-detection
git bisect good 1a7591fe24ace66c92c57102b4c8d97aeccad641
# first bad commit: [fedcbc55679eeea19fe0e9f0a8b6d8bacba8553d] fix catching of not implemented error when creating internal2 |
... pyvda (master)
$ git bisect start HEAD v0.4.1
pyvda ((208a324...)|BISECTING)
$ git bisect run python -m pytest --cov-report term-missing --cov=pyvda tests/
running 'python' '-m' 'pytest' '--cov-report' 'term-missing' '--cov=pyvda' 'tests/'
...
=========================== short test summary info ===========================
ERROR tests/test_desktop_functions.py - _ctypes.COMError: (-2147023728, 'Ôï ó...
!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
============================== 1 error in 0.41s ===============================
af5dea86a2af1df4a4939154bfc7e69f10dc5e96 is the first bad commit
commit af5dea86a2af1df4a4939154bfc7e69f10dc5e96
Author: Mike Roberts <mike.roberts.2k10@googlemail.com>
Date: Sun Feb 25 15:27:21 2024 +0000
isort
pyvda/__init__.py | 8 ++++----
pyvda/com_base.py | 15 +++------------
pyvda/com_defns.py | 38 ++++++++++++++++----------------------
pyvda/pyvda.py | 11 ++++-------
pyvda/utils.py | 24 ++++++++++--------------
tests/test_desktop_functions.py | 18 +++++++-----------
6 files changed, 44 insertions(+), 70 deletions(-)
bisect found first bad commit
/pyvda ((af5dea8...)|BISECTING)
$ git bisect log
# bad: [cd21c5dfc1f0da328e94281d4820da01382ad29e] Merge pull request #42 from mrob95/win11_fixes
# good: [8b67db68587292e19e596fa3f23ca3c78e18c581] bump version to 0.4.1
git bisect start 'HEAD' 'v0.4.1'
# good: [208a324b3849197d7165af7489d94b8a69718b0d] refactor: use feature detection to get build rather than relying on unreliable win32 api
git bisect good 208a324b3849197d7165af7489d94b8a69718b0d
# bad: [200aa0487cc319203713ec4be10870f162413c16] improve no supported version error message
git bisect bad 200aa0487cc319203713ec4be10870f162413c16
# bad: [64ab622e6ca61530a9524e112f7676a5987bcb37] fix: type hints
git bisect bad 64ab622e6ca61530a9524e112f7676a5987bcb37
# bad: [af5dea86a2af1df4a4939154bfc7e69f10dc5e96] isort
git bisect bad af5dea86a2af1df4a4939154bfc7e69f10dc5e96
# first bad commit: [af5dea86a2af1df4a4939154bfc7e69f10dc5e96] isort |
Thanks, could you try the latest master branch? I fixed a bug relating to this so hopefully that has caught it. If not I'll add the extra GUID. |
On the latest master branch are you able to import the library at all? Could you run with debug logging enabled up until it fails and post the output? |
Jupyter QtConsole 5.5.1
Python 3.11.8 (tags/v3.11.8:db85d51, Feb 6 2024, 22:03:32) [MSC v.1937 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.20.0 -- An enhanced Interactive Python. Type '?' for help.
import logging
# Set the global logging level
logging.basicConfig(level=logging.DEBUG) # Set to DEBUG, INFO, WARNING, ERROR, or CRITICAL
# Now, all loggers will default to DEBUG level unless specified otherwise.
DEBUG:comtypes:CoInitializeEx(None, 2)
DEBUG:pyvda.build:Starting feature detection...
DEBUG:pyvda.build:Querying {4970BA3D-FD4E-4647-BEA3-D89076EF4B9C}... Δεν υποστηρίζεται τέτοια διασύνδεση
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15478 at 2612e145c50>
DEBUG:pyvda.build:Querying {A3175F2D-239C-4BD2-8AA0-EEBA8B0B138E}... Δεν υποστηρίζεται τέτοια διασύνδεση
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15a98 at 2612e145350>
DEBUG:pyvda.build:Querying {B2F925B9-5A0F-4D2E-9F4D-2B1507593C10}... Δεν υποστηρίζεται τέτοια διασύνδεση
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca16828 at 2612e145c50>
DEBUG:pyvda.build:Querying {094AFE11-44F2-4BA0-976F-29A97E263EE0}... Δεν υποστηρίζεται τέτοια διασύνδεση
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15e88 at 2612e145350>
DEBUG:pyvda.build:Querying {F31574D6-B682-4CDC-BD56-1827860ABEC6}... Success!
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca16128 at 2612e145c50>
DEBUG:comtypes:Release <POINTER(IUnknown) ptr=0x2612ca15478 at 2612e145f50>
DEBUG:pyvda.build:Feature detection complete. Windows version is under 19041
DEBUG:comtypes:CoInitializeEx(None, 2)
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca156a8 at 2612e7020d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15478 at 2612e7020d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15478 at 2612e7020d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15d38 at 2612e7020d0>
DEBUG:comtypes:Release <POINTER(IVirtualDesktopManagerInternal) ptr=0x2612ca15a98 at 2612dd8aad0>
DEBUG:comtypes:Release <POINTER(IApplicationViewCollection) ptr=0x2612ca16828 at 2612e1463d0>
DEBUG:comtypes:Release <POINTER(IVirtualDesktopPinnedApps) ptr=0x2612ca15c58 at 2612e147050>
DEBUG:comtypes:CoInitializeEx(None, 2)
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15a98 at 2612e1470d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15e18 at 2612e1470d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15088 at 2612e1470d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca16828 at 2612e1470d0>
DEBUG:comtypes:Release <POINTER(IVirtualDesktopManagerInternal) ptr=0x2612ca15b08 at 2612e5cd4d0>
DEBUG:comtypes:Release <POINTER(IApplicationViewCollection) ptr=0x2612ca15d38 at 2612e5cfd50>
DEBUG:comtypes:Release <POINTER(IVirtualDesktopPinnedApps) ptr=0x2612ca16128 at 2612e5acc50>
DEBUG:comtypes:CoInitializeEx(None, 2)
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca156a8 at 2612dd713d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca16828 at 2612dd713d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15a98 at 2612dd713d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca16828 at 2612dd713d0>
DEBUG:comtypes:Release <POINTER(IVirtualDesktopManagerInternal) ptr=0x2612ca14f38 at 2612e5cfed0>
DEBUG:comtypes:Release <POINTER(IApplicationViewCollection) ptr=0x2612ca15e18 at 2612e5ccdd0>
DEBUG:comtypes:Release <POINTER(IVirtualDesktopPinnedApps) ptr=0x2612ca16128 at 2612e5cc050>
from pyvda import VirtualDesktop
DEBUG:comtypes:CoInitializeEx(None, 2)
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca14f38 at 2612e7020d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca15478 at 2612e7020d0>
DEBUG:comtypes:Release <POINTER(IServiceProvider) ptr=0x2612ca156a8 at 2612e7020d0>
---------------------------------------------------------------------------
COMError Traceback (most recent call last)
Cell In[2], line 1
----> 1 from pyvda import VirtualDesktop
File pyvda\pyvda\__init__.py:58
55 _check_version()
57 from ._version import __version__
---> 58 from .pyvda import (
59 AppView,
60 VirtualDesktop,
61 get_apps_by_z_order,
62 get_virtual_desktops,
63 set_wallpaper_for_all_desktops,
64 )
File pyvda\pyvda\pyvda.py:16
13 ASFW_ANY = -1
14 NULL_PTR = 0
---> 16 managers = Managers()
19 class AppView():
20 """
21 A wrapper around an `IApplicationView` object exposing window functionality relating to:
22
(...)
26
27 """
File pyvda\pyvda\utils.py:66, in Managers.__init__(self)
64 self.view_collection = get_view_collection()
65 self.pinned_apps = get_pinned_apps()
---> 66 self.manager_internal2 = get_vd_manager_internal2()
File pyvda\pyvda\utils.py:50, in get_vd_manager_internal2()
48 def get_vd_manager_internal2() -> Optional[IVirtualDesktopManagerInternal2]:
49 try:
---> 50 return _get_object(IVirtualDesktopManagerInternal2, CLSID_VirtualDesktopManagerInternal) # type: ignore
51 except NotImplementedError:
52 return None
File pyvda\pyvda\utils.py:30, in _get_object(cls, clsid)
26 pServiceProvider = CoCreateInstance(
27 CLSID_ImmersiveShell, IServiceProvider, CLSCTX_LOCAL_SERVER
28 )
29 pObject = POINTER(cls)()
---> 30 pServiceProvider.QueryService( # type: ignore
31 clsid or cls._iid_,
32 cls._iid_,
33 pObject,
34 )
35 except _ctypes.COMError as e:
36 if e.text == "No such interface supported":
COMError: (-2147467262, 'Δεν υποστηρίζεται τέτοια διασύνδεση', (None, None, None, 0, None)) ... it's not a friendly experience, to be blatantly honest. On a REPL, being spammed with DEBUG messages on tab-auto-completion, it feels just weird. Do things after you are properly imported |
Thank you. I think it was matching on the error message that was the problem, I have merged a fix. |
I started trying to implement it this way the other day. The problem is that we need to know what all the interfaces are when we define them, to be able to set the return values and arguments correctly. We can't just say ' |
You can return ... a union? 😅 I know it's not optimal, but if "all of those" return a thing that responds to e.g.
Yea, it sucks 😅 But hey, we/I am here 🙃 So far, you have a test harness that "I did not believe it was working on Windows". |
Reproduced this and merged a fix, thanks. I've just released |
Windows update KB5034765 completely broke pyvda.
The text was updated successfully, but these errors were encountered: