.exe installers are now deprecated, but while they still exist, you must choose both the correct Python version and "bittedness". Even if you have a 64bit computer, if you installed a 32bit version of Python you must install the 32bit version of pywin32.
There is one binary per-version, per-bittedness. To determine what version of Python you have, start Python and look at the first line of the banner. Compare these 2:
Python 2.7.2+ ... [MSC v.1500 32 bit (Intel)] on win32
Python 2.7.2+ ... [MSC v.1500 64 bit (AMD64)] on win32
^^^^^^^^^^^^^^
If the installation process informs you that Python is not found in the registry, it almost certainly means you have downloaded the wrong version - either for the wrong version of Python, or the wrong "bittedness".
But as above: .exe installers are deprecated - please use pip.
A number of things don't work via pip, so you may choose to install binaries - but you must choose both the correct Python version and "bittedness". Note that due to changes in Python there are no binary installers for version 3.10 32bit and later, so pypi is your only option there.
Even if you have a 64bit computer, if you installed a 32bit version of Python you must install the 32bit version of pywin32.
There is one binary per-version, per-bittedness. To determine what version of Python you have, start Python and look at the first line of the banner. Compare these 2:
Python 2.7.2+ ... [MSC v.1500 32 bit (Intel)] on win32
Python 2.7.2+ ... [MSC v.1500 64 bit (AMD64)] on win32
^^^^^^^^^^^^^^
If the installation process informs you that Python is not found in the registry, it almost certainly means you have downloaded the wrong version - either for the wrong version of Python, or the wrong "bittedness".
A number of things don't work via pip, so you may choose to install binaries - but you must choose both the correct Python version and "bittedness". Note that due to changes in Python there are no binary installers for version 3.10 32bit, so pypi is your only option there.
Even if you have a 64bit computer, if you installed a 32bit version of Python you must install the 32bit version of pywin32.
@kxrob put a lot of work towards removing use of the deprecated Unicode
API so we can build on Python 3.12. This should be largely invisible, but
please report any unintended consequences.
win32api.GetTickCount() now returns an unsigned 64bit integer (@kxrob, #1946)
win32pipe.GetNamedPipeHandleState() now takes a 3rd optional param
indicating whether the username should be returned, and related constants
added. (@kxrob, #1946)
Added win32gui.GetTopWindow() and win32gui.GetAncestor() (@CristiFati, #1928)
Tweaks to how pywintypes searches for DLLs to better support virtualenvs
created with --system-site-packages. (@saaketp, #1933)
Changes in PARAM handling. Some functions which returned a WPARAM or LPARAM
allowed you to return a pointer to a Python buffer object or a PyUnicode.
These functions now only accept a Python long to be returned. Note that
this DOES NOT apply to functions with accept WPARAM or LPARAM as arguments,
only when they are being returned. Impacted functions are OnNotify
handler, LV_ITEM/TV_ITEM objects, PyIContextMenu3::HandleMenuMsg2, and the
result of a WNDPROC/DLGPROC (#1927).
service registration had an overhaul, avoiding a complicated, and ultimately
unnecessary "single globally registered service runner" concept.
Now, when registering a service, the host pythonservice.exe runner will be
copied to sys.exec_prefix, along with possibly pywintypesXX.dll and run
from there. (#1908)
Dropped support for allowing a bytes object to be passed where a COM BSTR
is expected - this support was accidental on the path from 2.x->3.x.
win32crypt's PyCERTSTORE.CertCloseStore()'s Flags argument has been
deprecated as it is likely to crash the process if
CERT_CLOSE_STORE_FORCE_FLAG is specified. The underlying function is now
always called with CERT_CLOSE_STORE_CHECK_FLAG, and support for this
param will be dropped at some point in the future.
Fix a bug where win32crypt.CryptQueryObject() would return a PyCTL_CONTEXT
object instead of a PyCERT_CONTEXT for base64 encoded certificates (#1859)
win32crypt.CryptQueryObject() is now able to return PyCTL_CONTEXT objects.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps pywin32 from 301 to 305.
Release notes
Sourced from pywin32's releases.
... (truncated)
Changelog
Sourced from pywin32's changelog.
... (truncated)
Commits
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)