From fabbd69a3d0c7128d36663d6259d40f2fcdceb44 Mon Sep 17 00:00:00 2001 From: Avasam Date: Sat, 18 Jan 2025 16:05:26 -0500 Subject: [PATCH] Updated all old links (dead links, redirects and non-https) (#2448) --- AutoDuck/pyhtml.fmt | 2 +- AutoDuck/pywin32-document.xml | 8 +++--- CHANGES.txt | 2 +- Pythonwin/contents.d | 2 +- Pythonwin/doc/debugger/index.html | 2 +- Pythonwin/pywin/Demos/guidemo.py | 2 +- Pythonwin/pywin/Demos/ocx/flash.py | 2 +- Pythonwin/pywin/Demos/ocx/webbrowser.py | 2 +- Pythonwin/pywin/framework/help.py | 3 +- Pythonwin/readme.html | 2 +- README.md | 2 +- SWIG/pywin32_swig.patch | 2 +- adodbapi/__init__.py | 2 +- adodbapi/ado_consts.py | 4 ++- adodbapi/adodbapi.py | 13 +++++---- adodbapi/apibase.py | 4 +-- adodbapi/quick_reference.md | 28 ++++++++----------- adodbapi/readme.txt | 15 +++++----- adodbapi/setup.py | 2 +- adodbapi/test/adodbapitestconfig.py | 2 +- build_env.md | 3 +- com/TestSources/PyCOMTest/PyCOMImpl.cpp | 2 +- com/help/active_directory.html | 6 +++- com/help/adsi.html | 19 +++++++------ com/help/asp.d | 5 ++-- com/help/shell.d | 6 +--- com/win32com/HTML/QuickStartClientCom.html | 4 +-- com/win32com/HTML/QuickStartServerCom.html | 2 +- com/win32com/client/selecttlb.py | 4 +-- com/win32com/demos/excelRTDServer.py | 2 +- com/win32com/demos/ietoolbar.py | 2 +- com/win32com/readme.html | 2 +- com/win32com/src/Register.cpp | 2 +- .../axcontrol/demos/container_ie.py | 2 +- .../axscript/demos/client/ie/CHARTPY.HTM | 7 ++--- .../axscript/demos/client/ie/MarqueeText1.htm | 2 +- .../axscript/demos/client/ie/demo_check.htm | 8 +++--- .../axscript/demos/client/ie/demo_intro.htm | 4 +-- .../axscript/demos/client/ie/mousetrack.htm | 2 +- com/win32comext/bits/test/test_bits.py | 6 ++-- com/win32comext/ifilter/demo/filterDemo.py | 2 +- com/win32comext/ifilter/src/stdafx.h | 4 +-- com/win32comext/mapi/demos/mapisend.py | 2 +- com/win32comext/mapi/src/IConverterSession.h | 8 +++++- .../mapi/src/PyIExchangeManageStoreEx.i | 2 +- com/win32comext/mapi/src/extraMAPIDefs.h | 2 +- com/win32comext/mapi/src/extraMAPIGuids.h | 2 +- com/win32comext/mapi/src/mapi.i | 5 +++- com/win32comext/propsys/src/PyPROPVARIANT.cpp | 2 +- .../shell/demos/servers/empty_volume_cache.py | 2 +- .../shell/demos/servers/folder_view.py | 2 +- com/win32comext/shell/src/shell.cpp | 5 ++-- isapi/samples/redirector.py | 2 +- isapi/samples/redirector_asynch.py | 2 +- isapi/samples/redirector_with_filter.py | 2 +- isapi/src/pyISAPI.cpp | 2 +- win32/Demos/security/localized_names.py | 2 +- win32/Demos/win32gui_menu.py | 4 +-- win32/Demos/win32gui_taskbar.py | 2 +- win32/Lib/pywin32_bootstrap.py | 2 +- win32/Lib/sspi.py | 4 +-- win32/Lib/win32gui_struct.py | 2 +- win32/Lib/win32pdhquery.py | 6 ++-- win32/Lib/win32pdhutil.py | 10 +++---- win32/Lib/win32timezone.py | 7 +++-- win32/help/process_info.html | 6 ++-- win32/help/security_directories.html | 25 +++++++++-------- win32/help/win32net.html | 7 +++-- win32/src/PyWinTypesmodule.cpp | 2 +- win32/src/PythonService.cpp | 2 +- win32/src/win32credmodule.cpp | 2 +- win32/src/win32file.i | 5 ---- win32/src/win32gui.i | 2 +- win32/test/test_sspi.py | 2 +- win32/test/test_win32crypt.py | 3 +- win32/test/test_win32inet.py | 8 +++--- 76 files changed, 177 insertions(+), 163 deletions(-) diff --git a/AutoDuck/pyhtml.fmt b/AutoDuck/pyhtml.fmt index f139740139..2b6ec4dece 100644 --- a/AutoDuck/pyhtml.fmt +++ b/AutoDuck/pyhtml.fmt @@ -471,7 +471,7 @@ $(def1)$4$(par) .tag=pyseeapi, html, 1, 1 .pre=$(rmh)Win32 API References$(rmhe)$(par) -.format=$(term1)Search for $1 at msdn, google or google groups.$(par) +.format=$(term1)Search for $1 at msdn, google or google groups.$(par) .tag=pyundocmfc, html, 2, 1 .pre=$(rmh)Undocumented MFC References$(par) diff --git a/AutoDuck/pywin32-document.xml b/AutoDuck/pywin32-document.xml index 36ca1c4045..be1a897cdf 100644 --- a/AutoDuck/pywin32-document.xml +++ b/AutoDuck/pywin32-document.xml @@ -3,11 +3,11 @@ - + - - - + + + diff --git a/CHANGES.txt b/CHANGES.txt index 60819d2dd0..0d513150c2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,7 +9,7 @@ or https://github.com/mhammond/pywin32/compare/b3xx...main As of build 305, installation .exe files have been deprecated; see -https://mhammond.github.io/pywin32_installers.html. +https://mhammond.github.io/pywin32_installers.html . Coming in build 309, as yet unreleased -------------------------------------- diff --git a/Pythonwin/contents.d b/Pythonwin/contents.d index 5813804652..ab32f6344e 100644 --- a/Pythonwin/contents.d +++ b/Pythonwin/contents.d @@ -84,7 +84,7 @@ If the first fold in the file is collapsed, all top-level folds are opened. Oth @flag Ctrl+Down|Recall the next command in the history list. @topic Source code folding in the editor| -Thanks to Scintilla (http://www.scintilla.org), Pythonwin supports +Thanks to Scintilla (https://www.scintilla.org), Pythonwin supports source code folding. Folding is the ability to collapse sections of your source-code into a single line, making it easier to navigate around large files. Any Python statement which introduces a new block diff --git a/Pythonwin/doc/debugger/index.html b/Pythonwin/doc/debugger/index.html index cd5bdd7442..070e67b162 100644 --- a/Pythonwin/doc/debugger/index.html +++ b/Pythonwin/doc/debugger/index.html @@ -9,7 +9,7 @@

Pythonwin Debugger Overview

News Flash:

-

We take full advantage of Scintilla from Neil Hodgson (see scintilla.org) This offers a much better interface, including Visual C++/VB type indicators for breakpoints in the left +

We take full advantage of Scintilla from Neil Hodgson (see scintilla.org) This offers a much better interface, including Visual C++/VB type indicators for breakpoints in the left column, etc

This document gives a general overview of the Pythonwin Debugger package.

diff --git a/Pythonwin/pywin/Demos/guidemo.py b/Pythonwin/pywin/Demos/guidemo.py index 1069162a34..619567006a 100644 --- a/Pythonwin/pywin/Demos/guidemo.py +++ b/Pythonwin/pywin/Demos/guidemo.py @@ -19,7 +19,7 @@ ("OCX Serial Port Demo", "from ocx import ocxserialtest; ocxserialtest.test()"), ( "Internet Explorer Control Demo", - 'from ocx import webbrowser; webbrowser.Demo("http://www.python.org")', + 'from ocx import webbrowser; webbrowser.Demo("https://www.python.org")', ), ] diff --git a/Pythonwin/pywin/Demos/ocx/flash.py b/Pythonwin/pywin/Demos/ocx/flash.py index f2994e50a6..5a5f8ccc89 100644 --- a/Pythonwin/pywin/Demos/ocx/flash.py +++ b/Pythonwin/pywin/Demos/ocx/flash.py @@ -2,7 +2,7 @@ # simple flash/python application demonstrating bidirectional # communicaion between flash and python. Click the sphere to see # behavior. Uses Bounce.swf from FlashBounce.zip, available from -# http://pages.cpsc.ucalgary.ca/~saul/vb_examples/tutorial12/ +# https://cspages.ucalgary.ca/~saul/vb_examples/tutorial12/ # Update to the path of the .swf file (note it could be a true URL) flash_url = "c:\\bounce.swf" diff --git a/Pythonwin/pywin/Demos/ocx/webbrowser.py b/Pythonwin/pywin/Demos/ocx/webbrowser.py index c881d3daad..f0716176d7 100644 --- a/Pythonwin/pywin/Demos/ocx/webbrowser.py +++ b/Pythonwin/pywin/Demos/ocx/webbrowser.py @@ -32,7 +32,7 @@ def __init__(self, url=None): if url is None: self.url = regutil.GetRegisteredHelpFile("Main Python Documentation") if self.url is None: - self.url = "http://www.python.org" + self.url = "https://www.python.org" else: self.url = url pass # Don't call base class doc/view version... diff --git a/Pythonwin/pywin/framework/help.py b/Pythonwin/pywin/framework/help.py index a042b18658..7467d2f8fb 100644 --- a/Pythonwin/pywin/framework/help.py +++ b/Pythonwin/pywin/framework/help.py @@ -44,7 +44,8 @@ def OpenHelpFile(fileName, helpCmd=None, helpArg=None): # XXX - using the htmlhelp API wreaks havoc with keyboard shortcuts # so we disable it, forcing ShellExecute, which works fine (but # doesn't close the help file when Pythonwin is closed. - # Tom Heller also points out http://www.microsoft.com/mind/0499/faq/faq0499.asp, + # Tom Heller also points out + # https://web.archive.org/web/20070519165457/http://www.microsoft.com:80/mind/0499/faq/faq0499.asp , # which may or may not be related. elif 0 and ext == ".chm": import win32help diff --git a/Pythonwin/readme.html b/Pythonwin/readme.html index 15382cc415..4ebfb7608f 100644 --- a/Pythonwin/readme.html +++ b/Pythonwin/readme.html @@ -55,7 +55,7 @@

Recent Changes

finish.

Support for Scintilla's indentation guides, that gives a nice indication of the block structure.

-

New, improved color editor, using the Scintilla control by Neil Hodgson (see http://hare.net.au/~neilh/ScintillaTide.html). The debugger now requires use of this editor.

+

New, improved color editor, using the Scintilla control by Neil Hodgson (see https://www.scintilla.org/). The debugger now requires use of this editor.

Much better printing support from Roger Burnham. Pythonwin itself still can't print anything, but the framework can (meaning some kind soul could now add the support to Pythonwin :-)

DDE support is complete.

Reference helpfile is far more complete.

diff --git a/README.md b/README.md index 8902666bb2..83559de1ad 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ for all bugs or features are also welcome. However, please **do not open github issues for general support requests**, or for problems or questions using the modules in this package - they will be closed. For such issues, please email the -[python-win32 mailing list](http://mail.python.org/mailman/listinfo/python-win32) - +[python-win32 mailing list](https://mail.python.org/mailman/listinfo/python-win32) - note that you must be subscribed to the list before posting. ## Binaries diff --git a/SWIG/pywin32_swig.patch b/SWIG/pywin32_swig.patch index c8bb4a5c13..ed89c29f1c 100644 --- a/SWIG/pywin32_swig.patch +++ b/SWIG/pywin32_swig.patch @@ -6,7 +6,7 @@ The patch is against SWIG-1.1p5 which can be found at: or - http://starship.python.net/crew/mhammond/downloads/swig1.1p5.tar.gz + https://web.archive.org/web/20110527063221/http://starship.python.net/crew/mhammond/downloads/swig1.1p5.tar.gz To build the version of SWIG: diff --git a/adodbapi/__init__.py b/adodbapi/__init__.py index b569936aa2..6ab125fe39 100644 --- a/adodbapi/__init__.py +++ b/adodbapi/__init__.py @@ -2,7 +2,7 @@ """adodbapi - A python DB API 2.0 (PEP 249) interface to Microsoft ADO Copyright (C) 2002 Henrik Ekelund, version 2.1 by Vernon Cole -* http://sourceforge.net/projects/adodbapi +* https://sourceforge.net/projects/adodbapi """ import time diff --git a/adodbapi/ado_consts.py b/adodbapi/ado_consts.py index 8e2125765b..1a0b5a32e1 100644 --- a/adodbapi/ado_consts.py +++ b/adodbapi/ado_consts.py @@ -1,5 +1,6 @@ # ADO enumerated constants documented on MSDN: -# http://msdn.microsoft.com/en-us/library/ms678353(VS.85).aspx +# https://learn.microsoft.com/en-us/sql/ado/reference/ado-api/ado-enumerated-constants +# TODO: Update to https://learn.microsoft.com/en-us/sql/ado/reference/ado-api/ado-enumerated-constants # IsolationLevelEnum adXactUnspecified = -1 @@ -79,6 +80,7 @@ def ado_direction_name(ado_dir): # DataTypeEnum - ADO Data types documented at: # http://msdn2.microsoft.com/en-us/library/ms675318.aspx +# TODO: Update to https://learn.microsoft.com/en-us/sql/ado/reference/ado-api/datatypeenum adArray = 0x2000 adEmpty = 0x0 adBSTR = 0x8 diff --git a/adodbapi/adodbapi.py b/adodbapi/adodbapi.py index 217f4843f5..8f590c4668 100644 --- a/adodbapi/adodbapi.py +++ b/adodbapi/adodbapi.py @@ -1,9 +1,9 @@ """adodbapi - A python DB API 2.0 (PEP 249) interface to Microsoft ADO Copyright (C) 2002 Henrik Ekelund, versions 2.1 and later by Vernon Cole -* http://sourceforge.net/projects/pywin32 +* https://sourceforge.net/projects/pywin32 * https://github.com/mhammond/pywin32 -* http://sourceforge.net/projects/adodbapi +* https://sourceforge.net/projects/adodbapi This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -21,7 +21,7 @@ django adaptations and refactoring by Adam Vandenberg -DB-API 2.0 specification: http://www.python.org/dev/peps/pep-0249/ +DB-API 2.0 specification: https://peps.python.org/pep-0249/ This module source should run correctly in CPython versions 2.7 and later, or CPython 3.4 or later. @@ -79,8 +79,9 @@ def connect(*args, **kwargs): # --> a db-api connection object call using: :connection_string -- An ADODB formatted connection string, see: - * http://www.connectionstrings.com - * http://www.asp101.com/articles/john/connstring/default.asp + * https://www.connectionstrings.com + * https://www.codeguru.com/dotnet/whats-in-an-ado-connection-string/ + * https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/connection-strings :timeout -- A command timeout value, in seconds (default 30 seconds) """ co = Connection() # make an empty connection object @@ -474,7 +475,7 @@ def _suggest_error_class(self): """Introspect the current ADO Errors and determine an appropriate error class. Error.SQLState is a SQL-defined error condition, per the SQL specification: - http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt + https://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt The 23000 class of errors are integrity errors. Error 40002 is a transactional integrity error. diff --git a/adodbapi/apibase.py b/adodbapi/apibase.py index 0c09ef98e0..40aeb9447f 100644 --- a/adodbapi/apibase.py +++ b/adodbapi/apibase.py @@ -1,8 +1,8 @@ """adodbapi.apibase - A python DB API 2.0 (PEP 249) interface to Microsoft ADO Copyright (C) 2002 Henrik Ekelund, version 2.1 by Vernon Cole -* http://sourceforge.net/projects/pywin32 -* http://sourceforge.net/projects/adodbapi +* https://sourceforge.net/projects/pywin32 +* https://sourceforge.net/projects/adodbapi """ from __future__ import annotations diff --git a/adodbapi/quick_reference.md b/adodbapi/quick_reference.md index 2183ea387f..a9aa3e2f6f 100644 --- a/adodbapi/quick_reference.md +++ b/adodbapi/quick_reference.md @@ -39,7 +39,7 @@ be able to process this information in either format. The resulting mass of confusion is called a "connection string". There is an entire web site dedicated to giving examples of connection strings in numerous combinations. See -[http://www.connectionstrings.com](http://www.connectionstrings.com/) +[https://www.connectionstrings.com](https://www.connectionstrings.com/) The software which connects ODBC to an engine is called a "Driver". One which talks in ADO is called a "Provider". Sometimes there will be a @@ -47,11 +47,9 @@ Provider for a Driver. ### Driver (and Provider) download links -The current (as of 2019) SQL Server OLE DB provider (which they call a -"driver" here) is - which -is linked from, and explained [here, in their -document.](https://docs.microsoft.com/en-us/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-server-2017) +The current SQL Server OLE DB provider (which they call a +"driver" here) is explained and can be downloaded from +[their document](https://learn.microsoft.com/en-us/sql/connect/oledb/download-oledb-driver-for-sql-server#download). - Jet (ACCESS database) and other file datasets (like .xls and .csv) "ACE" Provider: @@ -61,21 +59,17 @@ Windows. Note that you are not permitted load the 32 bit "ACE" provider if you have any 64-bit Office components installed. Conventional wisdom says that you must use 64 bit Python in this case. However, see the answer in -. +. If you decide to try hacking the installers, you may find - to be a useful alternative -to Orca. My experience is that such a [hacked installer (like this -one)](http://shares.digvil.info/redis) can also be used on machines -where "click to buy" versions of Office have been removed, but are still -blocking installation of the redistributable provider. + to be a useful alternative to Orca. - To use any ODBC driver from 64 bit Python, you also need the MSDASQL -provider. It is shipped with Server 2008, and Vista and later. +provider, which is shipped with Windows. -- MySQL driver -or MariaDB driver +- MySQL driver +or MariaDB driver or `choco install mysql.odbc` -- PostgreSQL driver +- PostgreSQL driver (scroll all the way to the bottom) or `choco install psqlodbc`. \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-- @@ -89,7 +83,7 @@ the PEP-249 api. I may write a book later. Here, I only intend to cover the extensions and special features of adodbapi. The PEP-249 database access api specification is found at: - + ### Module level attributes diff --git a/adodbapi/readme.txt b/adodbapi/readme.txt index b9c6e96d3b..ba348af58d 100644 --- a/adodbapi/readme.txt +++ b/adodbapi/readme.txt @@ -5,7 +5,7 @@ adodbapi A Python DB-API 2.0 (PEP-249) module that makes it easy to use Microsoft ADO for connecting with databases and other data sources using CPython. -Home page: +Home page: Features: * 100% DB-API 2.0 (PEP-249) compliant (including most extensions and recommendations). @@ -24,7 +24,7 @@ Prerequisites: Installation: * (C-Python on Windows): Install pywin32 (`python -m pip install pywin32`) which includes adodbapi. -* (IronPython on Windows): Download adodbapi from http://sf.net/projects/adodbapi. Unpack the zip. +* (IronPython on Windows): Download adodbapi from https://sourceforge.net/projects/adodbapi/ . Unpack the zip. NOTE: ........... If you do not like the new default operation of returning Numeric columns as decimal.Decimal, @@ -69,15 +69,16 @@ what's new in version 2.5 License ------- -LGPL, see http://www.opensource.org/licenses/lgpl-license.php +LGPL, see https://opensource.org/license/lgpl-2-1 Documentation ------------- -Look at adodbapi/quick_reference.md -http://www.python.org/topics/database/DatabaseAPI-2.0.html -read the examples in adodbapi/examples -and look at the test cases in adodbapi/test directory. +Look at: +- `adodbapi/quick_reference.md` +- https://wiki.python.org/moin/DatabaseProgramming#The_DB-API +- read the examples in adodbapi/examples +- and the test cases in `adodbapi/test directory` Mailing lists ------------- diff --git a/adodbapi/setup.py b/adodbapi/setup.py index 9af7f8a0b9..30fd838539 100644 --- a/adodbapi/setup.py +++ b/adodbapi/setup.py @@ -9,7 +9,7 @@ DESCRIPTION = ( """A pure Python package implementing PEP 249 DB-API using Microsoft ADO.""" ) -URL = "http://sourceforge.net/projects/adodbapi" +URL = "https://sourceforge.net/projects/adodbapi" LICENSE = "LGPL" CLASSIFIERS = [ "Development Status :: 5 - Production/Stable", diff --git a/adodbapi/test/adodbapitestconfig.py b/adodbapi/test/adodbapitestconfig.py index 03fb9a23ce..7bcbee6c16 100644 --- a/adodbapi/test/adodbapitestconfig.py +++ b/adodbapi/test/adodbapitestconfig.py @@ -166,7 +166,7 @@ "Provider=MSDASQL;Driver={PostgreSQL Unicode(x64)}", "Driver=PostgreSQL Unicode", ] - # get driver from http://www.postgresql.org/ftp/odbc/versions/ + # get driver from https://www.postgresql.org/ftp/odbc/releases/ # test using positional and keyword arguments (bad example for real code) print(" ...Testing PostgreSQL login to {}...".format(_computername)) doPostgresTest, connStrPostgres, dbPostgresConnect = tryconnection.try_connection( diff --git a/build_env.md b/build_env.md index 0d9ffda2c4..d9f3b0b9b1 100644 --- a/build_env.md +++ b/build_env.md @@ -51,7 +51,8 @@ way to build pywin32 - it's build process should find these tools automatically. ## For Visual Studio 2019 -- Install the [Build Tools for Visual Studio 2019](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16#) (`vs_BuildTools.exe` ~ 1 MB) +- Install the [Build Tools for Visual Studio 2019](https://my.visualstudio.com/Downloads?q=Build%20Tools%20for%20Visual%20Studio%202019) (Version 16.0) + Public landing page: - Maybe stop your virus scanner - In `Visual Studio Installer`: diff --git a/com/TestSources/PyCOMTest/PyCOMImpl.cpp b/com/TestSources/PyCOMTest/PyCOMImpl.cpp index d19678d3c4..2303421359 100644 --- a/com/TestSources/PyCOMTest/PyCOMImpl.cpp +++ b/com/TestSources/PyCOMTest/PyCOMImpl.cpp @@ -437,7 +437,7 @@ HRESULT CPyCOMTest::Fire(long nID) if (FAILED(hr)) break; // call FireWithNamedParams a variety of ways. - // See http://msdn2.microsoft.com/en-us/library/ms221653.aspx + // See https://learn.microsoft.com/en-ca/previous-versions/windows/desktop/automat/passing-parameters // "Passing Parameters (Component Automation)" for details. OLECHAR *names2[] = {L"OnFireWithNamedParams"}; diff --git a/com/help/active_directory.html b/com/help/active_directory.html index 74b79049eb..4acd51726b 100644 --- a/com/help/active_directory.html +++ b/com/help/active_directory.html @@ -276,7 +276,11 @@

In Conclusion

Further Info


Author

diff --git a/com/help/adsi.html b/com/help/adsi.html index 83ba3754bd..ed0410d3d3 100644 --- a/com/help/adsi.html +++ b/com/help/adsi.html @@ -44,9 +44,9 @@

SUMMARY

-Python's adsi access works really well with Exchange (late or early binding since you can read microsoft's type library). -To get started, you will need to download adsi from microsoft: -Microsoft ADSI. +Python's ADSI access works really well with Exchange (late or early binding since you can read microsoft's type library). +To get started, you will need to download ADSI from microsoft: +Setting Up Your Development Environment. Microsoft has documentation for using languages other than python in the sdk.

@@ -89,9 +89,10 @@

Introduction


-Note -- the fourth argument to opendsobject has various options for how to authenticate. +Note -- the fourth argument to OpenDSObject has various options for how to authenticate. For example, if you use 1 instead of zero, it should either use NTLM or Kerberos for authentication. -For more information, check out: OpenDSObject +For more information, check out: + OpenDSObject

The ex_path in the above example specifies the resource you are trying to access. For example: @@ -264,9 +265,11 @@

In Conclusion

Further Info

diff --git a/com/help/asp.d b/com/help/asp.d index 9cae2321b8..b563d909b1 100644 --- a/com/help/asp.d +++ b/com/help/asp.d @@ -40,8 +40,9 @@ block -- they don't extend past intervening html to the next block. For me that normally isn't an issue, since I do not like mixing code and html. Prefering a clean split of code and html, I generally generate webpages using templates all in python w/HTMLgen. Take a look -at: http://www.python.org/topics/web/HTML.html for available resources -w/HTML. An very basic page would look like: +at: https://wiki.python.org/moin/WebBrowserProgramming and +https://wiki.python.org/moin/Asking%20for%20Help/How%20to%20run%20python%20from%20HTML +for available resources w/HTML. A very basic page would look like: @ex Basic Python ASP page: | diff --git a/com/help/shell.d b/com/help/shell.d index 716574bd60..11fb98470e 100644 --- a/com/help/shell.d +++ b/com/help/shell.d @@ -20,13 +20,9 @@ Following is documentation for the PyIShellLink object. @ex This documentation class is based on: http://msdn.microsoft.com/isapi/msdnlib.idc?theURL=/library/sdkdoc/shellcc/shell/ifaces/ishelllink/ishelllink.htm + (TODO: Update to https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ishelllinkw) With only minor alterations and notations by Mike Fletcher. Errors may be present, read at your own risk. -See also: - http://msdn.microsoft.com/isapi/msdnlib.idc?theURL=/library/books/win95ui/chpt09-01.htm - A tutorial-like introduction, includes brief discussion - of non-file linking, and a fairly simple C sample application - for file-based linking. | class PyIShellLink( IPersistFile ): ''' Following is not a functional class, intended solely for documentation ''' diff --git a/com/win32com/HTML/QuickStartClientCom.html b/com/win32com/HTML/QuickStartClientCom.html index 55c52b7b98..d2b18787a9 100644 --- a/com/win32com/HTML/QuickStartClientCom.html +++ b/com/win32com/HTML/QuickStartClientCom.html @@ -10,8 +10,8 @@

Quick Start to Client side COM and Python

Introduction

This documents how to quickly start using COM from Python. It is not a thorough discussion of the COM system, or of the concepts introduced by COM.

-

Other good information on COM can be found in various conference tutorials - please see the collection of Mark's conference tutorials

-

For information on implementing COM objects using Python, please see a Quick Start to Server side COM and Python

+

Other good information on COM can be found in various conference tutorials - please see the collection of Mark's conference tutorials

+

For information on implementing COM objects using Python, please see a Quick Start to Server side COM and Python

In this document we discuss the following topics:

    diff --git a/com/win32com/HTML/QuickStartServerCom.html b/com/win32com/HTML/QuickStartServerCom.html index 584e34e80d..be2d862256 100644 --- a/com/win32com/HTML/QuickStartServerCom.html +++ b/com/win32com/HTML/QuickStartServerCom.html @@ -12,7 +12,7 @@

    Quick Start to Server side COM and Python

    Introduction

    This documents how to quickly start implementing COM objects in Python. It is not a thorough discussion of the COM system, or of the concepts introduced by COM.

    -

    For more details information on Python and COM, please see the COM Tutorial given by Greg Stein and Mark Hammond at SPAM 6 (HTML format) or download the same tutorial in PowerPoint format.

    +

    For more details information on Python and COM, please see the COM Tutorial given by Greg Stein and Mark Hammond at SPAM 6 (in HTML format, lost to time) or download the same tutorial in PowerPoint format.

    For information on using external COM objects from Python, please see a Quick Start to Client side COM and Python.

    In this document we discuss the core functionality, registering the server, testing the class, debugging the class, exception handling and server policies (phew!)

    Implement the core functionality

    diff --git a/com/win32com/client/selecttlb.py b/com/win32com/client/selecttlb.py index 1d10c9ad82..bf99f29e23 100644 --- a/com/win32com/client/selecttlb.py +++ b/com/win32com/client/selecttlb.py @@ -113,8 +113,8 @@ def EnumTlbs(excludeFlags=0): # The Resolve() method on the TypelibSpec does this. # For this reason, keep the version numbers as strings - that # way we can't be wrong! Let code that really needs an int to work - # out what to do. FWIW, http://support.microsoft.com/kb/816970 is - # pretty clear that they *should* be hex. + # out what to do. FWIW, https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/816970 + # is pretty clear that they *should* be hex. major = major_minor[0] minor = major_minor[1] key3 = win32api.RegOpenKey(key2, str(version)) diff --git a/com/win32com/demos/excelRTDServer.py b/com/win32com/demos/excelRTDServer.py index 6f512dbf90..9ec844629f 100644 --- a/com/win32com/demos/excelRTDServer.py +++ b/com/win32com/demos/excelRTDServer.py @@ -3,7 +3,7 @@ This module is a functional example of how to implement the IRTDServer interface in python, using the pywin32 extensions. Further details, about this interface and it can be found at: - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexcl2k2/html/odc_xlrtdfaq.asp + https://learn.microsoft.com/en-us/previous-versions/office/developer/office-xp/aa140060(v=office.10) """ # Copyright (c) 2003-2004 by Chris Nilsson diff --git a/com/win32com/demos/ietoolbar.py b/com/win32com/demos/ietoolbar.py index 443760c446..cd8693d7ab 100644 --- a/com/win32com/demos/ietoolbar.py +++ b/com/win32com/demos/ietoolbar.py @@ -219,7 +219,7 @@ def ShowDW(self, bShow): def on_first_button(self): print("first!") - self.webbrowser.Navigate2("http://starship.python.net/crew/mhammond/") + self.webbrowser.Navigate2("https://github.com/mhammond/pywin32") def on_second_button(self): print("second!") diff --git a/com/win32com/readme.html b/com/win32com/readme.html index 5aa005265c..1584fff6fb 100644 --- a/com/win32com/readme.html +++ b/com/win32com/readme.html @@ -29,7 +29,7 @@

    VARIANT objects

    In all builds prior to 204, a COM currency value was returned as a tuple of integers. Working with 2 integers to represent a currency object was a poor choice, but the alternative was never clear. Now Python ships with the -decimal +decimal module, the alternative has arrived!

    diff --git a/com/win32com/src/Register.cpp b/com/win32com/src/Register.cpp index f602e01eaf..104a1a5b45 100644 --- a/com/win32com/src/Register.cpp +++ b/com/win32com/src/Register.cpp @@ -141,7 +141,7 @@ HRESULT PyCom_RegisterGatewayObject(REFIID iid, pfnPyGatewayConstructor ctor, co /* PyType_Ready assures that the type's tp_base is ready, but it does *not* call itself for entries in tp_bases, leading to a crash or indecipherable errors if one of multiple bases is not itself ready. - http://bugs.python.org:80/issue3453 + https://github.com/python/cpython/issues/47703 This code is also in win32uimodule.cpp, should move into pywintypes. */ int PyWinType_Ready(PyTypeObject *pT) diff --git a/com/win32comext/axcontrol/demos/container_ie.py b/com/win32comext/axcontrol/demos/container_ie.py index 135420b458..e2fdebb48e 100644 --- a/com/win32comext/axcontrol/demos/container_ie.py +++ b/com/win32comext/axcontrol/demos/container_ie.py @@ -234,7 +234,7 @@ def OnDestroy(self, hwnd, msg, wparam, lparam): h.browser2.Navigate2("about:blank") doc = h.browser2.Document doc.write( - 'This is an IE page hosted by python' + 'This is an IE page hosted by python' ) doc.write("
    (you can also specify a URL on the command-line...)") else: diff --git a/com/win32comext/axscript/demos/client/ie/CHARTPY.HTM b/com/win32comext/axscript/demos/client/ie/CHARTPY.HTM index be6e10da9e..920f45e3c7 100644 --- a/com/win32comext/axscript/demos/client/ie/CHARTPY.HTM +++ b/com/win32comext/axscript/demos/client/ie/CHARTPY.HTM @@ -20,7 +20,7 @@ Edited: 3/19/96 - VBScript code edited so there is only one procedure for each p Chart Example
    -You must be running Microsoft Internet Explorer 3.0 and have the Microsoft ActiveX Chart control installed to view this page.
    +You must be running Microsoft Internet Explorer 3.0 and have the Microsoft ActiveX Chart Control installed to view this page.

    The chart control enables you to draw charts. The chart's types and styles are properties of the control. The chart has one method, AboutBox. The chart generates no events. @@ -62,8 +62,7 @@ The chart control enables you to draw charts. The chart's types and styles are p diff --git a/com/win32comext/axscript/demos/client/ie/MarqueeText1.htm b/com/win32comext/axscript/demos/client/ie/MarqueeText1.htm index 8a01afafff..d4ba275d67 100644 --- a/com/win32comext/axscript/demos/client/ie/MarqueeText1.htm +++ b/com/win32comext/axscript/demos/client/ie/MarqueeText1.htm @@ -17,7 +17,7 @@

    For more information on Python as an ActiveX scripting language, see

    Python -
    http://www.python.org +
    https://www.python.org diff --git a/com/win32comext/axscript/demos/client/ie/demo_check.htm b/com/win32comext/axscript/demos/client/ie/demo_check.htm index ac74cf5647..8dd2cd12d7 100644 --- a/com/win32comext/axscript/demos/client/ie/demo_check.htm +++ b/com/win32comext/axscript/demos/client/ie/demo_check.htm @@ -5,8 +5,8 @@

    Engine Registration

    The Python ActiveX Scripting Engine is not currently registered.

    -

    Due to a privacy -concern discovered in the engine, the use of Python inside IE has been disabled.

    +

    Due to a +privacy concern discovered in the engine, the use of Python inside IE has been disabled.

    Before any of the supplied demos will work, the engine must be successfully registered. @@ -15,8 +15,8 @@

    Engine Registration

    Register the engine now!

    -

    If you have read about the privacy -concern and still wish to register the engine, just follow the process outlined below:

    +

    If you have read about the +privacy concern and still wish to register the engine, just follow the process outlined below:

    1. Click on the link below
    2. A dialog will be presented asking if the file should be opened or saved to disk. Select "Open it". diff --git a/com/win32comext/axscript/demos/client/ie/demo_intro.htm b/com/win32comext/axscript/demos/client/ie/demo_intro.htm index c02be1a6ef..a7519ffa2f 100644 --- a/com/win32comext/axscript/demos/client/ie/demo_intro.htm +++ b/com/win32comext/axscript/demos/client/ie/demo_intro.htm @@ -9,8 +9,8 @@

      Congratulations on installing the Python ActiveX Scripting Engine

      -

      Be warned that there is a privacy -concern with this engine. Please read this information, including how to disable the feature.

      +

      Be warned that there is a +privacy concern with this engine. Please read this information, including how to disable the feature.

      Object model

      diff --git a/com/win32comext/axscript/demos/client/ie/mousetrack.htm b/com/win32comext/axscript/demos/client/ie/mousetrack.htm index 4c2627690b..c12aa94942 100644 --- a/com/win32comext/axscript/demos/client/ie/mousetrack.htm +++ b/com/win32comext/axscript/demos/client/ie/mousetrack.htm @@ -47,7 +47,7 @@ rect(193,0,261,56,blows+"Microsoft Access", ""), rect(332,43,392,93,blows+"Microsoft Word", ""), rect(457,52,521,99,blows+"Microsoft Excel", ""), - rect(537,12,613,85,"Python blows them all away!", "http://www.python.org"), + rect(537,12,613,85,"Python blows them all away!", "https://www.python.org"), ] default = rect(0,0,0,0,"Click on an icon","") diff --git a/com/win32comext/bits/test/test_bits.py b/com/win32comext/bits/test/test_bits.py index d414e074b8..751cdab4cb 100755 --- a/com/win32comext/bits/test/test_bits.py +++ b/com/win32comext/bits/test/test_bits.py @@ -44,7 +44,7 @@ def JobError(self, job, error): if f.GetRemoteName().endswith("missing-favicon.ico"): print("Changing to point to correct file") f2 = f.QueryInterface(bits.IID_IBackgroundCopyFile2) - favicon = "http://www.python.org/favicon.ico" + favicon = "https://www.python.org/favicon.ico" print("Changing RemoteName from", f2.GetRemoteName(), "to", favicon) f2.SetRemoteName(favicon) job.Resume() @@ -93,11 +93,11 @@ def JobModification(self, job, reserved): # servers, an invalid hostname will *always* be resolved (they # redirect you to a search page), so be careful when testing. job.AddFile( - "http://www.python.org/favicon.ico", + "https://www.python.org/favicon.ico", os.path.join(tempfile.gettempdir(), "bits-favicon.ico"), ) job.AddFile( - "http://www.python.org/missing-favicon.ico", + "https://www.python.org/missing-favicon.ico", os.path.join(tempfile.gettempdir(), "bits-missing-favicon.ico"), ) diff --git a/com/win32comext/ifilter/demo/filterDemo.py b/com/win32comext/ifilter/demo/filterDemo.py index 5c598fa98b..726841c825 100644 --- a/com/win32comext/ifilter/demo/filterDemo.py +++ b/com/win32comext/ifilter/demo/filterDemo.py @@ -239,7 +239,7 @@ def _usage(): print("by default .htm, .txt, .doc, .dot, .xls, .xlt, .ppt are supported") print("you can filter .pdf's by downloading adobes ifilter component. ") print( - "(currently found at http://download.adobe.com/pub/adobe/acrobat/win/all/ifilter50.exe)." + "(currently found at https://download.adobe.com/pub/adobe/acrobat/win/all/ifilter50.exe)." ) print("ifilters for other filetypes are also available.") print() diff --git a/com/win32comext/ifilter/src/stdafx.h b/com/win32comext/ifilter/src/stdafx.h index 8a9b1c26c5..0982841822 100644 --- a/com/win32comext/ifilter/src/stdafx.h +++ b/com/win32comext/ifilter/src/stdafx.h @@ -17,8 +17,8 @@ #ifdef MISSING_PROPSTG // Ack - NTQuery.h is failing with the Vista SDK - pull in what we need // Problem is missing propstg.h, and all the work-arounds are uglier than -// just these 3 prototypes. -// See http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=508254&SiteID=1 +// just these 3 prototypes. See +// https://web.archive.org/web/20071215081009/http://forums.microsoft.com:80/MSDN/ShowPost.aspx?PostID=508254&SiteID=1 STDAPI LoadIFilter(PCWSTR pwcsPath, __in IUnknown *pUnkOuter, __deref_out void **ppIUnk); STDAPI BindIFilterFromStorage(__in IStorage *pStg, __in IUnknown *pUnkOuter, __deref_out void **ppIUnk); diff --git a/com/win32comext/mapi/demos/mapisend.py b/com/win32comext/mapi/demos/mapisend.py index 9f94361a32..534d7a673b 100644 --- a/com/win32comext/mapi/demos/mapisend.py +++ b/com/win32comext/mapi/demos/mapisend.py @@ -2,7 +2,7 @@ """module to send mail with Extended MAPI using the pywin32 mapi wrappers...""" -# this was based on Jason Hattingh's C++ code at http://www.codeproject.com/internet/mapadmin.asp +# this was based on Jason Hattingh's C++ code at http://www.codeproject.com/internet/mapadmin.asp (dead link) # written by David Fraser and Stephen Emslie # you can test this by changing the variables at the bottom and running from the command line diff --git a/com/win32comext/mapi/src/IConverterSession.h b/com/win32comext/mapi/src/IConverterSession.h index c0952f2452..54962f0b04 100644 --- a/com/win32comext/mapi/src/IConverterSession.h +++ b/com/win32comext/mapi/src/IConverterSession.h @@ -8,7 +8,10 @@ DEFINE_GUID(CLSID_IConverterSession, 0x4e3a7680, 0xb77a, 0x11d0, 0x9d, 0xa5, 0x0 // {4b401570-b77b-11d0-9da5-00c04fd65685} DEFINE_GUID(IID_IConverterSession, 0x4b401570, 0xb77b, 0x11d0, 0x9d, 0xa5, 0x0, 0xc0, 0x4f, 0xd6, 0x56, 0x85); -// Constants +// Constants - http://msdn2.microsoft.com/en-us/library/bb905201.aspx +// TODO: Update to +// https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb905201(v=office.12) +// https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2010/hh204509(v=office.14)#mapi-mime-conversion-api #define CCSF_SMTP 0x0002 // the converter is being passed an SMTP message #define CCSF_NOHEADERS 0x0004 // the converter should ignore the headers on the outside message #define CCSF_USE_TNEF 0x0010 // the converter should embed TNEF in the MIME message @@ -21,6 +24,9 @@ DEFINE_GUID(IID_IConverterSession, 0x4b401570, 0xb77b, 0x11d0, 0x9d, 0xa5, 0x0, #define CCSF_PRESERVE_SOURCE 0x40000 // don't modify the source message // http://msdn2.microsoft.com/en-us/library/bb905202.aspx +// TODO: Update to +// https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb905202(v=office.12) +// https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2010/ff960231(v=office.14) interface IConverterSession : public IUnknown { public: diff --git a/com/win32comext/mapi/src/PyIExchangeManageStoreEx.i b/com/win32comext/mapi/src/PyIExchangeManageStoreEx.i index d4e65ea940..9b365cf599 100644 --- a/com/win32comext/mapi/src/PyIExchangeManageStoreEx.i +++ b/com/win32comext/mapi/src/PyIExchangeManageStoreEx.i @@ -52,7 +52,7 @@ PyIExchangeManageStoreEx::~PyIExchangeManageStoreEx() {} %} /* -** See http://blogs.msdn.com/b/dvespa/archive/2014/01/15/new-mapi-interface-ignore-home-server.aspx +** See https://learn.microsoft.com/en-ca/archive/blogs/dvespa/a-new-mapi-interface-is-available-to-let-you-force-connections-to-go-to-a-specific-exchange-server */ %native(CreateStoreEntryID2) CreateStoreEntryID2; diff --git a/com/win32comext/mapi/src/extraMAPIDefs.h b/com/win32comext/mapi/src/extraMAPIDefs.h index 26e2d08aff..b3c43837f0 100644 --- a/com/win32comext/mapi/src/extraMAPIDefs.h +++ b/com/win32comext/mapi/src/extraMAPIDefs.h @@ -1,6 +1,6 @@ #pragma once -// https://blogs.msdn.microsoft.com/stephen_griffin/2011/10/13/the-elusive-0x81002746-error/ +// https://learn.microsoft.com/en-ca/archive/blogs/stephen_griffin/the-elusive-0x81002746-error // https://github.com/microsoft/mfcmapi/blob/main/core/interpret/errorArray.h #define MAIL_E_NAMENOTFOUND MAKE_SCODE(SEVERITY_ERROR, 0x0100, 10054) #define MAPI_E_STORE_FULL MAKE_MAPI_E(0x60C) diff --git a/com/win32comext/mapi/src/extraMAPIGuids.h b/com/win32comext/mapi/src/extraMAPIGuids.h index 18cb7e0199..d490c86893 100644 --- a/com/win32comext/mapi/src/extraMAPIGuids.h +++ b/com/win32comext/mapi/src/extraMAPIGuids.h @@ -1,6 +1,6 @@ #pragma once -// https://support.microsoft.com/en-ca/help/171907/info-save-message-to-msg-compound-file +// https://learn.microsoft.com/en-us/outlook/troubleshoot/development/save-message-to-msg-file // CLSID_MailMessage{00020D0B-0000-0000-C000-000000000046} DEFINE_GUID(CLSID_MailMessage, 0x00020D0B, 0x0000, 0x0000, 0xC0, 0x00, 0x0, 0x00, 0x0, 0x00, 0x00, 0x46); diff --git a/com/win32comext/mapi/src/mapi.i b/com/win32comext/mapi/src/mapi.i index be270f51de..1c2d82b90d 100644 --- a/com/win32comext/mapi/src/mapi.i +++ b/com/win32comext/mapi/src/mapi.i @@ -555,6 +555,9 @@ static PyObject *PyMAPIUninitialize(PyObject *self, PyObject *args) #define FLUSH_ASYNC_OK FLUSH_ASYNC_OK // IConverterSession Constants - http://msdn2.microsoft.com/en-us/library/bb905201.aspx +// TODO: Update to +// https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb905201(v=office.12) +// https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2010/hh204509(v=office.14)#mapi-mime-conversion-api #define CCSF_SMTP CCSF_SMTP // the converter is being passed an SMTP message #define CCSF_NOHEADERS CCSF_NOHEADERS // the converter should ignore the headers on the outside message #define CCSF_USE_TNEF CCSF_USE_TNEF // the converter should embed TNEF in the MIME message @@ -870,7 +873,7 @@ done: %{ // Code for converting RTF to HTML. -// Found at http://www.wischik.com/lu/programmer/mapi_utils.html +// Found at https://www.wischik.com/lu/programmer/mapi_utils.html // MarkH converted it to Python, but was too slow. Moving to a regex // based parser was too much work. diff --git a/com/win32comext/propsys/src/PyPROPVARIANT.cpp b/com/win32comext/propsys/src/PyPROPVARIANT.cpp index ce7f91d832..3006220d08 100644 --- a/com/win32comext/propsys/src/PyPROPVARIANT.cpp +++ b/com/win32comext/propsys/src/PyPROPVARIANT.cpp @@ -532,7 +532,7 @@ BOOL PyWin_NewPROPVARIANT(PyObject *ob, VARTYPE vt, PROPVARIANT *ppv) break; } // Docs are contradictory as to whether VT_VARIANT can be used with VT_ARRAY - // http://msdn.microsoft.com/en-us/library/aa380072%28VS.85%29.aspx + // https://learn.microsoft.com/en-ca/windows/win32/api/propidlbase/ns-propidlbase-propvariant // In the section on VT_ARRAY, it says it can be or'ed with VT_VARIANT. However, // under VT_VARIANT it says it can only be used with VT_VECTOR or VT_BYREF diff --git a/com/win32comext/shell/demos/servers/empty_volume_cache.py b/com/win32comext/shell/demos/servers/empty_volume_cache.py index b5fb32e15e..e0df07274a 100644 --- a/com/win32comext/shell/demos/servers/empty_volume_cache.py +++ b/com/win32comext/shell/demos/servers/empty_volume_cache.py @@ -1,5 +1,5 @@ # A sample implementation of IEmptyVolumeCache - see -# http://msdn2.microsoft.com/en-us/library/aa969271.aspx for an overview. +# https://learn.microsoft.com/en-ca/windows/win32/lwef/disk-cleanup for an overview. # # * Execute this script to register the handler # * Start the "disk cleanup" tool - look for "pywin32 compiled files" diff --git a/com/win32comext/shell/demos/servers/folder_view.py b/com/win32comext/shell/demos/servers/folder_view.py index f00e383cc3..bfca23cf7a 100644 --- a/com/win32comext/shell/demos/servers/folder_view.py +++ b/com/win32comext/shell/demos/servers/folder_view.py @@ -1,5 +1,5 @@ # This is a port of the Vista SDK "FolderView" sample, and associated -# notes at http://shellrevealed.com/blogs/shellblog/archive/2007/03/15/Shell-Namespace-Extension_3A00_-Creating-and-Using-the-System-Folder-View-Object.aspx +# notes at https://web.archive.org/web/20081225011615/http://shellrevealed.com/blogs/shellblog/archive/2007/03/15/Shell-Namespace-Extension_3A00_-Creating-and-Using-the-System-Folder-View-Object.aspx # A key difference to shell_view.py is that this version uses the default # IShellView provided by the shell (via SHCreateShellFolderView) rather # than our own. diff --git a/com/win32comext/shell/src/shell.cpp b/com/win32comext/shell/src/shell.cpp index 6afd48d0f2..da644a7378 100644 --- a/com/win32comext/shell/src/shell.cpp +++ b/com/win32comext/shell/src/shell.cpp @@ -408,8 +408,9 @@ PyObject *PyObject_FromPIDLArray(UINT cidl, LPCITEMIDLIST *pidl) } // See MSDN -// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/transferring/clipboard.asp -// (or search MSDN for "CFSTR_SHELLIDLIST" +// https://learn.microsoft.com/en-us/windows/win32/shell/dragdrop +// https://learn.microsoft.com/en-us/windows/win32/shell/clipboard#cfstr_shellidlist +// (or search for "CFSTR_SHELLIDLIST") #define GetPIDLFolder(pida) (LPCITEMIDLIST)(((LPBYTE)pida) + (pida)->aoffset[0]) #define GetPIDLItem(pida, i) (LPCITEMIDLIST)(((LPBYTE)pida) + (pida)->aoffset[i + 1]) PyObject *PyObject_FromCIDA(CIDA *pida) diff --git a/isapi/samples/redirector.py b/isapi/samples/redirector.py index e03efcabc4..edf0e14456 100644 --- a/isapi/samples/redirector.py +++ b/isapi/samples/redirector.py @@ -29,7 +29,7 @@ import win32traceutil # The site we are proxying. -proxy = "http://www.python.org" +proxy = "https://www.python.org" # Urls we exclude (ie, allow IIS to handle itself) - all are lowered, # and these entries exist by default on Vista... diff --git a/isapi/samples/redirector_asynch.py b/isapi/samples/redirector_asynch.py index 24af96e4b1..b7c066fedd 100644 --- a/isapi/samples/redirector_asynch.py +++ b/isapi/samples/redirector_asynch.py @@ -17,7 +17,7 @@ import win32traceutil # The site we are proxying. -proxy = "http://www.python.org" +proxy = "https://www.python.org" # We synchronously read chunks of this size then asynchronously write them. CHUNK_SIZE = 8192 diff --git a/isapi/samples/redirector_with_filter.py b/isapi/samples/redirector_with_filter.py index 393e89d059..af6356e6fd 100644 --- a/isapi/samples/redirector_with_filter.py +++ b/isapi/samples/redirector_with_filter.py @@ -46,7 +46,7 @@ import win32traceutil # The site we are proxying. -proxy = "http://www.python.org" +proxy = "https://www.python.org" # The name of the virtual directory we install in, and redirect from. virtualdir = "/python" diff --git a/isapi/src/pyISAPI.cpp b/isapi/src/pyISAPI.cpp index 6cf6393516..12c789cb59 100644 --- a/isapi/src/pyISAPI.cpp +++ b/isapi/src/pyISAPI.cpp @@ -221,7 +221,7 @@ DWORD WINAPI HttpFilterProc(HTTP_FILTER_CONTEXT *phfc, DWORD NotificationType, V } // Hmm - this appears to never be called!?!? -// http://sf.net/support/tracker.php?aid=1173795 +// https://sourceforge.net/p/pywin32/bugs/206/ BOOL WINAPI TerminateFilter(DWORD status) { BOOL bRetStatus; diff --git a/win32/Demos/security/localized_names.py b/win32/Demos/security/localized_names.py index d491d2e222..d5b155d94d 100644 --- a/win32/Demos/security/localized_names.py +++ b/win32/Demos/security/localized_names.py @@ -1,6 +1,6 @@ # A Python port of the MS knowledge base article Q157234 # "How to deal with localized and renamed user and group names" -# http://support.microsoft.com/default.aspx?kbid=157234 +# https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/157234 import sys diff --git a/win32/Demos/win32gui_menu.py b/win32/Demos/win32gui_menu.py index fb10b118c4..86a5b8ae0c 100644 --- a/win32/Demos/win32gui_menu.py +++ b/win32/Demos/win32gui_menu.py @@ -177,9 +177,9 @@ def createMenu(self): InsertMenuItem(menu, 0, 1, item) # Owner-draw menus mainly from: - # http://windowssdk.msdn.microsoft.com/en-us/library/ms647558.aspx + # https://learn.microsoft.com/en-ca/windows/win32/menurc/using-menus # and: - # http://www.codeguru.com/cpp/controls/menu/bitmappedmenus/article.php/c165 + # https://www.codeguru.com/cplusplus/owner-drawn-menu-with-icons/ # Create one with an icon - this is *lots* more work - we do it # owner-draw! The primary reason is to handle transparency better - diff --git a/win32/Demos/win32gui_taskbar.py b/win32/Demos/win32gui_taskbar.py index eca439baa1..f487b3dae7 100644 --- a/win32/Demos/win32gui_taskbar.py +++ b/win32/Demos/win32gui_taskbar.py @@ -104,7 +104,7 @@ def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): win32gui.AppendMenu(menu, win32con.MF_STRING, 1024, "Say Hello") win32gui.AppendMenu(menu, win32con.MF_STRING, 1025, "Exit program") pos = win32gui.GetCursorPos() - # See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp + # See https://learn.microsoft.com/en-us/windows/win32/api/_menurc/ win32gui.SetForegroundWindow(self.hwnd) win32gui.TrackPopupMenu( menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None diff --git a/win32/Lib/pywin32_bootstrap.py b/win32/Lib/pywin32_bootstrap.py index c9f59a56d8..0161f27aff 100644 --- a/win32/Lib/pywin32_bootstrap.py +++ b/win32/Lib/pywin32_bootstrap.py @@ -14,7 +14,7 @@ import os # We're guaranteed only that __path__: Iterable[str] - # https://docs.python.org/3/reference/import.html#__path__ + # https://docs.python.org/3/reference/import.html#path-attributes-on-modules for path in pywin32_system32.__path__: if os.path.isdir(path): os.add_dll_directory(path) diff --git a/win32/Lib/sspi.py b/win32/Lib/sspi.py index d2658773ac..0f20f1ed57 100644 --- a/win32/Lib/sspi.py +++ b/win32/Lib/sspi.py @@ -100,7 +100,7 @@ def verify(self, data, sig): def unwrap(self, token): """ GSSAPI's unwrap with SSPI. - https://docs.microsoft.com/en-us/windows/win32/secauthn/sspi-kerberos-interoperability-with-gssapi + https://learn.microsoft.com/en-us/windows/win32/secauthn/sspi-kerberos-interoperability-with-gssapi Usable mainly with Kerberos SSPI package, but this is not enforced. @@ -125,7 +125,7 @@ def unwrap(self, token): def wrap(self, msg, encrypt=False): """ GSSAPI's wrap with SSPI. - https://docs.microsoft.com/en-us/windows/win32/secauthn/sspi-kerberos-interoperability-with-gssapi + https://learn.microsoft.com/en-us/windows/win32/secauthn/sspi-kerberos-interoperability-with-gssapi Usable mainly with Kerberos SSPI package, but this is not enforced. diff --git a/win32/Lib/win32gui_struct.py b/win32/Lib/win32gui_struct.py index 5651c7bc83..4fac0f3f1c 100644 --- a/win32/Lib/win32gui_struct.py +++ b/win32/Lib/win32gui_struct.py @@ -91,7 +91,7 @@ def UnpackNMITEMACTIVATE(lparam): # MENUITEMINFO struct -# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Resources/Menus/MenuReference/MenuStructures/MENUITEMINFO.asp +# https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-menuiteminfow # We use the struct module to pack and unpack strings as MENUITEMINFO # structures. We also have special handling for the 'fMask' item in that # structure to avoid the caller needing to explicitly check validity diff --git a/win32/Lib/win32pdhquery.py b/win32/Lib/win32pdhquery.py index 301b85c163..e356f89142 100644 --- a/win32/Lib/win32pdhquery.py +++ b/win32/Lib/win32pdhquery.py @@ -88,10 +88,10 @@ If you can access the MS Developers Network Library, you can find information about the PDH API as MS describes it. For a background article, try: -http://msdn.microsoft.com/library/en-us/dnperfmo/html/msdn_pdhlib.asp +https://web.archive.org/web/20040926110045/http://msdn.microsoft.com:80/library/en-us/dnperfmo/html/msdn_pdhlib.asp The reference guide for the PDH API was last spotted at: -http://msdn.microsoft.com/library/en-us/perfmon/base/using_the_pdh_interface.asp +https://learn.microsoft.com/en-us/windows/win32/perfctrs/using-the-pdh-functions-to-consume-counter-data In general the Python version of the API is just a wrapper around the @@ -108,7 +108,7 @@ a simple logger there, but the example above is 90% of the work of that project, so don't sweat it if you don't find anything there. (currently the account hasn't been set up). -http://starship.skyport.net/crew/mcfletch/ +https://web.archive.org/web/19980422204546/http://starship.skyport.net/crew/mcfletch/ If you need to contact me immediately, (why I can't imagine), you can email me at mcfletch@golden.net, or just post your question to the diff --git a/win32/Lib/win32pdhutil.py b/win32/Lib/win32pdhutil.py index bc966412f3..839cb39291 100644 --- a/win32/Lib/win32pdhutil.py +++ b/win32/Lib/win32pdhutil.py @@ -27,7 +27,7 @@ error = win32pdh.error # Re-exported alias # Handle some localization issues. -# see http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q287/1/59.asp&NoWebContent=1 +# see https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/287159 # Build a map of english_counter_name: counter_id counter_english_map: dict[str, int] = {} @@ -60,8 +60,8 @@ def GetPerformanceAttributes( # thread's CPU usage is either 0 or 100). To read counters like this, # you should copy this function, but keep the counter open, and call # CollectQueryData() each time you need to know. - # See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262938 - # and http://msdn.microsoft.com/library/en-us/dnperfmo/html/perfmonpt2.asp + # See https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/262938 + # and https://web.archive.org/web/20040926105842/http://msdn.microsoft.com:80/library/en-us/dnperfmo/html/perfmonpt2.asp # My older explanation for this was that the "AddCounter" process forced # the CPU to 100%, but the above makes more sense :) path = win32pdh.MakeCounterPath((machine, object, instance, None, inum, counter)) @@ -145,8 +145,8 @@ def ShowAllProcesses(): ) hcs.append(win32pdh.AddCounter(hq, path)) win32pdh.CollectQueryData(hq) - # as per http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262938, some "%" based - # counters need two collections + # as per https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/262938 + # some "%" based counters need two collections time.sleep(0.01) win32pdh.CollectQueryData(hq) print("%-15s\t" % (instance[:15]), end=" ") diff --git a/win32/Lib/win32timezone.py b/win32/Lib/win32timezone.py index 81d95d3b11..d9f69700ab 100644 --- a/win32/Lib/win32timezone.py +++ b/win32/Lib/win32timezone.py @@ -101,7 +101,7 @@ '2007-06-13 01:00:00' Microsoft now has a patch for handling time zones in 2007 (see -http://support.microsoft.com/gp/cp_dst) +https://learn.microsoft.com/en-us/troubleshoot/windows-client/system-management-components/daylight-saving-time-help-support) As a result, patched systems will give an incorrect result for dates prior to the designated year except for Vista and its @@ -901,7 +901,7 @@ def get_sorted_time_zones(key=None) -> list[TimeZoneInfo]: key must be a function that takes a TimeZoneInfo object and returns a value suitable for sorting on. The key defaults to the bias (descending), as is done in Windows - (see http://blogs.msdn.com/michkap/archive/2006/12/22/1350684.aspx) + (see https://web.archive.org/web/20130723075340/http://blogs.msdn.com/b/michkap/archive/2006/12/22/1350684.aspx) """ key = key or (lambda tzi: -tzi.staticInfo.bias) zones = TimeZoneInfo.get_all_time_zones() @@ -1023,7 +1023,8 @@ def resolveMUITimeZone(spec: str) -> str | None: """Resolve a multilingual user interface resource for the time zone name spec should be of the format @path,-stringID[;comment] - see http://msdn2.microsoft.com/en-us/library/ms725481.aspx for details + see https://learn.microsoft.com/en-ca/windows/win32/api/timezoneapi/ns-timezoneapi-time_zone_information + for details >>> import sys >>> result = resolveMUITimeZone('@tzres.dll,-110') diff --git a/win32/help/process_info.html b/win32/help/process_info.html index 97a61a8b02..76a5e83a0c 100644 --- a/win32/help/process_info.html +++ b/win32/help/process_info.html @@ -840,8 +840,10 @@

      In Conclusion

      Further Info

        -
      • Pdh stuff found at ftp://ftp.microsoft.com in something similar to /developr/platformsdk/april2000/x86/redist/pdh
      • -
      • Mirosoft MSDN references at http://msdn.microsoft.com
      • +
      • + Microsoft documentation on using PDH + https://learn.microsoft.com/en-us/windows/win32/perfctrs/using-the-pdh-functions-to-consume-counter-data +
      • Relevant Pdh Python libraries: win32pdh.py, win32pdhutil.py

      diff --git a/win32/help/security_directories.html b/win32/help/security_directories.html index 0130e796de..42b176bb63 100644 --- a/win32/help/security_directories.html +++ b/win32/help/security_directories.html @@ -70,8 +70,8 @@

      Introduction

      Extending Python

      There are several ways one can extend python. You can take a raw wrapping -approach, SWIG or -BPL (Boost Python Libraries) . +approach, SWIG or +BPL (Boost Python Libraries) . This extension is simple enough that we're going to wrap the C++ w/out the help of SWIG of BPL. This won't be an extensive discussion about extending @@ -143,16 +143,14 @@

      GetNamedSecurityInfo

    The following code goes through those 4 steps in greater detail. -Refer to Microsoft MSDN references +Refer to Build desktop Windows apps using the Win32 API for info about the various win32 calls made.

    Extending Python for Directory Permissions

    -To setup Visual Studio correctly for building an extension, it is easiest to -use a program called compile.py -which builds the project for you. The Extension creates a dictionary of +The following Extension creates a dictionary of user or group plus the access mask. To Python it will look like:
     import fileperm
    @@ -515,7 +513,7 @@ 

    In Conclusion

    Extending python isn't as simple as writing python, but it greatly expands python's capabilities. There are many details not covered here like reference counting, threading, and error handeling. The python website has documentation about -Extending Python. +Extending and Embedding the Python Interpreter.

    @@ -525,11 +523,14 @@

    In Conclusion

    Further Info


    Author

    diff --git a/win32/help/win32net.html b/win32/help/win32net.html index 6d4d62e188..d0ce636805 100644 --- a/win32/help/win32net.html +++ b/win32/help/win32net.html @@ -65,7 +65,8 @@

    Introduction

    The python api for the win32net module closely mirrors the C++ functions documented in the msdn. This makes it convenient to look at -the Microsoft MSDN +the +Windows Network Management documentation for further information if necessary. There is a sister module to win32net called win32netcon that houses all of the constants needed by the win32net modules. @@ -319,7 +320,7 @@

    Changing the full name

    structure lets you change just about anything you want for a user.Also, not all levels are available for both NetUserSetInfo and NetUserGetInfo. NetUserGetInfo has about 7 available to it. (btw, Microsoft MSDN would have more +href="https://learn.microsoft.com/en-us/windows/win32/api/lmaccess/">lmaccess.h header documentation would have more information about this). I'll show an example with NetUserSetInfo using USER_INFO_1008 that has no corresponding NetUserGetInfo. @@ -445,7 +446,7 @@

    In Conclusion

    Further Info

    diff --git a/win32/src/PyWinTypesmodule.cpp b/win32/src/PyWinTypesmodule.cpp index e095fdf935..5815ce5784 100644 --- a/win32/src/PyWinTypesmodule.cpp +++ b/win32/src/PyWinTypesmodule.cpp @@ -512,7 +512,7 @@ PyLong_AsVoidPtr is unsuitable for use in many places due to the following issue that function and can be converted back to a usable address. From the response to this bug report: -http://sourceforge.net/tracker/?func=detail&atid=105470&aid=1630863&group_id=5470 +https://github.com/python/cpython/issues/44430 apparently if you want any reasonable or consistent behaviour from this function you're expected to perform the type checking yourself first. And if you have to do all that, why use the damn function at all ? diff --git a/win32/src/PythonService.cpp b/win32/src/PythonService.cpp index 45088d08f3..494ae310cb 100644 --- a/win32/src/PythonService.cpp +++ b/win32/src/PythonService.cpp @@ -147,7 +147,7 @@ SERVICE_STATUS stoppedErrorStatus = {SERVICE_WIN32_OWN_PROCESS, 0, // dwCheckPoint 0}; // The Service Control Manager/Event Log seems to interpret dwServiceSpecificExitCode as a Win32 Error code -// (https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes) +// (https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes) // So stoppedErrorStatus has dwServiceSpecificExitCode with bit 29 set to indicate an application-defined error code. /////////////////////////////////////////////////////////////////////// diff --git a/win32/src/win32credmodule.cpp b/win32/src/win32credmodule.cpp index f992382fc0..4c8567fd75 100644 --- a/win32/src/win32credmodule.cpp +++ b/win32/src/win32credmodule.cpp @@ -62,7 +62,7 @@ BOOL PyWinObject_AsCREDENTIAL_ATTRIBUTE(PyObject *obattr, PCREDENTIAL_ATTRIBUTE goto done; } // Handle `Value`: the docs - // https://docs.microsoft.com/en-us/windows/win32/api/wincred/ns-wincred-credential_attributew say it's an LPBYTE + // https://learn.microsoft.com/en-us/windows/win32/api/wincred/ns-wincred-credential_attributew say it's an LPBYTE // Value (meaning it's just bytes) but then the description says "Data associated with the attribute. By convention, // if Value is a text string, then Value should not include the trailing zero character and should be in UNICODE." if (PyUnicode_Check(obValue)) { diff --git a/win32/src/win32file.i b/win32/src/win32file.i index 7547173dc4..6d9abe1e98 100644 --- a/win32/src/win32file.i +++ b/win32/src/win32file.i @@ -2924,11 +2924,6 @@ static Wow64DisableWow64FsRedirectionfunc pfnWow64DisableWow64FsRedirection = NU typedef BOOL (WINAPI *Wow64RevertWow64FsRedirectionfunc)(PVOID); static Wow64RevertWow64FsRedirectionfunc pfnWow64RevertWow64FsRedirection = NULL; -/* GetFileInformationByHandleEx and supporting structs are defined in SDK for Vista and later, - but can also be used on XP with a separate header and lib: - http://www.microsoft.com/en-us/download/details.aspx?id=22599 - However, the filextd.lib included is static, so this module would have to be compiled for XP only. -*/ typedef BOOL (WINAPI *GetFileInformationByHandleExfunc)(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD); static GetFileInformationByHandleExfunc pfnGetFileInformationByHandleEx = NULL; typedef BOOL (WINAPI *SetFileInformationByHandlefunc)(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD); diff --git a/win32/src/win32gui.i b/win32/src/win32gui.i index 2a8161a901..38902022fd 100644 --- a/win32/src/win32gui.i +++ b/win32/src/win32gui.i @@ -6453,7 +6453,7 @@ PyCFunction pfnPyGetOpenFileNameW=(PyCFunction)PyGetOpenFileNameW; BOOL PyObject_AsUINT(PyObject *ob, UINT *puint) { // PyLong_AsUnsignedLong throws a bogus error in 2.3 if passed an int, and there is no PyInt_AsUnsignedLong - // ref: http://mail.python.org/pipermail/patches/2004-September/016060.html + // ref: https://mail.python.org/pipermail/patches/2004-September/016060.html // And for some reason none of the Unsigned*Mask functions check for overflow ??? __int64 UINT_candidate=PyLong_AsLongLong(ob); diff --git a/win32/test/test_sspi.py b/win32/test/test_sspi.py index 6b113aeb0e..1d9959648b 100644 --- a/win32/test/test_sspi.py +++ b/win32/test/test_sspi.py @@ -84,7 +84,7 @@ def _doTestEncrypt(self, pkg_name): def _doTestEncryptStream(self, pkg_name): # Test out the SSPI/GSSAPI interop wrapping examples at - # https://docs.microsoft.com/en-us/windows/win32/secauthn/sspi-kerberos-interoperability-with-gssapi + # https://learn.microsoft.com/en-us/windows/win32/secauthn/sspi-kerberos-interoperability-with-gssapi sspiclient, sspiserver = self._doAuth(pkg_name) diff --git a/win32/test/test_win32crypt.py b/win32/test/test_win32crypt.py index 9360cfbe22..f6f656caa6 100644 --- a/win32/test/test_win32crypt.py +++ b/win32/test/test_win32crypt.py @@ -2,7 +2,8 @@ import contextlib import unittest -from typing import Any, Iterator +from collections.abc import Iterator +from typing import Any import win32crypt from pywin32_testutil import find_test_fixture, testmain diff --git a/win32/test/test_win32inet.py b/win32/test/test_win32inet.py index 99204e4344..8b18bbaea9 100644 --- a/win32/test/test_win32inet.py +++ b/win32/test/test_win32inet.py @@ -26,15 +26,15 @@ class CookieTests(unittest.TestCase): def testCookies(self): data = "TestData=Test" - InternetSetCookie("http://www.python.org", None, data) - got = InternetGetCookie("http://www.python.org", None) + InternetSetCookie("https://www.python.org", None, data) + got = InternetGetCookie("https://www.python.org", None) # handle that there might already be cookies for the domain. bits = (x.strip() for x in got.split(";")) self.assertTrue(data in bits) def testCookiesEmpty(self): try: - InternetGetCookie("http://site-with-no-cookie.python.org", None) + InternetGetCookie("https://site-with-no-cookie.python.org", None) self.fail("expected win32 exception") except error as exc: self.assertEqual(exc.winerror, winerror.ERROR_NO_MORE_ITEMS) @@ -61,7 +61,7 @@ def tearDown(self): def testPythonDotOrg(self): hdl = InternetOpenUrl( - self.hi, "http://www.python.org", None, INTERNET_FLAG_EXISTING_CONNECT + self.hi, "https://www.python.org", None, INTERNET_FLAG_EXISTING_CONNECT ) chunks = [] while 1: