diff --git a/Orchestrator/Web/Index.xhtml b/Orchestrator/Web/Index.xhtml index 4d6c7213..da14bb22 100644 --- a/Orchestrator/Web/Index.xhtml +++ b/Orchestrator/Web/Index.xhtml @@ -83,6 +83,28 @@ }); } + + mGlobal.Info.TablePlanLogListRefresh=function() { + ///Обнулить таблицу + $(".openrpa-info-table-planloglist").html("") + $.ajax({ + type: "POST", + url: 'ProcessingRun', + data: '{"actionList":[{"type":"PlanLogListGet"}]}', + success: + function(lData,l2,l3) + { + var lResponseJSON=JSON.parse(lData) + lResponseJSON["actionListResult"][0]["result"].forEach(function(lItem){lItem["processPathName"]=("processPath" in lItem ? lItem["processPath"] : lItem["processName"])}) + ///Отправить запрос на формирование таблицы + lHTMLCode=mGlobal.GeneralGenerateHTMLCodeHandlebars(".openrpa-hidden-info-table-planloglist",lResponseJSON["actionListResult"][0]); + ///Установить HTML код + $(".openrpa-info-table-planloglist").html(lHTMLCode) + }, + dataType: "text" + }); + } + ////////////////////////// /////Controller JS module ////////////////////////// @@ -198,6 +220,7 @@ ///Инициализация страницы //////////////////////////////////// mGlobal.Info.TableActivityLogScheduleListRefresh(); + mGlobal.Info.TablePlanLogListRefresh(); }) ; @@ -299,8 +322,41 @@ -
- +
+

+ + Plan log +

+
+ +
+
+
+
@@ -320,7 +376,7 @@ Look machine screenshot diff --git a/Orchestrator/orchestratorConfiguration.json b/Orchestrator/orchestratorConfiguration.json index ce9932ff..bbc684e9 100644 --- a/Orchestrator/orchestratorConfiguration.json +++ b/Orchestrator/orchestratorConfiguration.json @@ -57,7 +57,7 @@ { "activityType":"loopActivity", "loopSeconds":6, - "loopTimeStart":"10:45", + "loopTimeStart":"21:45", "loopTimeEnd":"21:46", "pythonPackageName":"CheckActivity", "pythonFunctionName":"test_activity", diff --git a/Orchestrator/orchestratorMain.py b/Orchestrator/orchestratorMain.py index 8a00f01b..aa8a7aff 100644 --- a/Orchestrator/orchestratorMain.py +++ b/Orchestrator/orchestratorMain.py @@ -77,7 +77,7 @@ while True: #Запустить процесс lItemArgs=[lItem["processPath"]] lItemArgs.extend(lItem["processArgs"]) - subprocess.Popen(lItemArgs,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) + subprocess.Popen(lItemArgs,shell=True) #Определить вид активности if lItem["activityType"]=="processStop": #Вид активности - остановка процесса diff --git a/Orchestrator/orchestratorProcessor.py b/Orchestrator/orchestratorProcessor.py index 4e914add..baf84345 100644 --- a/Orchestrator/orchestratorProcessor.py +++ b/Orchestrator/orchestratorProcessor.py @@ -62,6 +62,10 @@ def ProcessingRun(inConfigurationDict): if lItem["type"]=="ActivityLogScheduleListGet": #pdb.set_trace() lResult["actionListResult"][-1] = {**lResult["actionListResult"][-1], **{"result":mGlobalDict["ActivityLogScheduleList"]}} + #Обработка команды PlanLogListGet + if lItem["type"]=="PlanLogListGet": + #pdb.set_trace() + lResult["actionListResult"][-1] = {**lResult["actionListResult"][-1], **{"result":mGlobalDict["JSONConfigurationDict"]["activityList"]}} #Обработка команды ActivityCMDRun if lItem["type"]=="ActivityCMDRun": lCMDCode="cmd /c "+lItem["code"] diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/INSTALLER b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/LICENSE.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/LICENSE.txt new file mode 100644 index 00000000..105aea99 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2014, Al Sweigart +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the PyAutoGUI nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/METADATA b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/METADATA new file mode 100644 index 00000000..912231bd --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/METADATA @@ -0,0 +1,138 @@ +Metadata-Version: 2.1 +Name: PyAutoGUI +Version: 0.9.44 +Summary: A cross-platform module for GUI automation for human beings. Control the keyboard and mouse from a Python script. +Home-page: https://github.com/asweigart/pyautogui +Author: Al Sweigart +Author-email: al@inventwithpython.com +License: BSD +Keywords: gui automation test testing keyboard mouse cursor click press keystroke control +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Win32 (MS Windows) +Classifier: Environment :: X11 Applications +Classifier: Environment :: MacOS X +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.5 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.1 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Description-Content-Type: text/markdown +Requires-Dist: pymsgbox +Requires-Dist: PyTweening (>=1.0.1) +Requires-Dist: Pillow +Requires-Dist: pyscreeze (>=0.1.21) +Requires-Dist: pygetwindow (>=0.0.5) + +PyAutoGUI +========= + +PyAutoGUI is a cross-platform GUI automation Python module for human beings. Used to programmatically control the mouse & keyboard. + +`pip install pyautogui` + +Full documentation available at https://pyautogui.readthedocs.org + +Simplified Chinese documentation available at https://muxuezi.github.io/posts/doc-pyautogui.html + +Source code available at https://github.com/asweigart/pyautogui + +Dependencies +============ + +PyAutoGUI supports Python 2 and 3. If you are installing PyAutoGUI from PyPI using pip: + +Windows has no dependencies. The Win32 extensions do not need to be installed. + +OS X needs the pyobjc-core and pyobjc module installed (in that order). + +Linux needs the python3-xlib (or python-xlib for Python 2) module installed. + +Pillow needs to be installed, and on Linux you may need to install additional libraries to make sure Pillow's PNG/JPEG works correctly. See: + + https://stackoverflow.com/questions/7648200/pip-install-pil-e-tickets-1-no-jpeg-png-support + + http://ubuntuforums.org/showthread.php?t=1751455 + +If you want to do development and contribute to PyAutoGUI, you will need to install these modules from PyPI: + +* pyscreeze +* pymsgbox +* pytweening + +Example Usage +============= + +Keyboard and Mouse Control +-------------------------- +```python + >>> import pyautogui + >>> screenWidth, screenHeight = pyautogui.size() + >>> currentMouseX, currentMouseY = pyautogui.position() + >>> pyautogui.moveTo(100, 150) + >>> pyautogui.click() + >>> pyautogui.moveRel(None, 10) # move mouse 10 pixels down + >>> pyautogui.doubleClick() + >>> pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.tweens.easeInOutQuad) # use tweening/easing function to move mouse over 2 seconds. + >>> pyautogui.typewrite('Hello world!', interval=0.25) # type with quarter-second pause in between each key + >>> pyautogui.press('esc') + >>> pyautogui.keyDown('shift') + >>> pyautogui.typewrite(['left', 'left', 'left', 'left', 'left', 'left']) + >>> pyautogui.keyUp('shift') + >>> pyautogui.hotkey('ctrl', 'c') +``` + +Display Message Boxes +--------------------- +```python + >>> import pyautogui + >>> pyautogui.alert('This is an alert box.') + 'OK' + >>> pyautogui.confirm('Shall I proceed?') + 'Cancel' + >>> pyautogui.confirm('Enter option.', buttons=['A', 'B', 'C']) + 'B' + >>> pyautogui.prompt('What is your name?') + 'Al' + >>> pyautogui.password('Enter password (text will be hidden)') + 'swordfish' +``` +Screenshot Functions +-------------------- + +(PyAutoGUI uses Pillow for image-related features.) +```python + >>> import pyautogui + >>> im1 = pyautogui.screenshot() + >>> im1.save('my_screenshot.png') + >>> im2 = pyautogui.screenshot('my_screenshot2.png') +``` +You can also locate where an image is on the screen: +```python + >>> import pyautogui + >>> button7location = pyautogui.locateOnScreen('button.png') # returns (left, top, width, height) of matching region + >>> button7location + (1416, 562, 50, 41) + >>> buttonx, buttony = pyautogui.center(button7location) + >>> buttonx, buttony + (1441, 582) + >>> pyautogui.click(buttonx, buttony) # clicks the center of where the button was found +``` +The locateCenterOnScreen() function returns the center of this match region: +```python + >>> import pyautogui + >>> buttonx, buttony = pyautogui.locateCenterOnScreen('button.png') # returns (x, y) of matching region + >>> buttonx, buttony + (1441, 582) + >>> pyautogui.click(buttonx, buttony) # clicks the center of where the button was found +``` + + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/RECORD b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/RECORD new file mode 100644 index 00000000..41b52786 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/RECORD @@ -0,0 +1,26 @@ +PyAutoGUI-0.9.44.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyAutoGUI-0.9.44.dist-info/LICENSE.txt,sha256=rNMjpKuy_R62UDcXVGvAbRWA3qmJw7EzjRdrp8N8Zl0,1509 +PyAutoGUI-0.9.44.dist-info/METADATA,sha256=K2mubdEMFXv_Opkrn5f9Ax140-njnxIRCEpFClBe6YU,4964 +PyAutoGUI-0.9.44.dist-info/RECORD,, +PyAutoGUI-0.9.44.dist-info/WHEEL,sha256=JtBte-IW7C3UcYx3ZpZORq-KtnjVj4xdM4AJCTZPivc,98 +PyAutoGUI-0.9.44.dist-info/top_level.txt,sha256=YztmWux-iPoF3Dv9x530vZvae0kMBsGbPAoKgWRGAvk,10 +pyautogui/__init__.py,sha256=RlRUdaTYdsfwwLXCANjBSCJGZhssrguuUoSJQ9g7auI,45305 +pyautogui/__main__.py,sha256=P8Ny3OScHrutsXUz-UsqKamaFihW-Yuq0YzKHkRGADI,58 +pyautogui/__pycache__/__init__.cpython-37.pyc,, +pyautogui/__pycache__/__main__.cpython-37.pyc,, +pyautogui/__pycache__/_pyautogui_java.cpython-37.pyc,, +pyautogui/__pycache__/_pyautogui_osx.cpython-37.pyc,, +pyautogui/__pycache__/_pyautogui_win.cpython-37.pyc,, +pyautogui/__pycache__/_pyautogui_x11.cpython-37.pyc,, +pyautogui/__pycache__/_window_win.cpython-37.pyc,, +pyautogui/__pycache__/screenshotUtil.cpython-37.pyc,, +pyautogui/__pycache__/test1.cpython-37.pyc,, +pyautogui/__pycache__/tweens.cpython-37.pyc,, +pyautogui/_pyautogui_java.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pyautogui/_pyautogui_osx.py,sha256=LwG6oFs9-MUxxga7Pj15B2UcGFxBJieuoH6yx5jHnSo,15647 +pyautogui/_pyautogui_win.py,sha256=qAwFfQk5G1kF8EI5wWa5MVewYuCMZQQnnM-xPCbtQhk,21294 +pyautogui/_pyautogui_x11.py,sha256=_g7VOXO6HjFvrhEr9bt2R1o1un3s-VzOmTkkPqTvCoE,15634 +pyautogui/_window_win.py,sha256=ReLnzdOoS-hlsTWkD2dQ-qyU_yuOEplJYHcZNtZxA04,3902 +pyautogui/screenshotUtil.py,sha256=S6pwcQZV7wMPvplAsp_pkcENcjIQdXqLqxBP926Z-OA,8363 +pyautogui/test1.py,sha256=hNr3BL5Dv2JSZNzXd_h-NkixMWbrm3EPB10MnB3-iUA,106 +pyautogui/tweens.py,sha256=NqjZcusP6jcxfQxa3zsMVft5PZrpouxlpDhOy_kd8s8,1440 diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/WHEEL b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/WHEEL new file mode 100644 index 00000000..03075056 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: cp37-none-any + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/top_level.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/top_level.txt new file mode 100644 index 00000000..1f21f990 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyAutoGUI-0.9.44.dist-info/top_level.txt @@ -0,0 +1 @@ +pyautogui diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/INSTALLER b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/METADATA b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/METADATA new file mode 100644 index 00000000..ab3153ef --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/METADATA @@ -0,0 +1,99 @@ +Metadata-Version: 2.1 +Name: PyGetWindow +Version: 0.0.5 +Summary: A simple, cross-platform module for obtaining GUI information on application's windows. +Home-page: https://github.com/asweigart/pygetwindow +Author: Al Sweigart +Author-email: al@inventwithpython.com +License: BSD +Keywords: gui window geometry resize minimize maximize close title +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Win32 (MS Windows) +Classifier: Environment :: X11 Applications +Classifier: Environment :: MacOS X +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Description-Content-Type: text/markdown +Requires-Dist: pyrect + +PyGetWindow +=========== + +A simple, cross-platform module for obtaining GUI information on and controlling application's windows. + + +Still under development. Currently only the Windows platform is implemented. If you want to help contribute, please contact al@inventwithpython.com! + + +Install +------- + + pip install pygetwindow + + +Examples +-------- + +(For this example, I'm using Winodws and opened the Notepad application, which has a title of "Untitled - Notepad". Most of the effects of these functions can't be seen in text.) + +PyGetWindow has functions for obtaining ``Window`` objects from a place on the screen, from the window title, or just getting all windows. (``hWnd`` is specific to the Windows platform.) + + >>> import pygetwindow as gw + >>> gw.getAllTitles() + ('', 'C:\\WINDOWS\\system32\\cmd.exe - pipenv shell - python', 'C:\\github\\PyGetWindow\\README.md • - Sublime Text', "asweigart/PyGetWindow: A simple, cross-platform module for obtaining GUI information on application's windows. - Google Chrome", 'Untitled - Notepad', 'C:\\Users\\Al\\Desktop\\xlibkey.py • - Sublime Text', 'https://tronche.com/gui/x/xlib/ - Google Chrome', 'Xlib Programming Manual: XGetWindowAttributes - Google Chrome', 'Generic Ubuntu Box [Running] - Oracle VM VirtualBox', 'Oracle VM VirtualBox Manager', 'Microsoft Edge', 'Microsoft Edge', 'Microsoft Edge', '', 'Microsoft Edge', 'Settings', 'Settings', 'Microsoft Store', 'Microsoft Store', '', '', 'Backup and Sync', 'Google Hangouts - asweigart@gmail.com', 'Downloads', '', '', 'Program Manager') + >>> gw.getAllWindows() + (Win32Window(hWnd=131318), Win32Window(hWnd=1050492), Win32Window(hWnd=67206), Win32Window(hWnd=66754), Win32Window(hWnd=264354), Win32Window(hWnd=329210), Win32Window(hWnd=1114374), Win32Window(hWnd=852550), Win32Window(hWnd=328358), Win32Window(hWnd=66998), Win32Window(hWnd=132508), Win32Window(hWnd=66964), Win32Window(hWnd=66882), Win32Window(hWnd=197282), Win32Window(hWnd=393880), Win32Window(hWnd=66810), Win32Window(hWnd=328466), Win32Window(hWnd=132332), Win32Window(hWnd=262904), Win32Window(hWnd=65962), Win32Window(hWnd=65956), Win32Window(hWnd=197522), Win32Window(hWnd=131944), Win32Window(hWnd=329334), Win32Window(hWnd=395034), Win32Window(hWnd=132928), Win32Window(hWnd=65882)) + >>> gw.getWindowsWithTitle('Untitled') + (Win32Window(hWnd=264354),) + >>> gw.getFocusedWindow() + Win32Window(hWnd=1050492) + >>> gw.getFocusedWindow().title + 'C:\\WINDOWS\\system32\\cmd.exe - pipenv shell - python' + >>> gw.getWindowsAt(10, 10) + (Win32Window(hWnd=67206), Win32Window(hWnd=66754), Win32Window(hWnd=329210), Win32Window(hWnd=1114374), Win32Window(hWnd=852550), Win32Window(hWnd=132508), Win32Window(hWnd=66964), Win32Window(hWnd=66882), Win32Window(hWnd=197282), Win32Window(hWnd=393880), Win32Window(hWnd=66810), Win32Window(hWnd=328466), Win32Window(hWnd=395034), Win32Window(hWnd=132928), Win32Window(hWnd=65882)) + + +``Window`` objects can be minimized/maximized/restored/focused/resized/moved/closed and also have attributes for their current position, size, and state. + + >>> notepadWindow = gw.getWindowsWithTitle('Untitled')[0] + >>> notepadWindow.isMaximized + False + >>> notepadWindow.maximize() + >>> notepadWindow.isMaximized + True + >>> notepadWindow.restore() + >>> notepadWindow.minimize() + >>> notepadWindow.restore() + >>> notepadWindow.focus() + >>> notepadWindow.resize(10, 10) # increase by 10, 10 + >>> notepadWindow.resizeTo(100, 100) # set size to 100x100 + >>> notepadWindow.move(10, 10) # move 10 pixels right and 10 down + >>> notepadWindow.moveTo(10, 10) # move window to 10, 10 + >>> notepadWindow.size + (132, 100) + >>> notepadWindow.width + 132 + >>> notepadWindow.height + 100 + >>> notepadWindow.topleft + (10, 10) + >>> notepadWindow.top + 10 + >>> notepadWindow.left + 10 + >>> notepadWindow.bottomright + (142, 110) + >>> notepadWindow.close() + >>> + + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/RECORD b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/RECORD new file mode 100644 index 00000000..4e2f90aa --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/RECORD @@ -0,0 +1,13 @@ +PyGetWindow-0.0.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyGetWindow-0.0.5.dist-info/METADATA,sha256=70cWMr8QUNChH2OwlIYwRKwGkMhXsrNwQh3FWK3PciY,5094 +PyGetWindow-0.0.5.dist-info/RECORD,, +PyGetWindow-0.0.5.dist-info/WHEEL,sha256=JtBte-IW7C3UcYx3ZpZORq-KtnjVj4xdM4AJCTZPivc,98 +PyGetWindow-0.0.5.dist-info/top_level.txt,sha256=WxTIgZWkYIMB1QQE7SO_vCL5q-sSKu5Fv0rJ0U7pWZk,12 +pygetwindow/__init__.py,sha256=Oaj5OilD9O6OP0BoAfivUdBOvkmPKFXAZ5vyIvlhw3I,1730 +pygetwindow/__pycache__/__init__.cpython-37.pyc,, +pygetwindow/__pycache__/_pygetwindow_macos.cpython-37.pyc,, +pygetwindow/__pycache__/_pygetwindow_win.cpython-37.pyc,, +pygetwindow/__pycache__/foo.cpython-37.pyc,, +pygetwindow/_pygetwindow_macos.py,sha256=P_JfzLkZNzDtOvpjdFLwngS_YWlWqZd0clpLyTH32OE,12976 +pygetwindow/_pygetwindow_win.py,sha256=evD-OUlMQTUb6S96--LlzvGnHaZSNUBeAT8R6F4u7IM,17937 +pygetwindow/foo.py,sha256=sYZ4q36T_IhSQrPKUdfW-kXMcJ_j4yHkxi9S2fRvpvU,8 diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/WHEEL b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/WHEEL new file mode 100644 index 00000000..03075056 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: cp37-none-any + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/top_level.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/top_level.txt new file mode 100644 index 00000000..392e30fc --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyGetWindow-0.0.5.dist-info/top_level.txt @@ -0,0 +1 @@ +pygetwindow diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/INSTALLER b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/METADATA b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/METADATA new file mode 100644 index 00000000..8c3e8bc6 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/METADATA @@ -0,0 +1,31 @@ +Metadata-Version: 2.1 +Name: PyMsgBox +Version: 1.0.6 +Summary: A simple, cross-platform, pure Python module for JavaScript-like message boxes. +Home-page: https://github.com/asweigart/PyMsgBox +Author: Al Sweigart +Author-email: al@inventwithpython.com +License: BSD +Keywords: gui msgbox message box dialog confirmation confirm password alert +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Win32 (MS Windows) +Classifier: Environment :: X11 Applications +Classifier: Environment :: MacOS X +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.5 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.1 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 + +UNKNOWN + + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/RECORD b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/RECORD new file mode 100644 index 00000000..da90935c --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/RECORD @@ -0,0 +1,17 @@ +PyMsgBox-1.0.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyMsgBox-1.0.6.dist-info/METADATA,sha256=ecN1wrniIim5bOm7r8WTwWhjn_LFHwfK6HFjJHJgYDU,1178 +PyMsgBox-1.0.6.dist-info/RECORD,, +PyMsgBox-1.0.6.dist-info/WHEEL,sha256=JtBte-IW7C3UcYx3ZpZORq-KtnjVj4xdM4AJCTZPivc,98 +PyMsgBox-1.0.6.dist-info/top_level.txt,sha256=VhumxHbRDo-rZSH_txL41DQO4DCaSDI0lz2AIhwUHbk,9 +pymsgbox/__init__.py,sha256=o_NGGc3p9hn3glO7X1QWq3ZUWZgLR_C8BUZa4aS40M0,13415 +pymsgbox/__pycache__/__init__.cpython-37.pyc,, +pymsgbox/__pycache__/_native_java.cpython-37.pyc,, +pymsgbox/__pycache__/_native_osx.cpython-37.pyc,, +pymsgbox/__pycache__/_native_win.cpython-37.pyc,, +pymsgbox/__pycache__/_native_x11.cpython-37.pyc,, +pymsgbox/__pycache__/native.cpython-37.pyc,, +pymsgbox/_native_java.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pymsgbox/_native_osx.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pymsgbox/_native_win.py,sha256=sbuilTAPOvGpn8wIklnxWzGuVbEfQeMKRqowyUVn5Ss,1982 +pymsgbox/_native_x11.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +pymsgbox/native.py,sha256=QfDD2vsE9pW2MkHhAnLtg6yW62VL2iwXRCREmDCJ56Q,862 diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/WHEEL b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/WHEEL new file mode 100644 index 00000000..03075056 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: cp37-none-any + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/top_level.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/top_level.txt new file mode 100644 index 00000000..97c034c3 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyMsgBox-1.0.6.dist-info/top_level.txt @@ -0,0 +1 @@ +pymsgbox diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/INSTALLER b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/METADATA b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/METADATA new file mode 100644 index 00000000..705dd594 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/METADATA @@ -0,0 +1,127 @@ +Metadata-Version: 2.1 +Name: PyRect +Version: 0.1.4 +Summary: PyRect is a simple module with a Rect class for Pygame-like rectangular areas. +Home-page: https://github.com/asweigart/pyrect +Author: Al Sweigart +Author-email: al@inventwithpython.com +License: BSD +Keywords: pygame rect rectangular rectangle area +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Win32 (MS Windows) +Classifier: Environment :: MacOS X +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.5 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.1 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 + +====== +PyRect +====== +PyRect is a simple module with a Rect class for Pygame-like rectangular areas. + +This module is like a stand-alone version of Pygame's Rect class. It is similar to the Rect module by Simon Wittber, but compatible with both Python 2 and 3. + +Currently under development, though the basic features work. + +Installation +============ + + ``pip install rect`` + +Quickstart Guide +================ + +First, create a Rect object by providing the XY coordinates of its top-left corner, and then the width and height: + + >>> import pyrect + >>> r = pyrect.Rect(0, 0, 10, 20) + +There are several attributes that are automatically calculated (they have the same names as Pygame's Rect objects): + + >>> r.width, r.height, r.size + (10, 20, (10, 20)) + >>> r. left + 0 + >>> r.right + 10 + >>> r.top + 0 + >>> r.bottom + 20 + >>> r.center + (5, 10) + >>> r.topleft + (0, 0) + >>> r.topright + (10, 0) + >>> r.midleft + (0, 10) + +Changing these attributes re-calculates the others. The top-left corner is anchored for any growing or shrinking that takes place. + + >>> r.topleft + (0, 0) + >>> r.left = 100 + >>> r.topleft + (100, 0) + >>> r.topright + (110, 0) + >>> r.width = 30 + >>> r.topright + (130, 0) + +Rect objects are locked to integers, unless you set `enableFloat` to `True`: + + >>> r = pyrect.Rect(0, 0, 10, 20) + >>> r.width = 10.5 + >>> r.width + 10 + >>> r.enableFloat = True + >>> r.width = 10.5 + >>> r.width + 10.5 + >>> r2 = pyrect.Rect(0, 0, 10.5, 20.5, enableFloat=True) + >>> r2.size + (10.5, 20.5) + +Rect Attributes +=============== + +Rect objects have several attributes that can be read or modified. They are identical to Pygame's Rect objects: + + ``x, y`` + + ``top, left, bottom, right`` + + ``topleft, bottomleft, topright, bottomright`` + + ``midtop, midleft, midbottom, midright`` + + ``center, centerx, centery`` + + ``size, width, height`` + + ``w, h`` + +There are a couple other attributes as well: + + ``box (a tuple (left, top, width, height))`` + + ``area (read-only)`` + + + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/RECORD b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/RECORD new file mode 100644 index 00000000..7197390d --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/RECORD @@ -0,0 +1,7 @@ +PyRect-0.1.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyRect-0.1.4.dist-info/METADATA,sha256=qviGiMu-arb3aBayzBqGbFt3OUPfnLnWtLgWbr6IP3k,3325 +PyRect-0.1.4.dist-info/RECORD,, +PyRect-0.1.4.dist-info/WHEEL,sha256=05Ahrak1u2K61DpLp9CDNSbUImLTITCMom_cqTFk6pE,116 +PyRect-0.1.4.dist-info/top_level.txt,sha256=zRKhS2KGlJmow_PYupJ21SKCmAyorrFofAC7QGsXt5g,7 +pyrect/__init__.py,sha256=pRHUn6NZRI8NJtM7J5vjuBN3RpfnQcp7547xybl17mI,47934 +pyrect/__pycache__/__init__.cpython-37.pyc,, diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/WHEEL b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/WHEEL new file mode 100644 index 00000000..c8240f03 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/top_level.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/top_level.txt new file mode 100644 index 00000000..f2b11004 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyRect-0.1.4.dist-info/top_level.txt @@ -0,0 +1 @@ +pyrect diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/INSTALLER b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/LICENSE.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/LICENSE.txt new file mode 100644 index 00000000..c6cc9a94 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2014, Al Sweigart +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of PyScreeze nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/METADATA b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/METADATA new file mode 100644 index 00000000..c3a7711e --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/METADATA @@ -0,0 +1,156 @@ +Metadata-Version: 2.1 +Name: PyScreeze +Version: 0.1.21 +Summary: A simple, cross-platform screenshot module for Python 2 and 3. +Home-page: https://github.com/asweigart/pyscreeze +Author: Al Sweigart +Author-email: al@inventwithpython.com +License: BSD +Keywords: screenshot screen screencap capture scrot screencapture image +Platform: UNKNOWN +Classifier: Development Status :: 3 - Alpha +Classifier: Environment :: Win32 (MS Windows) +Classifier: Environment :: X11 Applications +Classifier: Environment :: MacOS X +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.5 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.1 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Requires-Dist: Pillow + +PyScreeze +========= + +PyScreeze is a simple, cross-platform screenshot module for Python 2 and 3. + +About +----- + +PyScreeze can take screenshots, save them to files, and locate images within the screen. This is useful if you have a small image of, say, a button that needs to be clicked and want to locate it on the screen. + +Screenshot functionality requires the Pillow module. OS X uses the `screencapture` command, which comes with the operating system. Linux uses the `scrot` command, which can be installed by running `sudo apt-get install scrot`. + +Special Notes About Ubuntu +========================== + +Unfortunately, Ubuntu seems to have several deficiencies with installing Pillow. PNG and JPEG support are not included with Pillow out of the box on Ubuntu. The following links have more information + +The screenshot() Function +========================= + +Calling `screenshot()` will return an Image object (see the Pillow or PIL module documentation for details). Passing a string of a filename will save the screenshot to a file as well as return it as an Image object. + + >>> import pyscreeze + >>> im1 = pyscreeze.screenshot() + >>> im2 = pyscreeze.screenshot('my_screenshot.png') + +On a 1920 x 1080 screen, the `screenshot()` function takes roughly 100 milliseconds - it's not fast but it's not slow. + +There is also an optional `region` keyword argument, if you do not want a screenshot of the entire screen. You can pass a four-integer tuple of the left, top, width, and height of the region to capture: + + >>> import pyscreeze + >>> im = pyscreeze.screenshot(region=(0,0, 300, 400)) + +The Locate Functions +==================== + +You can visually locate something on the screen if you have an image file of it. You can call the `locateOnScreen('calc7key.png')` function to get the screen coordinates of the 7 button for a calculator app. The return value is a 4-integer tuple: (left, top, width, height). This tuple can be passed to `center()` to get the X and Y coordinates at the center of this region. If the image can't be found on the screen, `locateOnScreen()` returns `None`. + + >>> import pyscreeze + >>> button7location = pyscreeze.locateOnScreen('calc7key.png') + >>> button7location + (1416, 562, 50, 41) + >>> button7x, button7y = pyscreeze.center(button7location) + >>> button7x, button7y + (1441, 582) + >>> pyscreeze.click(button7x, button7y) # clicks the center of where the 7 button was found + +The `locateCenterOnScreen()` function is probably the one you want to use most often: + + >>> import pyscreeze + >>> x, y = pyscreeze.locateCenterOnScreen('calc7key.png') + >>> pyscreeze.click(x, y) + +On a 1920 x 1080 screen, the locate function calls take about 1 or 2 seconds. This may be too slow for action video games, but works for most purposes and applications. + +If speed is important, install the optional opencv library (`pip install cv2`). The `locateAll` computation will use it if available, and take less than 1 millisecond to find all matches in a full-screen search. (This does not include the time required to capture a screenshot.) + +There are several "locate" functions. They all start looking at the top-left corner of the screen (or image) and look to the left and then down. The arguments can either be a + +- `locateOnScreen(image, grayscale=False)` - Returns (left, top, width, height) coordinate of first found instance of the `image` on the screen. Returns None if not found on the screen. + +- `locateCenterOnScreen(image, grayscale=False)` - Returns (x, y) coordinates of the center of the first found instance of the `image` on the screen. Returns None if not found on the screen. + +- `locateAllOnScreen(image, grayscale=False)` - Returns a generator that yields (left, top, width, height) tuples for where the image is found on the screen. + +- `locate(needleImage, haystackImage, grayscale=False)` - Returns (left, top, width, height) coordinate of first found instance of `needleImage` in `haystackImage`. Returns None if not found on the screen. + +- `locateAll(needleImage, haystackImage, grayscale=False)` - Returns a generator that yields (left, top, width, height) tuples for where `needleImage` is found in `haystackImage`. + +The "locate all" functions can be used in for loops or passed to `list()`: + + >>> import pyscreeze + >>> for pos in pyscreeze.locateAllOnScreen('someButton.png') + ... print(pos) + ... + (1101, 252, 50, 50) + (59, 481, 50, 50) + (1395, 640, 50, 50) + (1838, 676, 50, 50) + >>> list(pyscreeze.locateAllOnScreen('someButton.png')) + [(1101, 252, 50, 50), (59, 481, 50, 50), (1395, 640, 50, 50), (1838, 676, 50, 50)] + +Grayscale Matching +------------------ + +Optionally, you can pass `grayscale=True` to the locate functions to give a slight speedup (about 30%-ish). This desaturates the color from the images and screenshots, speeding up the locating but potentially causing false-positive matches. + + >>> import pyscreeze + >>> button7location = pyscreeze.locateOnScreen('calc7key.png', grayscale=True) + >>> button7location + (1416, 562, 50, 41) + +Pixel Matching +-------------- + +To obtain the RGB color of a pixel in a screenshot, use the Image object's `getpixel()` method: + + >>> import pyscreeze + >>> im = pyscreeze.screenshot() + >>> im.getpixel((100, 200)) + (130, 135, 144) + +Or as a single function, call the `pixel()` PyScreeze function, which is a wrapper for the previous calls: + + >>> import pyscreeze + >>> pyscreeze.pixel(100, 200) + (130, 135, 144) + +If you just need to verify that a single pixel matches a given pixel, call the `pixelMatchesColor()` function, passing it the X coordinate, Y coordinate, and RGB tuple of the color it represents: + + >>> import pyscreeze + >>> pyscreeze.pixelMatchesColor(100, 200, (130, 135, 144)) + True + >>> pyscreeze.pixelMatchesColor(100, 200, (0, 0, 0)) + False + +The optional `tolerance` keyword argument specifies how much each of the red, green, and blue values can vary while still matching: + + >>> import pyscreeze + >>> pyscreeze.pixelMatchesColor(100, 200, (130, 135, 144)) + True + >>> pyscreeze.pixelMatchesColor(100, 200, (140, 125, 134)) + False + >>> pyscreeze.pixelMatchesColor(100, 200, (140, 125, 134), tolerance=10) + True + + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/RECORD b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/RECORD new file mode 100644 index 00000000..c3293d8d --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/RECORD @@ -0,0 +1,8 @@ +PyScreeze-0.1.21.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyScreeze-0.1.21.dist-info/LICENSE.txt,sha256=XcpFE3U9k1S0c5N8Taxr3a_LXnlT4mpnKf4eJu7EUXc,1505 +PyScreeze-0.1.21.dist-info/METADATA,sha256=wVTgkGZEKE6RHotcA5XYTXeIjzJy6mdY4o7DDVPqxFc,7418 +PyScreeze-0.1.21.dist-info/RECORD,, +PyScreeze-0.1.21.dist-info/WHEEL,sha256=JtBte-IW7C3UcYx3ZpZORq-KtnjVj4xdM4AJCTZPivc,98 +PyScreeze-0.1.21.dist-info/top_level.txt,sha256=ExHe4LVkQVDYcMxwsJMTH01lHyk4GLzRxiPv4hGDRjA,10 +pyscreeze/__init__.py,sha256=s418376u9o_LTVgNb8awm8LyqWkGS7qkOufkS8N6Vic,20522 +pyscreeze/__pycache__/__init__.cpython-37.pyc,, diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/WHEEL b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/WHEEL new file mode 100644 index 00000000..03075056 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: cp37-none-any + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/top_level.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/top_level.txt new file mode 100644 index 00000000..db860da3 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyScreeze-0.1.21.dist-info/top_level.txt @@ -0,0 +1 @@ +pyscreeze diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/INSTALLER b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/METADATA b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/METADATA new file mode 100644 index 00000000..e49be4d2 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/METADATA @@ -0,0 +1,26 @@ +Metadata-Version: 2.1 +Name: PyTweening +Version: 1.0.3 +Summary: A collection of tweening / easing functions. +Home-page: https://github.com/asweigart/pytweening +Author: Al Sweigart +Author-email: al@inventwithpython.com +License: BSD +Keywords: 2D animation tween tweening easing +Platform: UNKNOWN +Classifier: Development Status :: 3 - Alpha +Classifier: Environment :: Win32 (MS Windows) +Classifier: Environment :: X11 Applications +Classifier: Environment :: MacOS X +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 + +UNKNOWN + + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/RECORD b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/RECORD new file mode 100644 index 00000000..930c40d9 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/RECORD @@ -0,0 +1,7 @@ +PyTweening-1.0.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +PyTweening-1.0.3.dist-info/METADATA,sha256=j2Mc5ESJwRYqGY5D_NbLOJiDsiVZ9RwSryRGKORkv1M,854 +PyTweening-1.0.3.dist-info/RECORD,, +PyTweening-1.0.3.dist-info/WHEEL,sha256=JtBte-IW7C3UcYx3ZpZORq-KtnjVj4xdM4AJCTZPivc,98 +PyTweening-1.0.3.dist-info/top_level.txt,sha256=R8O2tKT6wD9sQ2kol4zYmcnqUOfgA9MMsswf3T9zRIo,11 +pytweening/__init__.py,sha256=IykpXFitgL3pv36qy-rFa8OQwhy5A-QK_FF1JCMPLTs,16939 +pytweening/__pycache__/__init__.cpython-37.pyc,, diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/WHEEL b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/WHEEL new file mode 100644 index 00000000..03075056 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.1) +Root-Is-Purelib: true +Tag: cp37-none-any + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/top_level.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/top_level.txt new file mode 100644 index 00000000..34400c8b --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/PyTweening-1.0.3.dist-info/top_level.txt @@ -0,0 +1 @@ +pytweening diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/__init__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/__init__.py new file mode 100644 index 00000000..c972d511 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/__init__.py @@ -0,0 +1,1156 @@ +# PyAutoGUI: Cross-platform GUI automation for human beings. +# BSD license +# Al Sweigart al@inventwithpython.com (Send me feedback & suggestions!) + +""" +IMPORTANT NOTE! + +To use this module on Mac OS X, you need the PyObjC module installed. +For Python 3, run: + sudo pip3 install pyobjc-core + sudo pip3 install pyobjc +For Python 2, run: + sudo pip install pyobjc-core + sudo pip install pyobjc +(There's some bug with their installer, so install pyobjc-core first or else +the install takes forever.) + +To use this module on Linux, you need Xlib module installed. +For Python 3, run: + sudo pip3 install python3-Xlib +For Python 2, run: + sudo pip install Xlib + +To use this module on Windows, you do not need anything else. + +You will need PIL/Pillow to use the screenshot features. +""" + + +from __future__ import absolute_import, division, print_function + + +__version__ = '0.9.44' + +import sys +import time + + +if sys.version_info[0] == 2 or sys.version_info[0:2] in ((3, 1), (3,2)): + # Python 2 and 3.1 and 3.2 uses collections.Sequence + import collections + collectionsSequence = collections.Sequence +else: + # Python 3.3+ uses collections.abc.Sequence + import collections.abc + collectionsSequence = collections.abc.Sequence + + +try: + import pytweening + from pytweening import (easeInQuad, easeOutQuad, easeInOutQuad, + easeInCubic, easeOutCubic, easeInOutCubic, easeInQuart, easeOutQuart, + easeInOutQuart, easeInQuint, easeOutQuint, easeInOutQuint, easeInSine, + easeOutSine, easeInOutSine, easeInExpo, easeOutExpo, easeInOutExpo, + easeInCirc, easeOutCirc, easeInOutCirc, easeInElastic, easeOutElastic, + easeInOutElastic, easeInBack, easeOutBack, easeInOutBack, easeInBounce, + easeOutBounce, easeInOutBounce) + # getLine is not needed. + # getPointOnLine has been redefined in this file, to avoid dependency on pytweening. + # linear has also been redefined in this file. +except ImportError: + def couldNotImportPyTweening(): + raise Exception('PyAutoGUI was unable to import pytweening. Please install this module.') + easeInQuad = easeOutQuad = easeInOutQuad = \ + easeInCubic = easeOutCubic = easeInOutCubic = easeInQuart = easeOutQuart = \ + easeInOutQuart = easeInQuint = easeOutQuint = easeInOutQuint = easeInSine = \ + easeOutSine = easeInOutSine = easeInExpo = easeOutExpo = easeInOutExpo = \ + easeInCirc = easeOutCirc = easeInOutCirc = easeInElastic = easeOutElastic = \ + easeInOutElastic = easeInBack = easeOutBack = easeInOutBack = easeInBounce = \ + easeOutBounce = easeInOutBounce = couldNotImportPyTweening + + +try: + import pymsgbox + from pymsgbox import alert, confirm, prompt, password +except ImportError: + # If pymsgbox module is not found, those methods will not be available. + def couldNotImportPyMsgBox(): + raise Exception('PyAutoGUI was unable to import pymsgbox. Please install this module.') + alert = confirm = prompt = password = couldNotImportPyMsgBox + + +try: + import pyscreeze + from pyscreeze import (center, grab, locate, locateAll, locateAllOnScreen, + locateCenterOnScreen, locateOnScreen, pixel, pixelMatchesColor, + screenshot) +except ImportError: + # If pyscreeze module is not found, screenshot-related features will simply not work. + def couldNotImportPyScreeze(): + raise Exception('PyAutoGUI was unable to import pyscreeze. Please install this module.') + center = grab = locate = locateAll = locateAllOnScreen = locateCenterOnScreen = locateOnScreen = pixel = pixelMatchesColor = screenshot = couldNotImportPyScreeze + + +def useImageNotFoundException(value=None): + if value is None: + value = True + pyscreeze.USE_IMAGE_NOT_FOUND_EXCEPTION = value + + + +if sys.platform == 'win32': # PyGetWindow currently only supports Windows. + try: + import pygetwindow + from pygetwindow import Window, getActiveWindow, getWindowsAt, getWindowsWithTitle, getAllWindows, getAllTitles + except ImportError: + # If pygetwindow module is not found, those methods will not be available. + def couldNotImportPyGetWindow(): + raise Exception('PyAutoGUI was unable to import pygetwindow. Please install this module.') + Window = getActiveWindow = getWindowsAt = getWindowsWithTitle = getAllWindows = getAllTitles = couldNotImportPyGetWindow + + +KEY_NAMES = ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', + ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', + 'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', + 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', + 'browserback', 'browserfavorites', 'browserforward', 'browserhome', + 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', + 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', + 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', + 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', + 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', + 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', + 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', + 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', + 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', + 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', + 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', + 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', + 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', + 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', + 'command', 'option', 'optionleft', 'optionright'] +KEYBOARD_KEYS = KEY_NAMES # keeping old KEYBOARD_KEYS for backwards compatibility + + +def isShiftCharacter(character): + """Returns True if the key character is uppercase or shifted.""" + return character.isupper() or character in '~!@#$%^&*()_+{}|:"<>?' + + +# The platformModule is where we reference the platform-specific functions. +if sys.platform.startswith('java'): + #from . import _pyautogui_java as platformModule + raise NotImplementedError('Jython is not yet supported by PyAutoGUI.') +elif sys.platform == 'darwin': + from . import _pyautogui_osx as platformModule +elif sys.platform == 'win32': + from . import _pyautogui_win as platformModule +else: + from . import _pyautogui_x11 as platformModule + + +# TODO: Having module-wide user-writable global variables is bad. It makes +# restructuring the code very difficult. For instance, what if we decide to +# move the mouse-related functions to a separate file (a submodule)? How that +# file will access this module vars? It will probably lead to a circular +# import. + +# In seconds. Any duration less than this is rounded to 0.0 to instantly move +# the mouse. +MINIMUM_DURATION = 0.1 +# If sleep_amount is less than MINIMUM_DURATION, time.sleep() will be a no-op and the mouse cursor moves there instantly. +# TODO: This value should vary with the platform. http://stackoverflow.com/q/1133857 +MINIMUM_SLEEP = 0.05 +PAUSE = 0.1 # The number of seconds to pause after EVERY public function call. Useful for debugging. +FAILSAFE = True +FAILSAFE_POINT = (0, 0) # If the mouse is here and FAILSAFE is True, the FailSafeException is raised. + + +Point = collections.namedtuple('Point', 'x y') +Size = collections.namedtuple('Size', 'width height') + + +# General Functions +# ================= + +def getPointOnLine(x1, y1, x2, y2, n): + """Returns the (x, y) tuple of the point that has progressed a proportion + n along the line defined by the two x, y coordinates. + + Copied from pytweening module. + """ + x = ((x2 - x1) * n) + x1 + y = ((y2 - y1) * n) + y1 + return (x, y) + + +def linear(n): + """Trivial linear tweening function. + + Copied from pytweening module. + """ + + # We use this function instead of pytweening.linear for the default tween function just in case pytweening couldn't be imported. + if not 0.0 <= n <= 1.0: + raise ValueError('Argument must be between 0.0 and 1.0.') + return n + + +def _autoPause(pause, _pause): + if _pause: + if pause is not None: + time.sleep(pause) + elif PAUSE != 0: + time.sleep(PAUSE) + + +def _unpackXY(x, y): + """If x is a sequence and y is None, returns x[0], y[0]. Else, returns x, y. + + On functions that receive a pair of x,y coordinates, they can be passed as + separate arguments, or as a single two-element sequence. + """ + if isinstance(x, str): + # x parameter is the string of an image filename to find and click on: + x, y = center(locateOnScreen(x)) + + elif isinstance(x, collectionsSequence): + if len(x) == 2: + # x is a two-integer tuple: (x, y) + if y is None: + x, y = x + else: + raise ValueError('When passing a sequence as the x argument, the y argument must not be passed (received {0}).'.format(repr(y))) + elif len(x) == 4: + # x is a four-integer tuple: (left, top, width, height) + if y is None: + x, y = center(x) + else: + raise ValueError('When passing a sequence as the x argument, the y argument must not be passed (received {0}).'.format(repr(y))) + else: + raise ValueError('The supplied sequence must have exactly 2 or exactly 4 elements ({0} were received).'.format(len(x))) + else: + pass # x and y are just number values + + return x, y + + +def position(x=None, y=None): + """Returns the current xy coordinates of the mouse cursor as a two-integer + tuple. + + Args: + x (int, None, optional) - If not None, this argument overrides the x in + the return value. + y (int, None, optional) - If not None, this argument overrides the y in + the return value. + + Returns: + (x, y) tuple of the current xy coordinates of the mouse cursor. + """ + posx, posy = platformModule._position() + posx = int(posx) + posy = int(posy) + if x is not None: # If set, the x parameter overrides the return value. + posx = int(x) + if y is not None: # If set, the y parameter overrides the return value. + posy = int(y) + return Point(posx, posy) + + +def size(): + """Returns the width and height of the screen as a two-integer tuple. + + Returns: + (width, height) tuple of the screen size, in pixels. + """ + return Size(*platformModule._size()) + + +def onScreen(x, y=None): + """Returns whether the given xy coordinates are on the screen or not. + + Args: + Either the arguments are two separate values, first arg for x and second + for y, or there is a single argument of a sequence with two values, the + first x and the second y. + Example: onScreen(x, y) or onScreen([x, y]) + + Returns: + bool: True if the xy coordinates are on the screen at its current + resolution, otherwise False. + """ + x, y = _unpackXY(x, y) + x = int(x) + y = int(y) + + width, height = platformModule._size() + return 0 <= x < width and 0 <= y < height + + +# Mouse Functions +# =============== + +def mouseDown(x=None, y=None, button='left', duration=0.0, tween=linear, pause=None, _pause=True): + """Performs pressing a mouse button down (but not up). + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): The x position on the screen where the + mouse down happens. None by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): The y position on the screen where the + mouse down happens. None by default. + button (str, int, optional): The mouse button pressed down. Must be one of + 'left', 'middle', 'right' (or 1, 2, or 3) respectively. 'left' by + default. + + Returns: + None + + Raises: + ValueError: If button is not one of 'left', 'middle', 'right', 1, 2, or 3 + """ + if button not in ('left', 'middle', 'right', 1, 2, 3): + raise ValueError("button argument must be one of ('left', 'middle', 'right', 1, 2, 3), not %s" % button) + + _failSafeCheck() + x, y = _unpackXY(x, y) + + _mouseMoveDrag('move', x, y, 0, 0, duration=0, tween=None) + + x, y = platformModule._position() # TODO - this isn't right. We need to check the params. + if button == 1 or str(button).lower() == 'left': + platformModule._mouseDown(x, y, 'left') + elif button == 2 or str(button).lower() == 'middle': + platformModule._mouseDown(x, y, 'middle') + elif button == 3 or str(button).lower() == 'right': + platformModule._mouseDown(x, y, 'right') + + _autoPause(pause, _pause) + + +def mouseUp(x=None, y=None, button='left', duration=0.0, tween=linear, pause=None, _pause=True): + """Performs releasing a mouse button up (but not down beforehand). + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): The x position on the screen where the + mouse up happens. None by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): The y position on the screen where the + mouse up happens. None by default. + button (str, int, optional): The mouse button released. Must be one of + 'left', 'middle', 'right' (or 1, 2, or 3) respectively. 'left' by + default. + + Returns: + None + + Raises: + ValueError: If button is not one of 'left', 'middle', 'right', 1, 2, or 3 + """ + if button not in ('left', 'middle', 'right', 1, 2, 3): + raise ValueError("button argument must be one of ('left', 'middle', 'right', 1, 2, 3), not %s" % button) + + _failSafeCheck() + x, y = _unpackXY(x, y) + + _mouseMoveDrag('move', x, y, 0, 0, duration=0, tween=None) + + x, y = platformModule._position() + if button == 1 or str(button).lower() == 'left': + platformModule._mouseUp(x, y, 'left') + elif button == 2 or str(button).lower() == 'middle': + platformModule._mouseUp(x, y, 'middle') + elif button == 3 or str(button).lower() == 'right': + platformModule._mouseUp(x, y, 'right') + + _autoPause(pause, _pause) + +def click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0, tween=linear, pause=None, _pause=True): + """Performs pressing a mouse button down and then immediately releasing it. + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, str, optional): The x position on the screen where + the click happens. None by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + clicks (int, optional): The number of clicks to perform. 1 by default. + For example, passing 2 would do a doubleclick. + interval (float, optional): The number of seconds in between each click, + if the number of clicks is greater than 1. 0.0 by default, for no + pause in between clicks. + button (str, int, optional): The mouse button clicked. Must be one of + 'left', 'middle', 'right' (or 1, 2, or 3) respectively. 'left' by + default. + + Returns: + None + + Raises: + ValueError: If button is not one of 'left', 'middle', 'right', 1, 2, 3 + """ + if button not in ('left', 'middle', 'right', 1, 2, 3): + raise ValueError("button argument must be one of ('left', 'middle', 'right', 1, 2, 3)") + + _failSafeCheck() + x, y = _unpackXY(x, y) + + _mouseMoveDrag('move', x, y, 0, 0, duration, tween) + + x, y = platformModule._position() + for i in range(clicks): + _failSafeCheck() + if button == 1 or str(button).lower() == 'left': + platformModule._click(x, y, 'left') + elif button == 2 or str(button).lower() == 'middle': + platformModule._click(x, y, 'middle') + elif button == 3 or str(button).lower() == 'right': + platformModule._click(x, y, 'right') + else: + # These mouse buttons for hor. and vert. scrolling only apply to x11: + platformModule._click(x, y, button) + + time.sleep(interval) + + _autoPause(pause, _pause) + +def rightClick(x=None, y=None, duration=0.0, tween=linear, pause=None, _pause=True): + """Performs a right mouse button click. + + This is a wrapper function for click('right', x, y). + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): The x position on the screen where the + click happens. None by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + + Returns: + None + """ + _failSafeCheck() + + click(x, y, 1, 0.0, 'right', _pause=False) + + _autoPause(pause, _pause) + + +def middleClick(x=None, y=None, duration=0.0, tween=linear, pause=None, _pause=True): + """Performs a middle mouse button click. + + This is a wrapper function for click('right', x, y). + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): The x position on the screen where the + click happens. None by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + + Returns: + None + """ + _failSafeCheck() + + click(x, y, 1, 0.0, 'middle', _pause=False) + + _autoPause(pause, _pause) + + +def doubleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=linear, pause=None, _pause=True): + """Performs a double click. + + This is a wrapper function for click('left', x, y, 2, interval). + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): The x position on the screen where the + click happens. None by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + interval (float, optional): The number of seconds in between each click, + if the number of clicks is greater than 1. 0.0 by default, for no + pause in between clicks. + button (str, int, optional): The mouse button clicked. Must be one of + 'left', 'middle', 'right' (or 1, 2, or 3) respectively. 'left' by + default. + + Returns: + None + + Raises: + ValueError: If button is not one of 'left', 'middle', 'right', 1, 2, 3, 4, + 5, 6, or 7 + """ + _failSafeCheck() + + # Multiple clicks work different in OSX + if sys.platform == 'darwin': + x, y = _unpackXY(x, y) + _mouseMoveDrag('move', x, y, 0, 0, duration=0, tween=None) + x, y = platformModule._position() + platformModule._multiClick(x, y, button, 2) + else: + click(x, y, 2, interval, button, _pause=False) + + _autoPause(pause, _pause) + + +def tripleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=linear, pause=None, _pause=True): + """Performs a triple click.. + + This is a wrapper function for click('left', x, y, 3, interval). + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): The x position on the screen where the + click happens. None by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + interval (float, optional): The number of seconds in between each click, + if the number of clicks is greater than 1. 0.0 by default, for no + pause in between clicks. + button (str, int, optional): The mouse button clicked. Must be one of + 'left', 'middle', 'right' (or 1, 2, or 3) respectively. 'left' by + default. + + Returns: + None + + Raises: + ValueError: If button is not one of 'left', 'middle', 'right', 1, 2, 3, 4, + 5, 6, or 7 + """ + _failSafeCheck() + + # Multiple clicks work different in OSX + if sys.platform == 'darwin': + x, y = _unpackXY(x, y) + _mouseMoveDrag('move', x, y, 0, 0, duration=0, tween=None) + x, y = platformModule._position() + platformModule._multiClick(x, y, button, 3) + else: + click(x, y, 2, interval, button, _pause=False) + _autoPause(pause, _pause) + + +def scroll(clicks, x=None, y=None, pause=None, _pause=True): + """Performs a scroll of the mouse scroll wheel. + + Whether this is a vertical or horizontal scroll depends on the underlying + operating system. + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + clicks (int, float): The amount of scrolling to perform. + x (int, float, None, tuple, optional): The x position on the screen where the + click happens. None by default. If tuple, this is used for x and y. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + + Returns: + None + """ + _failSafeCheck() + if type(x) in (tuple, list): + x, y = x[0], x[1] + x, y = position(x, y) + + platformModule._scroll(clicks, x, y) + + _autoPause(pause, _pause) + + +def hscroll(clicks, x=None, y=None, pause=None, _pause=True): + """Performs an explicitly horizontal scroll of the mouse scroll wheel, + if this is supported by the operating system. (Currently just Linux.) + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + clicks (int, float): The amount of scrolling to perform. + x (int, float, None, tuple, optional): The x position on the screen where the + click happens. None by default. If tuple, this is used for x and y. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + + Returns: + None + """ + _failSafeCheck() + if type(x) in (tuple, list): + x, y = x[0], x[1] + x, y = position(x, y) + + platformModule._hscroll(clicks, x, y) + + _autoPause(pause, _pause) + + +def vscroll(clicks, x=None, y=None, pause=None, _pause=True): + """Performs an explicitly vertical scroll of the mouse scroll wheel, + if this is supported by the operating system. (Currently just Linux.) + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + clicks (int, float): The amount of scrolling to perform. + x (int, float, None, tuple, optional): The x position on the screen where the + click happens. None by default. If tuple, this is used for x and y. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + + Returns: + None + """ + _failSafeCheck() + if type(x) in (tuple, list): + x, y = x[0], x[1] + x, y = position(x, y) + platformModule._vscroll(clicks, x, y) + + _autoPause(pause, _pause) + + +def moveTo(x=None, y=None, duration=0.0, tween=linear, pause=None, _pause=True): + """Moves the mouse cursor to a point on the screen. + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): The x position on the screen where the + click happens. None by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): The y position on the screen where the + click happens. None by default. + duration (float, optional): The amount of time it takes to move the mouse + cursor to the xy coordinates. If 0, then the mouse cursor is moved + instantaneously. 0.0 by default. + tween (func, optional): The tweening function used if the duration is not + 0. A linear tween is used by default. See the tweens.py file for + details. + + Returns: + None + """ + _failSafeCheck() + x, y = _unpackXY(x, y) + + _mouseMoveDrag('move', x, y, 0, 0, duration, tween) + + _autoPause(pause, _pause) + + +def moveRel(xOffset=None, yOffset=None, duration=0.0, tween=linear, pause=None, _pause=True): + """Moves the mouse cursor to a point on the screen, relative to its current + position. + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): How far left (for negative values) or + right (for positive values) to move the cursor. 0 by default. If tuple, this is used for x and y. + y (int, float, None, optional): How far up (for negative values) or + down (for positive values) to move the cursor. 0 by default. + duration (float, optional): The amount of time it takes to move the mouse + cursor to the new xy coordinates. If 0, then the mouse cursor is moved + instantaneously. 0.0 by default. + tween (func, optional): The tweening function used if the duration is not + 0. A linear tween is used by default. See the tweens.py file for + details. + + Returns: + None + """ + + _failSafeCheck() + + xOffset, yOffset = _unpackXY(xOffset, yOffset) + + _mouseMoveDrag('move', None, None, xOffset, yOffset, duration, tween) + + _autoPause(pause, _pause) + + +move = moveRel # For PyAutoGUI 1.0, move() replaces moveRel(). + + +def dragTo(x=None, y=None, duration=0.0, tween=linear, button='left', pause=None, _pause=True, mouseDownUp=True): + """Performs a mouse drag (mouse movement while a button is held down) to a + point on the screen. + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): How far left (for negative values) or + right (for positive values) to move the cursor. 0 by default. If tuple, this is used for x and y. + If x is a str, it's considered a filename of an image to find on + the screen with locateOnScreen() and click the center of. + y (int, float, None, optional): How far up (for negative values) or + down (for positive values) to move the cursor. 0 by default. + duration (float, optional): The amount of time it takes to move the mouse + cursor to the new xy coordinates. If 0, then the mouse cursor is moved + instantaneously. 0.0 by default. + tween (func, optional): The tweening function used if the duration is not + 0. A linear tween is used by default. See the tweens.py file for + details. + button (str, int, optional): The mouse button clicked. Must be one of + 'left', 'middle', 'right' (or 1, 2, or 3) respectively. 'left' by + default. + mouseDownUp (True, False): When true, the mouseUp/Down actions are not perfomed. + Which allows dragging over multiple (small) actions. 'True' by default. + + Returns: + None + """ + _failSafeCheck() + x, y = _unpackXY(x, y) + + if mouseDownUp: + mouseDown(button=button, _pause=False) + _mouseMoveDrag('drag', x, y, 0, 0, duration, tween, button) + if mouseDownUp: + mouseUp(button=button, _pause=False) + + _autoPause(pause, _pause) + + +def dragRel(xOffset=0, yOffset=0, duration=0.0, tween=linear, button='left', pause=None, _pause=True, mouseDownUp=True): + """Performs a mouse drag (mouse movement while a button is held down) to a + point on the screen, relative to its current position. + + The x and y parameters detail where the mouse event happens. If None, the + current mouse position is used. If a float value, it is rounded down. If + outside the boundaries of the screen, the event happens at edge of the + screen. + + Args: + x (int, float, None, tuple, optional): How far left (for negative values) or + right (for positive values) to move the cursor. 0 by default. If tuple, this is used for xOffset and yOffset. + y (int, float, None, optional): How far up (for negative values) or + down (for positive values) to move the cursor. 0 by default. + duration (float, optional): The amount of time it takes to move the mouse + cursor to the new xy coordinates. If 0, then the mouse cursor is moved + instantaneously. 0.0 by default. + tween (func, optional): The tweening function used if the duration is not + 0. A linear tween is used by default. See the tweens.py file for + details. + button (str, int, optional): The mouse button clicked. Must be one of + 'left', 'middle', 'right' (or 1, 2, or 3) respectively. 'left' by + default. + mouseDownUp (True, False): When true, the mouseUp/Down actions are not perfomed. + Which allows dragging over multiple (small) actions. 'True' by default. + + Returns: + None + """ + if xOffset is None: + xOffset = 0 + if yOffset is None: + yOffset = 0 + + if type(xOffset) in (tuple, list): + xOffset, yOffset = xOffset[0], xOffset[1] + + if xOffset == 0 and yOffset == 0: + return # no-op case + + _failSafeCheck() + + mousex, mousey = platformModule._position() + if mouseDownUp: + mouseDown(button=button, _pause=False) + _mouseMoveDrag('drag', mousex, mousey, xOffset, yOffset, duration, tween, button) + if mouseDownUp: + mouseUp(button=button, _pause=False) + + _autoPause(pause, _pause) + + +drag = dragRel # For PyAutoGUI 1.0, we want drag() to replace dragRel(). + + +def _mouseMoveDrag(moveOrDrag, x, y, xOffset, yOffset, duration, tween=linear, button=None): + """Handles the actual move or drag event, since different platforms + implement them differently. + + On Windows & Linux, a drag is a normal mouse move while a mouse button is + held down. On OS X, a distinct "drag" event must be used instead. + + The code for moving and dragging the mouse is similar, so this function + handles both. Users should call the moveTo() or dragTo() functions instead + of calling _mouseMoveDrag(). + + Args: + moveOrDrag (str): Either 'move' or 'drag', for the type of action this is. + x (int, float, None, optional): How far left (for negative values) or + right (for positive values) to move the cursor. 0 by default. + y (int, float, None, optional): How far up (for negative values) or + down (for positive values) to move the cursor. 0 by default. + xOffset (int, float, None, optional): How far left (for negative values) or + right (for positive values) to move the cursor. 0 by default. + yOffset (int, float, None, optional): How far up (for negative values) or + down (for positive values) to move the cursor. 0 by default. + duration (float, optional): The amount of time it takes to move the mouse + cursor to the new xy coordinates. If 0, then the mouse cursor is moved + instantaneously. 0.0 by default. + tween (func, optional): The tweening function used if the duration is not + 0. A linear tween is used by default. See the tweens.py file for + details. + button (str, int, optional): The mouse button clicked. Must be one of + 'left', 'middle', 'right' (or 1, 2, or 3) respectively. 'left' by + default. + + Returns: + None + """ + + # The move and drag code is similar, but OS X requires a special drag event instead of just a move event when dragging. + # See https://stackoverflow.com/a/2696107/1893164 + assert moveOrDrag in ('move', 'drag'), "moveOrDrag must be in ('move', 'drag'), not %s" % (moveOrDrag) + + if sys.platform != 'darwin': + moveOrDrag = 'move' # Only OS X needs the drag event specifically. + + xOffset = int(xOffset) if xOffset is not None else 0 + yOffset = int(yOffset) if yOffset is not None else 0 + + if x is None and y is None and xOffset == 0 and yOffset == 0: + return # Special case for no mouse movement at all. + + startx, starty = position() + + x = int(x) if x is not None else startx + y = int(y) if y is not None else starty + + # x, y, xOffset, yOffset are now int. + x += xOffset + y += yOffset + + width, height = size() + + # Make sure x and y are within the screen bounds. + x = max(0, min(x, width - 1)) + y = max(0, min(y, height - 1)) + + # If the duration is small enough, just move the cursor there instantly. + steps = [(x, y)] + + if duration > MINIMUM_DURATION: + # Non-instant moving/dragging involves tweening: + num_steps = max(width, height) + sleep_amount = duration / num_steps + if sleep_amount < MINIMUM_SLEEP: + num_steps = int(duration / MINIMUM_SLEEP) + sleep_amount = duration / num_steps + + steps = [ + getPointOnLine(startx, starty, x, y, tween(n / num_steps)) + for n in range(num_steps) + ] + # Making sure the last position is the actual destination. + steps.append((x, y)) + + for tweenX, tweenY in steps: + if len(steps) > 1: + # A single step does not require tweening. + time.sleep(sleep_amount) + + _failSafeCheck() + tweenX = int(round(tweenX)) + tweenY = int(round(tweenY)) + if moveOrDrag == 'move': + platformModule._moveTo(tweenX, tweenY) + elif moveOrDrag == 'drag': + platformModule._dragTo(tweenX, tweenY, button) + else: + raise NotImplementedError('Unknown value of moveOrDrag: {0}'.format(moveOrDrag)) + + _failSafeCheck() + + +# Keyboard Functions +# ================== + +def isValidKey(key): + """Returns a Boolean value if the given key is a valid value to pass to + PyAutoGUI's keyboard-related functions for the current platform. + + This function is here because passing an invalid value to the PyAutoGUI + keyboard functions currently is a no-op that does not raise an exception. + + Some keys are only valid on some platforms. For example, while 'esc' is + valid for the Escape key on all platforms, 'browserback' is only used on + Windows operating systems. + + Args: + key (str): The key value. + + Returns: + bool: True if key is a valid value, False if not. + """ + return platformModule.keyboardMapping.get(key, None) != None + + +def keyDown(key, pause=None, _pause=True): + """Performs a keyboard key press without the release. This will put that + key in a held down state. + + NOTE: For some reason, this does not seem to cause key repeats like would + happen if a keyboard key was held down on a text field. + + Args: + key (str): The key to be pressed down. The valid names are listed in + KEYBOARD_KEYS. + + Returns: + None + """ + if len(key) > 1: + key = key.lower() + + _failSafeCheck() + platformModule._keyDown(key) + + _autoPause(pause, _pause) + +def keyUp(key, pause=None, _pause=True): + """Performs a keyboard key release (without the press down beforehand). + + Args: + key (str): The key to be released up. The valid names are listed in + KEYBOARD_KEYS. + + Returns: + None + """ + if len(key) > 1: + key = key.lower() + + _failSafeCheck() + platformModule._keyUp(key) + + _autoPause(pause, _pause) + +def press(keys, presses=1, interval=0.0, pause=None, _pause=True): + """Performs a keyboard key press down, followed by a release. + + Args: + key (str, list): The key to be pressed. The valid names are listed in + KEYBOARD_KEYS. Can also be a list of such strings. + presses (integer, optiional): the number of press repetition + 1 by default, for just one press + interval (float, optional): How many seconds between each press. + 0.0 by default, for no pause between presses. + pause (float, optional): How many seconds in the end of function process. + None by default, for no pause in the end of function process. + Returns: + None + """ + if type(keys) == str: + keys = [keys] # put string in a list + else: + lowerKeys = [] + for s in keys: + if len(s) > 1: + lowerKeys.append(s.lower()) + else: + lowerKeys.append(s) + interval = float(interval) + for i in range(presses): + for k in keys: + _failSafeCheck() + platformModule._keyDown(k) + platformModule._keyUp(k) + time.sleep(interval) + + _autoPause(pause, _pause) + +def typewrite(message, interval=0.0, pause=None, _pause=True): + """Performs a keyboard key press down, followed by a release, for each of + the characters in message. + + The message argument can also be list of strings, in which case any valid + keyboard name can be used. + + Since this performs a sequence of keyboard presses and does not hold down + keys, it cannot be used to perform keyboard shortcuts. Use the hotkey() + function for that. + + Args: + message (str, list): If a string, then the characters to be pressed. If a + list, then the key names of the keys to press in order. The valid names + are listed in KEYBOARD_KEYS. + interval (float, optional): The number of seconds in between each press. + 0.0 by default, for no pause in between presses. + + Returns: + None + """ + interval = float(interval) + + _failSafeCheck() + + for c in message: + if len(c) > 1: + c = c.lower() + press(c, _pause=False) + time.sleep(interval) + _failSafeCheck() + + _autoPause(pause, _pause) + + +write = typewrite # In PyAutoGUI 1.0, write() replaces typewrite(). + + +def hotkey(*args, **kwargs): + """Performs key down presses on the arguments passed in order, then performs + key releases in reverse order. + + The effect is that calling hotkey('ctrl', 'shift', 'c') would perform a + "Ctrl-Shift-C" hotkey/keyboard shortcut press. + + Args: + key(s) (str): The series of keys to press, in order. This can also be a + list of key strings to press. + interval (float, optional): The number of seconds in between each press. + 0.0 by default, for no pause in between presses. + + Returns: + None + """ + interval = float(kwargs.get('interval', 0.0)) + + _failSafeCheck() + + for c in args: + if len(c) > 1: + c = c.lower() + platformModule._keyDown(c) + time.sleep(interval) + for c in reversed(args): + if len(c) > 1: + c = c.lower() + platformModule._keyUp(c) + time.sleep(interval) + + _autoPause(kwargs.get('pause', None), kwargs.get('_pause', True)) + + +class FailSafeException(Exception): + pass + + +def _failSafeCheck(): + global FAILSAFE_POINT + + if isinstance(FAILSAFE_POINT, str): + if FAILSAFE_POINT.lower() == 'topleft': + FAILSAFE_POINT = (0, 0) + elif FAILSAFE_POINT.lower() == 'topright': + FAILSAFE_POINT = (size()[0] - 1, 0) + elif FAILSAFE_POINT.lower() == 'bottomleft': + FAILSAFE_POINT = (0, size()[1] - 1) + elif FAILSAFE_POINT.lower() == 'bottomright': + screenSize = size() + FAILSAFE_POINT = (screenSize[0] - 1, screenSize[1] - 1) + else: + raise + + if FAILSAFE and position() == FAILSAFE_POINT: + raise FailSafeException('PyAutoGUI fail-safe triggered from mouse moving to upper-left corner. To disable this fail-safe, set pyautogui.FAILSAFE to False.') + + +def displayMousePosition(xOffset=0, yOffset=0): + """This function is meant to be run from the command line. It will + automatically display the location and RGB of the mouse cursor.""" + print('Press Ctrl-C to quit.') + if xOffset != 0 or yOffset != 0: + print('xOffset: %s yOffset: %s' % (xOffset, yOffset)) + resolution = size() + try: + while True: + # Get and print the mouse coordinates. + x, y = position() + positionStr = 'X: ' + str(x - xOffset).rjust(4) + ' Y: ' + str(y - yOffset).rjust(4) + if (x - xOffset) < 0 or (y - yOffset) < 0 or (x - xOffset) >= resolution[0] or (y - yOffset) >= resolution[1]: + pixelColor = ('NaN', 'NaN', 'NaN') + else: + pixelColor = pyscreeze.screenshot().getpixel((x, y)) + positionStr += ' RGB: (' + str(pixelColor[0]).rjust(3) + positionStr += ', ' + str(pixelColor[1]).rjust(3) + positionStr += ', ' + str(pixelColor[2]).rjust(3) + ')' + sys.stdout.write(positionStr) + sys.stdout.write('\b' * len(positionStr)) + sys.stdout.flush() + except KeyboardInterrupt: + sys.stdout.write('\n') + sys.stdout.flush() diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/__main__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/__main__.py new file mode 100644 index 00000000..57204678 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/__main__.py @@ -0,0 +1,2 @@ +from . import displayMousePosition +displayMousePosition() \ No newline at end of file diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_java.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_java.py new file mode 100644 index 00000000..e69de29b diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_osx.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_osx.py new file mode 100644 index 00000000..eb4b108a --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_osx.py @@ -0,0 +1,442 @@ +import time +import sys + +try: + import Quartz +except: + assert False, "You must first install pyobjc-core and pyobjc: https://pyautogui.readthedocs.io/en/latest/install.html" +import AppKit + +import pyautogui + + +if sys.platform != 'darwin': + raise Exception('The pyautogui_osx module should only be loaded on an OS X system.') + + + +""" Taken from events.h +/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h + +The *KB dictionaries in pyautogui map a string that can be passed to keyDown(), +keyUp(), or press() into the code used for the OS-specific keyboard function. + +They should always be lowercase, and the same keys should be used across all OSes.""" +keyboardMapping = dict([(key, None) for key in pyautogui.KEY_NAMES]) +keyboardMapping.update({ + 'a': 0x00, # kVK_ANSI_A + 's': 0x01, # kVK_ANSI_S + 'd': 0x02, # kVK_ANSI_D + 'f': 0x03, # kVK_ANSI_F + 'h': 0x04, # kVK_ANSI_H + 'g': 0x05, # kVK_ANSI_G + 'z': 0x06, # kVK_ANSI_Z + 'x': 0x07, # kVK_ANSI_X + 'c': 0x08, # kVK_ANSI_C + 'v': 0x09, # kVK_ANSI_V + 'b': 0x0b, # kVK_ANSI_B + 'q': 0x0c, # kVK_ANSI_Q + 'w': 0x0d, # kVK_ANSI_W + 'e': 0x0e, # kVK_ANSI_E + 'r': 0x0f, # kVK_ANSI_R + 'y': 0x10, # kVK_ANSI_Y + 't': 0x11, # kVK_ANSI_T + '1': 0x12, # kVK_ANSI_1 + '!': 0x12, # kVK_ANSI_1 + '2': 0x13, # kVK_ANSI_2 + '@': 0x13, # kVK_ANSI_2 + '3': 0x14, # kVK_ANSI_3 + '#': 0x14, # kVK_ANSI_3 + '4': 0x15, # kVK_ANSI_4 + '$': 0x15, # kVK_ANSI_4 + '6': 0x16, # kVK_ANSI_6 + '^': 0x16, # kVK_ANSI_6 + '5': 0x17, # kVK_ANSI_5 + '%': 0x17, # kVK_ANSI_5 + '=': 0x18, # kVK_ANSI_Equal + '+': 0x18, # kVK_ANSI_Equal + '9': 0x19, # kVK_ANSI_9 + '(': 0x19, # kVK_ANSI_9 + '7': 0x1a, # kVK_ANSI_7 + '&': 0x1a, # kVK_ANSI_7 + '-': 0x1b, # kVK_ANSI_Minus + '_': 0x1b, # kVK_ANSI_Minus + '8': 0x1c, # kVK_ANSI_8 + '*': 0x1c, # kVK_ANSI_8 + '0': 0x1d, # kVK_ANSI_0 + ')': 0x1d, # kVK_ANSI_0 + ']': 0x1e, # kVK_ANSI_RightBracket + '}': 0x1e, # kVK_ANSI_RightBracket + 'o': 0x1f, # kVK_ANSI_O + 'u': 0x20, # kVK_ANSI_U + '[': 0x21, # kVK_ANSI_LeftBracket + '{': 0x21, # kVK_ANSI_LeftBracket + 'i': 0x22, # kVK_ANSI_I + 'p': 0x23, # kVK_ANSI_P + 'l': 0x25, # kVK_ANSI_L + 'j': 0x26, # kVK_ANSI_J + "'": 0x27, # kVK_ANSI_Quote + '"': 0x27, # kVK_ANSI_Quote + 'k': 0x28, # kVK_ANSI_K + ';': 0x29, # kVK_ANSI_Semicolon + ':': 0x29, # kVK_ANSI_Semicolon + '\\': 0x2a, # kVK_ANSI_Backslash + '|': 0x2a, # kVK_ANSI_Backslash + ',': 0x2b, # kVK_ANSI_Comma + '<': 0x2b, # kVK_ANSI_Comma + '/': 0x2c, # kVK_ANSI_Slash + '?': 0x2c, # kVK_ANSI_Slash + 'n': 0x2d, # kVK_ANSI_N + 'm': 0x2e, # kVK_ANSI_M + '.': 0x2f, # kVK_ANSI_Period + '>': 0x2f, # kVK_ANSI_Period + '`': 0x32, # kVK_ANSI_Grave + '~': 0x32, # kVK_ANSI_Grave + ' ': 0x31, # kVK_Space + 'space': 0x31, + '\r': 0x24, # kVK_Return + '\n': 0x24, # kVK_Return + 'enter': 0x24, # kVK_Return + 'return': 0x24, # kVK_Return + '\t': 0x30, # kVK_Tab + 'tab': 0x30, # kVK_Tab + 'backspace': 0x33, # kVK_Delete, which is "Backspace" on OS X. + '\b': 0x33, # kVK_Delete, which is "Backspace" on OS X. + 'esc': 0x35, # kVK_Escape + 'escape': 0x35, # kVK_Escape + 'command': 0x37, # kVK_Command + 'shift': 0x38, # kVK_Shift + 'shiftleft': 0x38, # kVK_Shift + 'capslock': 0x39, # kVK_CapsLock + 'option': 0x3a, # kVK_Option + 'optionleft': 0x3a, # kVK_Option + 'alt': 0x3a, # kVK_Option + 'altleft': 0x3a, # kVK_Option + 'ctrl': 0x3b, # kVK_Control + 'ctrlleft': 0x3b, # kVK_Control + 'shiftright': 0x3c, # kVK_RightShift + 'optionright': 0x3d, # kVK_RightOption + 'ctrlright': 0x3e, # kVK_RightControl + 'fn': 0x3f, # kVK_Function + 'f17': 0x40, # kVK_F17 + 'volumeup': 0x48, # kVK_VolumeUp + 'volumedown': 0x49, # kVK_VolumeDown + 'volumemute': 0x4a, # kVK_Mute + 'f18': 0x4f, # kVK_F18 + 'f19': 0x50, # kVK_F19 + 'f20': 0x5a, # kVK_F20 + 'f5': 0x60, # kVK_F5 + 'f6': 0x61, # kVK_F6 + 'f7': 0x62, # kVK_F7 + 'f3': 0x63, # kVK_F3 + 'f8': 0x64, # kVK_F8 + 'f9': 0x65, # kVK_F9 + 'f11': 0x67, # kVK_F11 + 'f13': 0x69, # kVK_F13 + 'f16': 0x6a, # kVK_F16 + 'f14': 0x6b, # kVK_F14 + 'f10': 0x6d, # kVK_F10 + 'f12': 0x6f, # kVK_F12 + 'f15': 0x71, # kVK_F15 + 'help': 0x72, # kVK_Help + 'home': 0x73, # kVK_Home + 'pageup': 0x74, # kVK_PageUp + 'pgup': 0x74, # kVK_PageUp + 'del': 0x75, # kVK_ForwardDelete + 'delete': 0x75, # kVK_ForwardDelete + 'f4': 0x76, # kVK_F4 + 'end': 0x77, # kVK_End + 'f2': 0x78, # kVK_F2 + 'pagedown': 0x79, # kVK_PageDown + 'pgdn': 0x79, # kVK_PageDown + 'f1': 0x7a, # kVK_F1 + 'left': 0x7b, # kVK_LeftArrow + 'right': 0x7c, # kVK_RightArrow + 'down': 0x7d, # kVK_DownArrow + 'up': 0x7e, # kVK_UpArrow + 'yen': 0x5d, # kVK_JIS_Yen + #'underscore' : 0x5e, # kVK_JIS_Underscore (only applies to Japanese keyboards) + #'comma': 0x5f, # kVK_JIS_KeypadComma (only applies to Japanese keyboards) + 'eisu': 0x66, # kVK_JIS_Eisu + 'kana': 0x68, # kVK_JIS_Kana +}) + +""" +# TODO - additional key codes to add + kVK_ANSI_KeypadDecimal = 0x41, + kVK_ANSI_KeypadMultiply = 0x43, + kVK_ANSI_KeypadPlus = 0x45, + kVK_ANSI_KeypadClear = 0x47, + kVK_ANSI_KeypadDivide = 0x4B, + kVK_ANSI_KeypadEnter = 0x4C, + kVK_ANSI_KeypadMinus = 0x4E, + kVK_ANSI_KeypadEquals = 0x51, + kVK_ANSI_Keypad0 = 0x52, + kVK_ANSI_Keypad1 = 0x53, + kVK_ANSI_Keypad2 = 0x54, + kVK_ANSI_Keypad3 = 0x55, + kVK_ANSI_Keypad4 = 0x56, + kVK_ANSI_Keypad5 = 0x57, + kVK_ANSI_Keypad6 = 0x58, + kVK_ANSI_Keypad7 = 0x59, + kVK_ANSI_Keypad8 = 0x5B, + kVK_ANSI_Keypad9 = 0x5C, +""" + +# add mappings for uppercase letters +for c in 'abcdefghijklmnopqrstuvwxyz': + keyboardMapping[c.upper()] = keyboardMapping[c] + +# Taken from ev_keymap.h +# http://www.opensource.apple.com/source/IOHIDFamily/IOHIDFamily-86.1/IOHIDSystem/IOKit/hidsystem/ev_keymap.h +special_key_translate_table = { + 'KEYTYPE_SOUND_UP': 0, + 'KEYTYPE_SOUND_DOWN': 1, + 'KEYTYPE_BRIGHTNESS_UP': 2, + 'KEYTYPE_BRIGHTNESS_DOWN': 3, + 'KEYTYPE_CAPS_LOCK': 4, + 'KEYTYPE_HELP': 5, + 'POWER_KEY': 6, + 'KEYTYPE_MUTE': 7, + 'UP_ARROW_KEY': 8, + 'DOWN_ARROW_KEY': 9, + 'KEYTYPE_NUM_LOCK': 10, + 'KEYTYPE_CONTRAST_UP': 11, + 'KEYTYPE_CONTRAST_DOWN': 12, + 'KEYTYPE_LAUNCH_PANEL': 13, + 'KEYTYPE_EJECT': 14, + 'KEYTYPE_VIDMIRROR': 15, + 'KEYTYPE_PLAY': 16, + 'KEYTYPE_NEXT': 17, + 'KEYTYPE_PREVIOUS': 18, + 'KEYTYPE_FAST': 19, + 'KEYTYPE_REWIND': 20, + 'KEYTYPE_ILLUMINATION_UP': 21, + 'KEYTYPE_ILLUMINATION_DOWN': 22, + 'KEYTYPE_ILLUMINATION_TOGGLE': 23 +} + +def _keyDown(key): + if key not in keyboardMapping or keyboardMapping[key] is None: + return + + if key in special_key_translate_table: + _specialKeyEvent(key, 'down') + else: + _normalKeyEvent(key, 'down') + +def _keyUp(key): + if key not in keyboardMapping or keyboardMapping[key] is None: + return + + if key in special_key_translate_table: + _specialKeyEvent(key, 'up') + else: + _normalKeyEvent(key, 'up') + + +def _normalKeyEvent(key, upDown): + assert upDown in ('up', 'down'), "upDown argument must be 'up' or 'down'" + + try: + if pyautogui.isShiftCharacter(key): + key_code = keyboardMapping[key.lower()] + + event = Quartz.CGEventCreateKeyboardEvent(None, + keyboardMapping['shift'], upDown == 'down') + Quartz.CGEventPost(Quartz.kCGHIDEventTap, event) + # Tiny sleep to let OS X catch up on us pressing shift + time.sleep(0.01) + + else: + key_code = keyboardMapping[key] + + event = Quartz.CGEventCreateKeyboardEvent(None, key_code, upDown == 'down') + Quartz.CGEventPost(Quartz.kCGHIDEventTap, event) + time.sleep(0.01) + + # TODO - wait, is the shift key's keyup not done? + # TODO - get rid of this try-except. + + except KeyError: + raise RuntimeError("Key %s not implemented." % (key)) + +def _specialKeyEvent(key, upDown): + """ Helper method for special keys. + + Source: http://stackoverflow.com/questions/11045814/emulate-media-key-press-on-mac + """ + assert upDown in ('up', 'down'), "upDown argument must be 'up' or 'down'" + + key_code = special_key_translate_table[key] + + ev = AppKit.NSEvent.otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_( + Quartz.NSSystemDefined, # type + (0,0), # location + 0xa00 if upDown == 'down' else 0xb00, # flags + 0, # timestamp + 0, # window + 0, # ctx + 8, # subtype + (key_code << 16) | ((0xa if upDown == 'down' else 0xb) << 8), # data1 + -1 # data2 + ) + + Quartz.CGEventPost(0, ev.CGEvent()) + + + + + + + + + +def _position(): + loc = AppKit.NSEvent.mouseLocation() + return int(loc.x), int(Quartz.CGDisplayPixelsHigh(0) - loc.y) + + +def _size(): + return Quartz.CGDisplayPixelsWide(Quartz.CGMainDisplayID()), Quartz.CGDisplayPixelsHigh(Quartz.CGMainDisplayID()) + + + +def _scroll(clicks, x=None, y=None): + _vscroll(clicks, x, y) + + +""" +According to https://developer.apple.com/library/mac/documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/c/func/Quartz.CGEventCreateScrollWheelEvent +"Scrolling movement is generally represented by small signed integer values, typically in a range from -10 to +10. Large values may have unexpected results, depending on the application that processes the event." +The scrolling functions will create multiple events that scroll 10 each, and then scroll the remainder. +""" + +def _vscroll(clicks, x=None, y=None): + _moveTo(x, y) + clicks = int(clicks) + for _ in range(abs(clicks) // 10): + scrollWheelEvent = Quartz.CGEventCreateScrollWheelEvent( + None, # no source + Quartz.kCGScrollEventUnitLine, # units + 1, # wheelCount (number of dimensions) + 10 if clicks >= 0 else -10) # vertical movement + Quartz.CGEventPost(Quartz.kCGHIDEventTap, scrollWheelEvent) + + scrollWheelEvent = Quartz.CGEventCreateScrollWheelEvent( + None, # no source + Quartz.kCGScrollEventUnitLine, # units + 1, # wheelCount (number of dimensions) + clicks % 10 if clicks >= 0 else -1 * (-clicks % 10)) # vertical movement + Quartz.CGEventPost(Quartz.kCGHIDEventTap, scrollWheelEvent) + + +def _hscroll(clicks, x=None, y=None): + _moveTo(x, y) + clicks = int(clicks) + for _ in range(abs(clicks) // 10): + scrollWheelEvent = Quartz.CGEventCreateScrollWheelEvent( + None, # no source + Quartz.kCGScrollEventUnitLine, # units + 2, # wheelCount (number of dimensions) + 0, # vertical movement + 10 if clicks >= 0 else -10) # horizontal movement + Quartz.CGEventPost(Quartz.kCGHIDEventTap, scrollWheelEvent) + + scrollWheelEvent = Quartz.CGEventCreateScrollWheelEvent( + None, # no source + Quartz.kCGScrollEventUnitLine, # units + 2, # wheelCount (number of dimensions) + 0, # vertical movement + (clicks % 10) if clicks >= 0 else (-1 * clicks % 10)) # horizontal movement + Quartz.CGEventPost(Quartz.kCGHIDEventTap, scrollWheelEvent) + + +def _mouseDown(x, y, button): + if button == 'left': + _sendMouseEvent(Quartz.kCGEventLeftMouseDown, x, y, Quartz.kCGMouseButtonLeft) + elif button == 'middle': + _sendMouseEvent(Quartz.kCGEventOtherMouseDown, x, y, Quartz.kCGMouseButtonCenter) + elif button == 'right': + _sendMouseEvent(Quartz.kCGEventRightMouseDown, x, y, Quartz.kCGMouseButtonRight) + else: + assert False, "button argument not in ('left', 'middle', 'right')" + + +def _mouseUp(x, y, button): + if button == 'left': + _sendMouseEvent(Quartz.kCGEventLeftMouseUp, x, y, Quartz.kCGMouseButtonLeft) + elif button == 'middle': + _sendMouseEvent(Quartz.kCGEventOtherMouseUp, x, y, Quartz.kCGMouseButtonCenter) + elif button == 'right': + _sendMouseEvent(Quartz.kCGEventRightMouseUp, x, y, Quartz.kCGMouseButtonRight) + else: + assert False, "button argument not in ('left', 'middle', 'right')" + + +def _click(x, y, button): + if button == 'left': + _sendMouseEvent(Quartz.kCGEventLeftMouseDown, x, y, Quartz.kCGMouseButtonLeft) + _sendMouseEvent(Quartz.kCGEventLeftMouseUp, x, y, Quartz.kCGMouseButtonLeft) + elif button == 'middle': + _sendMouseEvent(Quartz.kCGEventOtherMouseDown, x, y, Quartz.kCGMouseButtonCenter) + _sendMouseEvent(Quartz.kCGEventOtherMouseUp, x, y, Quartz.kCGMouseButtonCenter) + elif button == 'right': + _sendMouseEvent(Quartz.kCGEventRightMouseDown, x, y, Quartz.kCGMouseButtonRight) + _sendMouseEvent(Quartz.kCGEventRightMouseUp, x, y, Quartz.kCGMouseButtonRight) + else: + assert False, "button argument not in ('left', 'middle', 'right')" + +def _multiClick(x, y, button, num): + btn = None + down = None + up = None + + if button == 'left': + btn = Quartz.kCGMouseButtonLeft + down = Quartz.kCGEventLeftMouseDown + up = Quartz.kCGEventLeftMouseUp + elif button == 'middle': + btn = Quartz.kCGMouseButtonCenter + down = Quartz.kCGEventOtherMouseDown + up = Quartz.kCGEventOtherMouseUp + elif button == 'right': + btn = Quartz.kCGMouseButtonRight + down = Quartz.kCGEventRightMouseDown + up = Quartz.kCGEventRightMouseUp + else: + assert False, "button argument not in ('left', 'middle', 'right')" + return + + mouseEvent = Quartz.CGEventCreateMouseEvent(None, down, (x, y), btn) + Quartz.CGEventSetIntegerValueField(mouseEvent, Quartz.kCGMouseEventClickState, num) + Quartz.CGEventPost(Quartz.kCGHIDEventTap, mouseEvent) + Quartz.CGEventSetType(mouseEvent, up) + Quartz.CGEventPost(Quartz.kCGHIDEventTap, mouseEvent) + for i in range(0, num-1): + Quartz.CGEventSetType(mouseEvent, down) + Quartz.CGEventPost(Quartz.kCGHIDEventTap, mouseEvent) + Quartz.CGEventSetType(mouseEvent, up) + Quartz.CGEventPost(Quartz.kCGHIDEventTap, mouseEvent) + + +def _sendMouseEvent(ev, x, y, button): + mouseEvent = Quartz.CGEventCreateMouseEvent(None, ev, (x, y), button) + Quartz.CGEventPost(Quartz.kCGHIDEventTap, mouseEvent) + + +def _dragTo(x, y, button): + if button == 'left': + _sendMouseEvent(Quartz.kCGEventLeftMouseDragged , x, y, Quartz.kCGMouseButtonLeft) + elif button == 'middle': + _sendMouseEvent(Quartz.kCGEventOtherMouseDragged , x, y, Quartz.kCGMouseButtonCenter) + elif button == 'right': + _sendMouseEvent(Quartz.kCGEventRightMouseDragged , x, y, Quartz.kCGMouseButtonRight) + else: + assert False, "button argument not in ('left', 'middle', 'right')" + time.sleep(0.01) # needed to allow OS time to catch up. + +def _moveTo(x, y): + _sendMouseEvent(Quartz.kCGEventMouseMoved, x, y, 0) + time.sleep(0.01) # needed to allow OS time to catch up. + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_win.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_win.py new file mode 100644 index 00000000..7a9ef10b --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_win.py @@ -0,0 +1,586 @@ +# Windows implementation of PyAutoGUI functions. +# BSD license +# Al Sweigart al@inventwithpython.com + +import ctypes +import ctypes.wintypes +import pyautogui + +import sys +if sys.platform != 'win32': + raise Exception('The pyautogui_win module should only be loaded on a Windows system.') + + +# Fixes the scaling issues where PyAutoGUI was reporting the wrong resolution: +try: + ctypes.windll.user32.SetProcessDPIAware() +except AttributeError: + pass # Windows XP doesn't support this, so just do nothing. + + +""" +A lot of this code is probably repeated from win32 extensions module, but I didn't want to have that dependency. + +Note: According to http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx +the ctypes.windll.user32.mouse_event() function has been superceded by SendInput. + +SendInput() is documented here: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx + +UPDATE: SendInput() doesn't seem to be working for me. I've switched back to mouse_event().""" + + +# Event codes to be passed to the mouse_event() win32 function. +# Documented here: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspx +MOUSEEVENTF_LEFTDOWN = 0x0002 +MOUSEEVENTF_LEFTUP = 0x0004 +MOUSEEVENTF_LEFTCLICK = MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP +MOUSEEVENTF_RIGHTDOWN = 0x0008 +MOUSEEVENTF_RIGHTUP = 0x0010 +MOUSEEVENTF_RIGHTCLICK = MOUSEEVENTF_RIGHTDOWN + MOUSEEVENTF_RIGHTUP +MOUSEEVENTF_MIDDLEDOWN = 0x0020 +MOUSEEVENTF_MIDDLEUP = 0x0040 +MOUSEEVENTF_MIDDLECLICK = MOUSEEVENTF_MIDDLEDOWN + MOUSEEVENTF_MIDDLEUP + +MOUSEEVENTF_WHEEL = 0x0800 +MOUSEEVENTF_HWHEEL = 0x01000 + +# Documented here: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx +KEYEVENTF_KEYUP = 0x0002 + +# Documented here: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx +INPUT_MOUSE = 0 +INPUT_KEYBOARD = 1 + + +# This ctypes structure is for a Win32 POINT structure, +# which is documented here: http://msdn.microsoft.com/en-us/library/windows/desktop/dd162805(v=vs.85).aspx +# The POINT structure is used by GetCursorPos(). +class POINT(ctypes.Structure): + _fields_ = [("x", ctypes.c_long), + ("y", ctypes.c_long)] + +# These ctypes structures are for Win32 INPUT, MOUSEINPUT, KEYBDINPUT, and HARDWAREINPUT structures, +# used by SendInput and documented here: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx +# Thanks to BSH for this StackOverflow answer: https://stackoverflow.com/questions/18566289/how-would-you-recreate-this-windows-api-structure-with-ctypes +class MOUSEINPUT(ctypes.Structure): + _fields_ = [ + ('dx', ctypes.wintypes.LONG), + ('dy', ctypes.wintypes.LONG), + ('mouseData', ctypes.wintypes.DWORD), + ('dwFlags', ctypes.wintypes.DWORD), + ('time', ctypes.wintypes.DWORD), + ('dwExtraInfo', ctypes.POINTER(ctypes.wintypes.ULONG)), + ] + +class KEYBDINPUT(ctypes.Structure): + _fields_ = [ + ('wVk', ctypes.wintypes.WORD), + ('wScan', ctypes.wintypes.WORD), + ('dwFlags', ctypes.wintypes.DWORD), + ('time', ctypes.wintypes.DWORD), + ('dwExtraInfo', ctypes.POINTER(ctypes.wintypes.ULONG)), + ] + +class HARDWAREINPUT(ctypes.Structure): + _fields_ = [ + ('uMsg', ctypes.wintypes.DWORD), + ('wParamL', ctypes.wintypes.WORD), + ('wParamH', ctypes.wintypes.DWORD) + ] + +class INPUT(ctypes.Structure): + class _I(ctypes.Union): + _fields_ = [ + ('mi', MOUSEINPUT), + ('ki', KEYBDINPUT), + ('hi', HARDWAREINPUT), + ] + + _anonymous_ = ('i', ) + _fields_ = [ + ('type', ctypes.wintypes.DWORD), + ('i', _I), + ] +# End of the SendInput win32 data structures. + + + +""" Keyboard key mapping for pyautogui: +Documented at http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx + +The *KB dictionaries in pyautogui map a string that can be passed to keyDown(), +keyUp(), or press() into the code used for the OS-specific keyboard function. + +They should always be lowercase, and the same keys should be used across all OSes.""" +keyboardMapping = dict([(key, None) for key in pyautogui.KEY_NAMES]) +keyboardMapping.update({ + 'backspace': 0x08, # VK_BACK + '\b': 0x08, # VK_BACK + 'super': 0x5B, #VK_LWIN + 'tab': 0x09, # VK_TAB + '\t': 0x09, # VK_TAB + 'clear': 0x0c, # VK_CLEAR + 'enter': 0x0d, # VK_RETURN + '\n': 0x0d, # VK_RETURN + 'return': 0x0d, # VK_RETURN + 'shift': 0x10, # VK_SHIFT + 'ctrl': 0x11, # VK_CONTROL + 'alt': 0x12, # VK_MENU + 'pause': 0x13, # VK_PAUSE + 'capslock': 0x14, # VK_CAPITAL + 'kana': 0x15, # VK_KANA + 'hanguel': 0x15, # VK_HANGUEL + 'hangul': 0x15, # VK_HANGUL + 'junja': 0x17, # VK_JUNJA + 'final': 0x18, # VK_FINAL + 'hanja': 0x19, # VK_HANJA + 'kanji': 0x19, # VK_KANJI + 'esc': 0x1b, # VK_ESCAPE + 'escape': 0x1b, # VK_ESCAPE + 'convert': 0x1c, # VK_CONVERT + 'nonconvert': 0x1d, # VK_NONCONVERT + 'accept': 0x1e, # VK_ACCEPT + 'modechange': 0x1f, # VK_MODECHANGE + ' ': 0x20, # VK_SPACE + 'space': 0x20, + 'pgup': 0x21, # VK_PRIOR + 'pgdn': 0x22, # VK_NEXT + 'pageup': 0x21, # VK_PRIOR + 'pagedown': 0x22, # VK_NEXT + 'end': 0x23, # VK_END + 'home': 0x24, # VK_HOME + 'left': 0x25, # VK_LEFT + 'up': 0x26, # VK_UP + 'right': 0x27, # VK_RIGHT + 'down': 0x28, # VK_DOWN + 'select': 0x29, # VK_SELECT + 'print': 0x2a, # VK_PRINT + 'execute': 0x2b, # VK_EXECUTE + 'prtsc': 0x2c, # VK_SNAPSHOT + 'prtscr': 0x2c, # VK_SNAPSHOT + 'prntscrn': 0x2c, # VK_SNAPSHOT + 'printscreen': 0x2c, # VK_SNAPSHOT + 'insert': 0x2d, # VK_INSERT + 'del': 0x2e, # VK_DELETE + 'delete': 0x2e, # VK_DELETE + 'help': 0x2f, # VK_HELP + 'win': 0x5b, # VK_LWIN + 'winleft': 0x5b, # VK_LWIN + 'winright': 0x5c, # VK_RWIN + 'apps': 0x5d, # VK_APPS + 'sleep': 0x5f, # VK_SLEEP + 'num0': 0x60, # VK_NUMPAD0 + 'num1': 0x61, # VK_NUMPAD1 + 'num2': 0x62, # VK_NUMPAD2 + 'num3': 0x63, # VK_NUMPAD3 + 'num4': 0x64, # VK_NUMPAD4 + 'num5': 0x65, # VK_NUMPAD5 + 'num6': 0x66, # VK_NUMPAD6 + 'num7': 0x67, # VK_NUMPAD7 + 'num8': 0x68, # VK_NUMPAD8 + 'num9': 0x69, # VK_NUMPAD9 + 'multiply': 0x6a, # VK_MULTIPLY ??? Is this the numpad *? + 'add': 0x6b, # VK_ADD ??? Is this the numpad +? + 'separator': 0x6c, # VK_SEPARATOR ??? Is this the numpad enter? + 'subtract': 0x6d, # VK_SUBTRACT ??? Is this the numpad -? + 'decimal': 0x6e, # VK_DECIMAL + 'divide': 0x6f, # VK_DIVIDE + 'f1': 0x70, # VK_F1 + 'f2': 0x71, # VK_F2 + 'f3': 0x72, # VK_F3 + 'f4': 0x73, # VK_F4 + 'f5': 0x74, # VK_F5 + 'f6': 0x75, # VK_F6 + 'f7': 0x76, # VK_F7 + 'f8': 0x77, # VK_F8 + 'f9': 0x78, # VK_F9 + 'f10': 0x79, # VK_F10 + 'f11': 0x7a, # VK_F11 + 'f12': 0x7b, # VK_F12 + 'f13': 0x7c, # VK_F13 + 'f14': 0x7d, # VK_F14 + 'f15': 0x7e, # VK_F15 + 'f16': 0x7f, # VK_F16 + 'f17': 0x80, # VK_F17 + 'f18': 0x81, # VK_F18 + 'f19': 0x82, # VK_F19 + 'f20': 0x83, # VK_F20 + 'f21': 0x84, # VK_F21 + 'f22': 0x85, # VK_F22 + 'f23': 0x86, # VK_F23 + 'f24': 0x87, # VK_F24 + 'numlock': 0x90, # VK_NUMLOCK + 'scrolllock': 0x91, # VK_SCROLL + 'shiftleft': 0xa0, # VK_LSHIFT + 'shiftright': 0xa1, # VK_RSHIFT + 'ctrlleft': 0xa2, # VK_LCONTROL + 'ctrlright': 0xa3, # VK_RCONTROL + 'altleft': 0xa4, # VK_LMENU + 'altright': 0xa5, # VK_RMENU + 'browserback': 0xa6, # VK_BROWSER_BACK + 'browserforward': 0xa7, # VK_BROWSER_FORWARD + 'browserrefresh': 0xa8, # VK_BROWSER_REFRESH + 'browserstop': 0xa9, # VK_BROWSER_STOP + 'browsersearch': 0xaa, # VK_BROWSER_SEARCH + 'browserfavorites': 0xab, # VK_BROWSER_FAVORITES + 'browserhome': 0xac, # VK_BROWSER_HOME + 'volumemute': 0xad, # VK_VOLUME_MUTE + 'volumedown': 0xae, # VK_VOLUME_DOWN + 'volumeup': 0xaf, # VK_VOLUME_UP + 'nexttrack': 0xb0, # VK_MEDIA_NEXT_TRACK + 'prevtrack': 0xb1, # VK_MEDIA_PREV_TRACK + 'stop': 0xb2, # VK_MEDIA_STOP + 'playpause': 0xb3, # VK_MEDIA_PLAY_PAUSE + 'launchmail': 0xb4, # VK_LAUNCH_MAIL + 'launchmediaselect': 0xb5, # VK_LAUNCH_MEDIA_SELECT + 'launchapp1': 0xb6, # VK_LAUNCH_APP1 + 'launchapp2': 0xb7, # VK_LAUNCH_APP2 + #';': 0xba, # VK_OEM_1 + #'+': 0xbb, # VK_OEM_PLUS + #',': 0xbc, # VK_OEM_COMMA + #'-': 0xbd, # VK_OEM_MINUS + #'.': 0xbe, # VK_OEM_PERIOD + #'/': 0xbf, # VK_OEM_2 + #'~': 0xc0, # VK_OEM_3 + #'[': 0xdb, # VK_OEM_4 + #'|': 0xdc, # VK_OEM_5 + #']': 0xdd, # VK_OEM_6 + #"'": 0xde, # VK_OEM_7 + #'': 0xdf, # VK_OEM_8 + #'': 0xe7, # VK_PACKET + #'': 0xf6, # VK_ATTN + #'': 0xf7, # VK_CRSEL + #'': 0xf8, # VK_EXSEL + #'': 0xf9, # VK_EREOF + #'': 0xfa, # VK_PLAY + #'': 0xfb, # VK_ZOOM + #'': 0xfc, # VK_NONAME + #'': 0xfd, # VK_PA1 + #'': 0xfe, # VK_OEM_CLEAR +}) + +# Populate the basic printable ascii characters. +for c in range(32, 128): + keyboardMapping[chr(c)] = ctypes.windll.user32.VkKeyScanA(ctypes.wintypes.WCHAR(chr(c))) + + +def _keyDown(key): + """Performs a keyboard key press without the release. This will put that + key in a held down state. + + NOTE: For some reason, this does not seem to cause key repeats like would + happen if a keyboard key was held down on a text field. + + Args: + key (str): The key to be pressed down. The valid names are listed in + pyautogui.KEY_NAMES. + + Returns: + None + """ + if key not in keyboardMapping or keyboardMapping[key] is None: + return + + needsShift = pyautogui.isShiftCharacter(key) + + """ + # OLD CODE: The new code relies on having all keys be loaded in keyboardMapping from the start. + if key in keyboardMapping.keys(): + vkCode = keyboardMapping[key] + elif len(key) == 1: + # note: I could use this case to update keyboardMapping to cache the VkKeyScan results, but I've decided not to just to make any possible bugs easier to reproduce. + vkCode = ctypes.windll.user32.VkKeyScanW(ctypes.wintypes.WCHAR(key)) + if vkCode == -1: + raise ValueError('There is no VK code for key "%s"' % (key)) + if vkCode > 0x100: # the vk code will be > 0x100 if it needs shift + vkCode -= 0x100 + needsShift = True + """ + mods, vkCode = divmod(keyboardMapping[key], 0x100) + + for apply_mod, vk_mod in [(mods & 4, 0x12), (mods & 2, 0x11), + (mods & 1 or needsShift, 0x10)]: #HANKAKU not suported! mods & 8 + if apply_mod: + ctypes.windll.user32.keybd_event(vk_mod, 0, 0, 0) # + ctypes.windll.user32.keybd_event(vkCode, 0, 0, 0) + for apply_mod, vk_mod in [(mods & 1 or needsShift, 0x10), (mods & 2, 0x11), + (mods & 4, 0x12)]: #HANKAKU not suported! mods & 8 + if apply_mod: + ctypes.windll.user32.keybd_event(vk_mod, 0, KEYEVENTF_KEYUP, 0) # + + +def _keyUp(key): + """Performs a keyboard key release (without the press down beforehand). + + Args: + key (str): The key to be released up. The valid names are listed in + pyautogui.KEY_NAMES. + + Returns: + None + """ + if key not in keyboardMapping or keyboardMapping[key] is None: + return + + needsShift = pyautogui.isShiftCharacter(key) + """ + # OLD CODE: The new code relies on having all keys be loaded in keyboardMapping from the start. + if key in keyboardMapping.keys(): + vkCode = keyboardMapping[key] + elif len(key) == 1: + # note: I could use this case to update keyboardMapping to cache the VkKeyScan results, but I've decided not to just to make any possible bugs easier to reproduce. + vkCode = ctypes.windll.user32.VkKeyScanW(ctypes.wintypes.WCHAR(key)) + if vkCode == -1: + raise ValueError('There is no VK code for key "%s"' % (key)) + if vkCode > 0x100: # the vk code will be > 0x100 if it needs shift + vkCode -= 0x100 + needsShift = True + """ + mods, vkCode = divmod(keyboardMapping[key], 0x100) + + for apply_mod, vk_mod in [(mods & 4, 0x12), (mods & 2, 0x11), + (mods & 1 or needsShift, 0x10)]: #HANKAKU not suported! mods & 8 + if apply_mod: + ctypes.windll.user32.keybd_event(vk_mod, 0, 0, 0) # + ctypes.windll.user32.keybd_event(vkCode, 0, KEYEVENTF_KEYUP, 0) + for apply_mod, vk_mod in [(mods & 1 or needsShift, 0x10), (mods & 2, 0x11), + (mods & 4, 0x12)]: #HANKAKU not suported! mods & 8 + if apply_mod: + ctypes.windll.user32.keybd_event(vk_mod, 0, KEYEVENTF_KEYUP, 0) # + + +def _position(): + """Returns the current xy coordinates of the mouse cursor as a two-integer + tuple by calling the GetCursorPos() win32 function. + + Returns: + (x, y) tuple of the current xy coordinates of the mouse cursor. + """ + + cursor = POINT() + ctypes.windll.user32.GetCursorPos(ctypes.byref(cursor)) + return (cursor.x, cursor.y) + + +def _size(): + """Returns the width and height of the screen as a two-integer tuple. + + Returns: + (width, height) tuple of the screen size, in pixels. + """ + return (ctypes.windll.user32.GetSystemMetrics(0), ctypes.windll.user32.GetSystemMetrics(1)) + + +def _moveTo(x, y): + """Send the mouse move event to Windows by calling SetCursorPos() win32 + function. + + Args: + button (str): The mouse button, either 'left', 'middle', or 'right' + x (int): The x position of the mouse event. + y (int): The y position of the mouse event. + + Returns: + None + """ + ctypes.windll.user32.SetCursorPos(x, y) + + +def _mouseDown(x, y, button): + """Send the mouse down event to Windows by calling the mouse_event() win32 + function. + + Args: + x (int): The x position of the mouse event. + y (int): The y position of the mouse event. + button (str): The mouse button, either 'left', 'middle', or 'right' + + Returns: + None + """ + if button == 'left': + try: + _sendMouseEvent(MOUSEEVENTF_LEFTDOWN, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + elif button == 'middle': + try: + _sendMouseEvent(MOUSEEVENTF_MIDDLEDOWN, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + elif button == 'right': + try: + _sendMouseEvent(MOUSEEVENTF_RIGHTDOWN, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + else: + assert False, "button argument not in ('left', 'middle', 'right')" + + +def _mouseUp(x, y, button): + """Send the mouse up event to Windows by calling the mouse_event() win32 + function. + + Args: + x (int): The x position of the mouse event. + y (int): The y position of the mouse event. + button (str): The mouse button, either 'left', 'middle', or 'right' + + Returns: + None + """ + if button == 'left': + try: + _sendMouseEvent(MOUSEEVENTF_LEFTUP, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + elif button == 'middle': + try: + _sendMouseEvent(MOUSEEVENTF_MIDDLEUP, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + elif button == 'right': + try: + _sendMouseEvent(MOUSEEVENTF_RIGHTUP, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + else: + assert False, "button argument not in ('left', 'middle', 'right')" + + +def _click(x, y, button): + """Send the mouse click event to Windows by calling the mouse_event() win32 + function. + + Args: + button (str): The mouse button, either 'left', 'middle', or 'right' + x (int): The x position of the mouse event. + y (int): The y position of the mouse event. + + Returns: + None + """ + if button == 'left': + try: + _sendMouseEvent(MOUSEEVENTF_LEFTCLICK, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + elif button == 'middle': + try: + _sendMouseEvent(MOUSEEVENTF_MIDDLECLICK, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + elif button == 'right': + try: + _sendMouseEvent(MOUSEEVENTF_RIGHTCLICK, x, y) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + else: + assert False, "button argument not in ('left', 'middle', 'right')" + + +def _sendMouseEvent(ev, x, y, dwData=0): + """The helper function that actually makes the call to the mouse_event() + win32 function. + + Args: + ev (int): The win32 code for the mouse event. Use one of the MOUSEEVENTF_* + constants for this argument. + x (int): The x position of the mouse event. + y (int): The y position of the mouse event. + dwData (int): The argument for mouse_event()'s dwData parameter. So far + this is only used by mouse scrolling. + + Returns: + None + """ + assert x != None and y != None, 'x and y cannot be set to None' + # TODO: ARG! For some reason, SendInput isn't working for mouse events. I'm switching to using the older mouse_event win32 function. + #mouseStruct = MOUSEINPUT() + #mouseStruct.dx = x + #mouseStruct.dy = y + #mouseStruct.mouseData = ev + #mouseStruct.time = 0 + #mouseStruct.dwExtraInfo = ctypes.pointer(ctypes.c_ulong(0)) # according to https://stackoverflow.com/questions/13564851/generate-keyboard-events I can just set this. I don't really care about this value. + #inputStruct = INPUT() + #inputStruct.mi = mouseStruct + #inputStruct.type = INPUT_MOUSE + #ctypes.windll.user32.SendInput(1, ctypes.pointer(inputStruct), ctypes.sizeof(inputStruct)) + + width, height = _size() + convertedX = 65536 * x // width + 1 + convertedY = 65536 * y // height + 1 + ctypes.windll.user32.mouse_event(ev, ctypes.c_long(convertedX), ctypes.c_long(convertedY), dwData, 0) + + # TODO: Too many false positives with this code: See: https://github.com/asweigart/pyautogui/issues/108 + #if ctypes.windll.kernel32.GetLastError() != 0: + # raise ctypes.WinError() + + +def _scroll(clicks, x=None, y=None): + """Send the mouse vertical scroll event to Windows by calling the + mouse_event() win32 function. + + Args: + clicks (int): The amount of scrolling to do. A positive value is the mouse + wheel moving forward (scrolling up), a negative value is backwards (down). + x (int): The x position of the mouse event. + y (int): The y position of the mouse event. + + Returns: + None + """ + startx, starty = _position() + width, height = _size() + + if x is None: + x = startx + else: + if x < 0: + x = 0 + elif x >= width: + x = width - 1 + if y is None: + y = starty + else: + if y < 0: + y = 0 + elif y >= height: + y = height - 1 + + try: + _sendMouseEvent(MOUSEEVENTF_WHEEL, x, y, dwData=clicks) + except (PermissionError, OSError): # TODO: We need to figure out how to prevent these errors, see https://github.com/asweigart/pyautogui/issues/60 + pass + + +def _hscroll(clicks, x, y): + """Send the mouse horizontal scroll event to Windows by calling the + mouse_event() win32 function. + + Args: + clicks (int): The amount of scrolling to do. A positive value is the mouse + wheel moving right, a negative value is moving left. + x (int): The x position of the mouse event. + y (int): The y position of the mouse event. + + Returns: + None + """ + return _scroll(clicks, x, y) + + +def _vscroll(clicks, x, y): + """A wrapper for _scroll(), which does vertical scrolling. + + Args: + clicks (int): The amount of scrolling to do. A positive value is the mouse + wheel moving forward (scrolling up), a negative value is backwards (down). + x (int): The x position of the mouse event. + y (int): The y position of the mouse event. + + Returns: + None + """ + return _scroll(clicks, x, y) + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_x11.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_x11.py new file mode 100644 index 00000000..1256f5fe --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_pyautogui_x11.py @@ -0,0 +1,298 @@ +# NOTE - It is a known issue that the keyboard-related functions don't work on Ubuntu VMs in Virtualbox. + +import pyautogui +import sys +import os + +from Xlib.display import Display +from Xlib import X +from Xlib.ext.xtest import fake_input +import Xlib.XK + +BUTTON_NAME_MAPPING = {'left': 1, 'middle': 2, 'right': 3, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7} + + +if sys.platform in ('java', 'darwin', 'win32'): + raise Exception('The pyautogui_x11 module should only be loaded on a Unix system that supports X11.') + +#from pyautogui import * + +""" +Much of this code is based on information gleaned from Paul Barton's PyKeyboard in PyUserInput from 2013, itself derived from Akkana Peck's pykey in 2008 ( http://www.shallowsky.com/software/crikey/pykey-0.1 ), itself derived from her "Crikey" lib. +""" + +def _position(): + """Returns the current xy coordinates of the mouse cursor as a two-integer + tuple. + + Returns: + (x, y) tuple of the current xy coordinates of the mouse cursor. + """ + coord = _display.screen().root.query_pointer()._data + return coord["root_x"], coord["root_y"] + + +def _size(): + return _display.screen().width_in_pixels, _display.screen().height_in_pixels + + + +def _vscroll(clicks, x=None, y=None): + clicks = int(clicks) + if clicks == 0: + return + elif clicks > 0: + button = 4 # scroll up + else: + button = 5 # scroll down + + for i in range(abs(clicks)): + _click(x, y, button=button) + + +def _hscroll(clicks, x=None, y=None): + clicks = int(clicks) + if clicks == 0: + return + elif clicks > 0: + button = 7 # scroll right + else: + button = 6 # scroll left + + for i in range(abs(clicks)): + _click(x, y, button=button) + + +def _scroll(clicks, x=None, y=None): + return _vscroll(clicks, x, y) + + +def _click(x, y, button): + assert button in BUTTON_NAME_MAPPING.keys(), "button argument not in ('left', 'middle', 'right', 4, 5, 6, 7)" + button = BUTTON_NAME_MAPPING[button] + + _mouseDown(x, y, button) + _mouseUp(x, y, button) + + +def _moveTo(x, y): + fake_input(_display, X.MotionNotify, x=x, y=y) + _display.sync() + + +def _mouseDown(x, y, button): + _moveTo(x, y) + assert button in BUTTON_NAME_MAPPING.keys(), "button argument not in ('left', 'middle', 'right', 4, 5, 6, 7)" + button = BUTTON_NAME_MAPPING[button] + fake_input(_display, X.ButtonPress, button) + _display.sync() + + +def _mouseUp(x, y, button): + _moveTo(x, y) + assert button in BUTTON_NAME_MAPPING.keys(), "button argument not in ('left', 'middle', 'right', 4, 5, 6, 7)" + button = BUTTON_NAME_MAPPING[button] + fake_input(_display, X.ButtonRelease, button) + _display.sync() + + +def _keyDown(key): + """Performs a keyboard key press without the release. This will put that + key in a held down state. + + NOTE: For some reason, this does not seem to cause key repeats like would + happen if a keyboard key was held down on a text field. + + Args: + key (str): The key to be pressed down. The valid names are listed in + pyautogui.KEY_NAMES. + + Returns: + None + """ + if key not in keyboardMapping or keyboardMapping[key] is None: + return + + if type(key) == int: + fake_input(_display, X.KeyPress, key) + _display.sync() + return + + needsShift = pyautogui.isShiftCharacter(key) + if needsShift: + fake_input(_display, X.KeyPress, keyboardMapping['shift']) + + fake_input(_display, X.KeyPress, keyboardMapping[key]) + + if needsShift: + fake_input(_display, X.KeyRelease, keyboardMapping['shift']) + _display.sync() + + +def _keyUp(key): + """Performs a keyboard key release (without the press down beforehand). + + Args: + key (str): The key to be released up. The valid names are listed in + pyautogui.KEY_NAMES. + + Returns: + None + """ + + """ + Release a given character key. Also works with character keycodes as + integers, but not keysyms. + """ + if key not in keyboardMapping or keyboardMapping[key] is None: + return + + if type(key) == int: + keycode = key + else: + keycode = keyboardMapping[key] + + fake_input(_display, X.KeyRelease, keycode) + _display.sync() + + +# Taken from PyKeyboard's ctor function. +_display = Display(os.environ['DISPLAY']) + + +""" Information for keyboardMapping derived from PyKeyboard's special_key_assignment() function. + +The *KB dictionaries in pyautogui map a string that can be passed to keyDown(), +keyUp(), or press() into the code used for the OS-specific keyboard function. + +They should always be lowercase, and the same keys should be used across all OSes.""" +keyboardMapping = dict([(key, None) for key in pyautogui.KEY_NAMES]) +keyboardMapping.update({ + 'backspace': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('BackSpace')), + '\b': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('BackSpace')), + 'tab': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Tab')), + 'enter': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Return')), + 'return': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Return')), + 'shift': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Shift_L')), + 'ctrl': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Control_L')), + 'alt': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Alt_L')), + 'pause': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Pause')), + 'capslock': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Caps_Lock')), + 'esc': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Escape')), + 'escape': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Escape')), + 'pgup': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Page_Up')), + 'pgdn': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Page_Down')), + 'pageup': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Page_Up')), + 'pagedown': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Page_Down')), + 'end': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('End')), + 'home': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Home')), + 'left': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Left')), + 'up': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Up')), + 'right': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Right')), + 'down': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Down')), + 'select': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Select')), + 'print': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Print')), + 'execute': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Execute')), + 'prtsc': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Print')), + 'prtscr': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Print')), + 'prntscrn': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Print')), + 'printscreen': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Print')), + 'insert': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Insert')), + 'del': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Delete')), + 'delete': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Delete')), + 'help': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Help')), + 'winleft': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Super_L')), + 'winright': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Super_R')), + 'apps': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Super_L')), + 'num0': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_0')), + 'num1': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_1')), + 'num2': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_2')), + 'num3': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_3')), + 'num4': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_4')), + 'num5': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_5')), + 'num6': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_6')), + 'num7': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_7')), + 'num8': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_8')), + 'num9': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_9')), + 'multiply': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_Multiply')), + 'add': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_Add')), + 'separator': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_Separator')), + 'subtract': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_Subtract')), + 'decimal': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_Decimal')), + 'divide': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('KP_Divide')), + 'f1': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F1')), + 'f2': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F2')), + 'f3': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F3')), + 'f4': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F4')), + 'f5': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F5')), + 'f6': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F6')), + 'f7': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F7')), + 'f8': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F8')), + 'f9': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F9')), + 'f10': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F10')), + 'f11': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F11')), + 'f12': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F12')), + 'f13': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F13')), + 'f14': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F14')), + 'f15': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F15')), + 'f16': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F16')), + 'f17': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F17')), + 'f18': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F18')), + 'f19': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F19')), + 'f20': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F20')), + 'f21': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F21')), + 'f22': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F22')), + 'f23': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F23')), + 'f24': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('F24')), + 'numlock': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Num_Lock')), + 'scrolllock': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Scroll_Lock')), + 'shiftleft': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Shift_L')), + 'shiftright': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Shift_R')), + 'ctrlleft': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Control_L')), + 'ctrlright': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Control_R')), + 'altleft': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Alt_L')), + 'altright': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Alt_R')), + # These are added because unlike a-zA-Z0-9, the single characters do not have a + ' ': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('space')), + 'space': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('space')), + '\t': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Tab')), + '\n': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Return')), # for some reason this needs to be cr, not lf + '\r': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Return')), + '\e': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('Escape')), + '!': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('exclam')), + '#': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('numbersign')), + '%': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('percent')), + '$': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('dollar')), + '&': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('ampersand')), + '"': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('quotedbl')), + "'": _display.keysym_to_keycode(Xlib.XK.string_to_keysym('apostrophe')), + '(': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('parenleft')), + ')': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('parenright')), + '*': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('asterisk')), + '=': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('equal')), + '+': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('plus')), + ',': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('comma')), + '-': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('minus')), + '.': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('period')), + '/': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('slash')), + ':': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('colon')), + ';': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('semicolon')), + '<': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('less')), + '>': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('greater')), + '?': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('question')), + '@': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('at')), + '[': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('bracketleft')), + ']': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('bracketright')), + '\\': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('backslash')), + '^': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('asciicircum')), + '_': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('underscore')), + '`': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('grave')), + '{': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('braceleft')), + '|': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('bar')), + '}': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('braceright')), + '~': _display.keysym_to_keycode(Xlib.XK.string_to_keysym('asciitilde')), +}) + +# Trading memory for time" populate winKB so we don't have to call VkKeyScanA each time. +for c in """abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890""": + keyboardMapping[c] = _display.keysym_to_keycode(Xlib.XK.string_to_keysym(c)) diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_window_win.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_window_win.py new file mode 100644 index 00000000..b68e4fe7 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/_window_win.py @@ -0,0 +1,117 @@ +# Window-handling features of PyAutoGUI for win_32 +import ctypes +import ctypes.wintypes + +import sys +if sys.platform != 'win32': + raise Exception('The _window_win module should only be loaded on a Windows system.') + +SetWindowPos = ctypes.windll.user32.SetWindowPos +# Flags for SetWindowPos: +SWP_NOMOVE = ctypes.c_uint(0x0002) +SWP_NOSIZE = ctypes.c_uint(0x0001) + +ShowWindow = ctypes.windll.user32.ShowWindow +# Flags for ShowWindow: +SW_MAXIMIZE = 3 +SW_MINIMIZE = 6 +SW_RESTORE = 9 + +SwitchToThisWindow = ctypes.windll.user32.SwitchToThisWindow +SetForegroundWindow = ctypes.windll.user32.SetForegroundWindow +CloseWindow = ctypes.windll.user32.CloseWindow +GetWindowRect = ctypes.windll.user32.GetWindowRect + +EnumWindows = ctypes.windll.user32.EnumWindows +EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)) +GetWindowText = ctypes.windll.user32.GetWindowTextW +GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW +IsWindowVisible = ctypes.windll.user32.IsWindowVisible + + +class _Rect(ctypes.Structure): + _fields_ = [('left', ctypes.c_long), + ('top', ctypes.c_long), + ('right', ctypes.c_long), + ('bottom', ctypes.c_long)] + + +class Window(object): + + def __init__(self, hwnd): + self._hwnd = hwnd # Window handle + + def set_position(self, x, y, width, height): + """Set window top-left corner position and size""" + SetWindowPos(self._hwnd, None, x, y, width, height, ctypes.c_uint(0)) + + def move(self, x, y): + """Move window top-left corner to position""" + SetWindowPos(self._hwnd, None, x, y, 0, 0, SWP_NOSIZE) + + def resize(self, width, height): + """Change window size""" + SetWindowPos(self._hwnd, None, 0, 0, width, height, SWP_NOMOVE) + + def maximize(self): + ShowWindow(self._hwnd, SW_MAXIMIZE) + + def set_foreground(self): + SetForegroundWindow(self._hwnd) + + def minimize(self): + ShowWindow(self._hwnd, SW_MINIMIZE) + + def restore(self): + ShowWindow(self._hwnd, SW_RESTORE) + + def close(self): + CloseWindow(self._hwnd) + + def get_position(self): + """Returns tuple of 4 numbers: (x, y)s of top-left and bottom-right corners""" + rect = _Rect() + GetWindowRect(self._hwnd, ctypes.pointer(rect)) + return rect.left, rect.top, rect.right, rect.bottom + + # def moveRel(self, x=0, y=0): # moves relative to the x, y of top-left corner of the window + # pass + # def clickRel(self, x=0, y=0, clicks=1, interval=0.0, button='left'): + # click relative to the x, y of top-left corner of the window + # pass + + +def getWindows(): #https://sjohannes.wordpress.com/2012/03/23/win32-python-getting-all-window-titles/ + """Return dict: {'window title' : window handle} for all visible windows""" + titles = {} + + def foreach_window(hwnd, lparam): + if IsWindowVisible(hwnd): + length = GetWindowTextLength(hwnd) + buff = ctypes.create_unicode_buffer(length + 1) + GetWindowText(hwnd, buff, length + 1) + titles[buff.value] = hwnd + return True + EnumWindows(EnumWindowsProc(foreach_window), 0) + + return titles + +def getWindow(title, exact=False): + """Return Window object if 'title' or its part found in visible windows titles, else return None + + Return only 1 window found first + Args: + title: unicode string + exact (bool): True if search only exact match + """ + titles = getWindows() + hwnd = titles.get(title, None) + if not hwnd and not exact: + for k, v in titles.items(): + if title in k: + hwnd = v + break + if hwnd: + return Window(hwnd) + else: + return None diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/screenshotUtil.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/screenshotUtil.py new file mode 100644 index 00000000..7e47bace --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/screenshotUtil.py @@ -0,0 +1,217 @@ +# Screenshot-related features of PyAutoGUI + +""" +So, apparently Pillow support on Ubuntu 64-bit has several additional steps since it doesn't have JPEG/PNG support out of the box. Description here: + +https://stackoverflow.com/questions/7648200/pip-install-pil-e-tickets-1-no-jpeg-png-support +http://ubuntuforums.org/showthread.php?t=1751455 +""" + +import datetime +import os +import subprocess +import sys +from PIL import Image +from PIL import ImageOps + +RUNNING_PYTHON_2 = sys.version_info[0] == 2 + +scrotExists = False +maimExists = False +try: + if sys.platform not in ('java', 'darwin', 'win32'): + whichProc = subprocess.Popen(['which', 'scrot'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + scrotExists = whichProc.wait() == 0 +except: + # if there is no "which" program to find scrot, then assume there is no scrot. + pass + +try: + if sys.platform not in ('java', 'darwin', 'win32'): + whichProc = subprocess.Popen(['which', 'maim'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + maimExists = whichProc.wait() == 0 +except: + # if there is no "which" program to find maim, then assume there is no maim. + pass + +def locateAll(needleImage, haystackImage, grayscale=False, limit=None): + needleFileObj = None + haystackFileObj = None + if isinstance(needleImage, str): + # 'image' is a filename, load the Image object + needleFileObj = open(needleImage, 'rb') + needleImage = Image.open(needleFileObj) + if isinstance(haystackImage, str): + # 'image' is a filename, load the Image object + haystackFileObj = open(haystackImage, 'rb') + haystackImage = Image.open(haystackFileObj) + + + if grayscale: + needleImage = ImageOps.grayscale(needleImage) + haystackImage = ImageOps.grayscale(haystackImage) + + needleWidth, needleHeight = needleImage.size + haystackWidth, haystackHeight = haystackImage.size + + needleImageData = tuple(needleImage.getdata()) # TODO - rename to needleImageData?? + haystackImageData = tuple(haystackImage.getdata()) + + needleImageRows = [needleImageData[y * needleWidth:(y+1) * needleWidth] for y in range(needleHeight)] # LEFT OFF - check this + needleImageFirstRow = needleImageRows[0] + + assert len(needleImageFirstRow) == needleWidth + assert [len(row) for row in needleImageRows] == [needleWidth] * needleHeight + + numMatchesFound = 0 + + for y in range(haystackHeight): + for matchx in _kmp(needleImageFirstRow, haystackImageData[y * haystackWidth:(y+1) * haystackWidth]): + foundMatch = True + for searchy in range(1, needleHeight): + haystackStart = (searchy + y) * haystackWidth + matchx + if needleImageData[searchy * needleWidth:(searchy+1) * needleWidth] != haystackImageData[haystackStart:haystackStart + needleWidth]: + foundMatch = False + break + if foundMatch: + # Match found, report the x, y, width, height of where the matching region is in haystack. + numMatchesFound += 1 + yield (matchx, y, needleWidth, needleHeight) + if limit is not None and numMatchesFound >= limit: + # Limit has been reached. Close file handles. + if needleFileObj is not None: + needleFileObj.close() + if haystackFileObj is not None: + haystackFileObj.close() + + + # There was no limit or the limit wasn't reached, but close the file handles anyway. + if needleFileObj is not None: + needleFileObj.close() + if haystackFileObj is not None: + haystackFileObj.close() + + +def locate(needleImage, haystackImage, grayscale=False): + # Note: The gymnastics in this function is because we want to make sure to exhaust the iterator so that the needle and haystack files are closed in locateAll. + points = tuple(locateAll(needleImage, haystackImage, grayscale, 1)) + if len(points) > 0: + return points[0] + else: + return None + + +def locateOnScreen(image, grayscale=False,region=None): + screenshotIm = screenshot(region=region) + retVal = locate(image, screenshotIm, grayscale) + if 'fp' in dir(screenshotIm) and screenshotIm.fp is not None: + screenshotIm.fp.close() # Screenshots on Windows won't have an fp since they came from ImageGrab, not a file. + return retVal + + +def locateAllOnScreen(image, grayscale=False, limit=None, region=None): + screenshotIm = screenshot(region=region) + retVal = locateAll(image, screenshotIm, grayscale, limit) + if 'fp' in dir(screenshotIm) and screenshotIm.fp is not None: + screenshotIm.fp.close() # Screenshots on Windows won't have an fp since they came from ImageGrab, not a file. + return retVal + + +def locateCenterOnScreen(image, grayscale=False, region=None): + return center(locateOnScreen(image, grayscale, region)) + + +def _screenshot_win32(imageFilename=None): + im = ImageGrab.grab() + if imageFilename is not None: + im.save(imageFilename) + return im + + +def _screenshot_osx(imageFilename=None): + if imageFilename is None: + tmpFilename = 'screenshot%s.png' % (datetime.datetime.now().strftime('%Y-%m%d_%H-%M-%S-%f')) + else: + tmpFilename = imageFilename + subprocess.call(['screencapture', '-x', tmpFilename]) + im = Image.open(tmpFilename) + if imageFilename is None: + os.unlink(tmpFilename) + return im + + +def _screenshot_linux(imageFilename=None, region=None): + if not scrotExists: + raise NotImplementedError('"scrot" must be installed to use screenshot functions in Linux. Run: sudo apt-get install scrot') + if imageFilename is None: + tmpFilename = '.screenshot%s.png' % (datetime.datetime.now().strftime('%Y-%m%d_%H-%M-%S-%f')) + else: + tmpFilename = imageFilename + if scrotExists: + if not region: + subprocess.call(['scrot', tmpFilename]) + else: + if not maimExists: + raise NotImplementedError('"maim" must be installed to use screenshot functions with region in Linux. Run: sudo apt-get install maim') + left,top,width,height = [str(x) for x in region] + subprocess.call(['maim','-x',left,'-y',top,'-w',width,'-h',height, tmpFilename]) + im = Image.open(tmpFilename) + if imageFilename is None: + os.unlink(tmpFilename) + return im + + else: + raise Exception('The scrot program must be installed to take a screenshot with PyAutoGUI on Linux. Run: sudo apt-get install scrot') + + + +def _kmp(needle, haystack): # Knuth-Morris-Pratt search algorithm implementation (to be used by screen capture) + # build table of shift amounts + shifts = [1] * (len(needle) + 1) + shift = 1 + for pos in range(len(needle)): + while shift <= pos and needle[pos] != needle[pos-shift]: + shift += shifts[pos-shift] + shifts[pos+1] = shift + + # do the actual search + startPos = 0 + matchLen = 0 + for c in haystack: + while matchLen == len(needle) or \ + matchLen >= 0 and needle[matchLen] != c: + startPos += shifts[matchLen] + matchLen -= shifts[matchLen] + matchLen += 1 + if matchLen == len(needle): + yield startPos + + +def center(coords): + return (coords[0] + int(coords[2] / 2), coords[1] + int(coords[3] / 2)) + + +def pixelMatchesColor(x, y, expectedRGBColor, tolerance=0): + r, g, b = screenshot().getpixel((x, y)) + exR, exG, exB = expectedRGBColor + + return (abs(r - exR) <= tolerance) and (abs(g - exG) <= tolerance) and (abs(b - exB) <= tolerance) + + +def pixel(x, y): + return screenshot().getpixel((x, y)) + + +# set the screenshot() function based on the platform running this module +if sys.platform.startswith('java'): + raise NotImplementedError('Jython is not yet supported by PyAutoGUI.') +elif sys.platform == 'darwin': + screenshot = _screenshot_osx +elif sys.platform == 'win32': + screenshot = _screenshot_win32 + from PIL import ImageGrab +else: + screenshot = _screenshot_linux + + +grab = screenshot # for compatibility with Pillow/PIL's ImageGrab module. diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/test1.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/test1.py new file mode 100644 index 00000000..a5d5c203 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/test1.py @@ -0,0 +1,9 @@ +@property +def foo(): + return _foo + +@foo.setter +def foo(value): + _foo = value + +_foo = 'foo' diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/tweens.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/tweens.py new file mode 100644 index 00000000..f884cf75 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyautogui/tweens.py @@ -0,0 +1,36 @@ +import pytweening + + +# This is just left here for backwards compatibility. I'll be deprecating this in favor of pyautogui.linear, pyautogui.easeInQuad, etc. +getPointOnLine = pytweening.getPointOnLine +linear = pytweening.linear +easeInQuad = pytweening.easeInQuad +easeOutQuad = pytweening.easeOutQuad +easeInOutQuad = pytweening.easeInOutQuad +easeInCubic = pytweening.easeInCubic +easeOutCubic = pytweening.easeOutCubic +easeInOutCubic = pytweening.easeInOutCubic +easeInQuart = pytweening.easeInQuart +easeOutQuart = pytweening.easeOutQuart +easeInOutQuart = pytweening.easeInOutQuart +easeInQuint = pytweening.easeInQuint +easeOutQuint = pytweening.easeOutQuint +easeInOutQuint = pytweening.easeInOutQuint +easeInSine = pytweening.easeInSine +easeOutSine = pytweening.easeOutSine +easeInOutSine = pytweening.easeInOutSine +easeInExpo = pytweening.easeInExpo +easeOutExpo = pytweening.easeOutExpo +easeInOutExpo = pytweening.easeInOutExpo +easeInCirc = pytweening.easeInCirc +easeOutCirc = pytweening.easeOutCirc +easeInOutCirc = pytweening.easeInOutCirc +easeInElastic = pytweening.easeInElastic +easeOutElastic = pytweening.easeOutElastic +easeInOutElastic = pytweening.easeInOutElastic +easeInBack = pytweening.easeInBack +easeOutBack = pytweening.easeOutBack +easeInOutBack = pytweening.easeInOutBack +easeInBounce = pytweening.easeInBounce +easeOutBounce = pytweening.easeOutBounce +easeInOutBounce = pytweening.easeInOutBounce diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/__init__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/__init__.py new file mode 100644 index 00000000..376a48c2 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/__init__.py @@ -0,0 +1,50 @@ +# PyGetWindow +# A cross-platform module to find information about the windows on the screen. + +""" + +# Work in progress + +# Useful info: +#https://stackoverflow.com/questions/373020/finding-the-current-active-window-in-mac-os-x-using-python +#https://stackoverflow.com/questions/7142342/get-window-position-size-with-python + + +win32 api and ctypes on Windows +cocoa api and pyobjc on Mac +Xlib on linux + + +Possible Future Features: +get/click menu (win32: GetMenuItemCount, GetMenuItemInfo, GetMenuItemID, GetMenu, GetMenuItemRect) +""" + +__version__ = '0.0.5' + +import sys +import collections + + +class PyGetWindowException(Exception): + pass + + +def pointInRect(x, y, left, top, width, height): + return left < x < left + width and top < y < top + height + + +if sys.platform == 'darwin': + raise NotImplementedError('PyGetWindow currently does not support macOS. If you have Appkit/Cocoa knowledge, please contribute! https://github.com/asweigart/pygetwindow') # TODO - implement mac +elif sys.platform == 'win32': + from ._pygetwindow_win import Win32Window, getActiveWindow, getWindowsAt, getWindowsWithTitle, getAllWindows, getAllTitles + Window = Win32Window +else: + raise NotImplementedError('PyGetWindow currently does not support Linux. If you have Xlib knowledge, please contribute! https://github.com/asweigart/pygetwindow') + + +# NOTE: `Rect` is a named tuple for use in Python, while structs.RECT represents +# the win32 RECT struct. PyRect's Rect class is used for handling changing +# geometry of rectangular areas. +Rect = collections.namedtuple('Rect', 'left top right bottom') +Point = collections.namedtuple('Point', 'x y') +Size = collections.namedtuple('Size', 'width height') \ No newline at end of file diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/_pygetwindow_macos.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/_pygetwindow_macos.py new file mode 100644 index 00000000..73e57a88 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/_pygetwindow_macos.py @@ -0,0 +1,388 @@ +import Quartz +import pygetwindow + + +def getAllTitles(): + """Returns a list of strings of window titles for all visible windows. + """ + + # Source: https://stackoverflow.com/questions/53237278/obtain-list-of-all-window-titles-on-macos-from-a-python-script/53985082#53985082 + windows = Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListExcludeDesktopElements | Quartz.kCGWindowListOptionOnScreenOnly, Quartz.kCGNullWindowID) + return ['%s %s' % (win[Quartz.kCGWindowOwnerName], win.get(Quartz.kCGWindowName, '')) for win in windows] + + +def getFocusedWindow(): + """Returns a Window object of the currently focused Window.""" + + # Source: https://stackoverflow.com/questions/5286274/front-most-window-using-cgwindowlistcopywindowinfo + windows = Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListExcludeDesktopElements | Quartz.kCGWindowListOptionOnScreenOnly, Quartz.kCGNullWindowID) + for win in windows: + if win['kCGWindowLayer'] == 0: + return '%s %s' % (win[Quartz.kCGWindowOwnerName], win.get(Quartz.kCGWindowName, '')) # Temporary. For now, we'll just return the title of the focused window. + raise Exception('Could not find a focused window.') # Temporary hack. + + +def getWindowsAt(x, y): + windows = Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListExcludeDesktopElements | Quartz.kCGWindowListOptionOnScreenOnly, Quartz.kCGNullWindowID) + matches = [] + for win in windows: + w = win['kCGWindowBounds'] + if pygetwindow.pointInRect(x, y, w['X'], w['Y'], w['Width'], w['Height']): + matches.append('%s %s' % (win[Quartz.kCGWindowOwnerName], win.get(Quartz.kCGWindowName, ''))) + return matches + + + +def focusWindow(): + # TEMP - this is not a real api, I'm just using this name to store these notes for now. + + # Source: https://stackoverflow.com/questions/7460092/nswindow-makekeyandorderfront-makes-window-appear-but-not-key-or-front?rq=1 + # Source: https://stackoverflow.com/questions/4905024/is-it-possible-to-bring-window-to-front-without-taking-focus?rq=1 + pass + + +def getWindowGeometry(title): + # TEMP - this is not a real api, I'm just using this name to stoe these notes for now. + windows = Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListExcludeDesktopElements | Quartz.kCGWindowListOptionOnScreenOnly, Quartz.kCGNullWindowID) + for win in windows: + if title in '%s %s' % (win[Quartz.kCGWindowOwnerName], win.get(Quartz.kCGWindowName, '')): + w = win['kCGWindowBounds'] + return (w['X'], w['Y'], w['Width'], w['Height']) + + +def isVisible(title): + # TEMP - this is not a real api, I'm just using this name to stoe these notes for now. + windows = Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListExcludeDesktopElements | Quartz.kCGWindowListOptionOnScreenOnly, Quartz.kCGNullWindowID) + for win in windows: + if title in '%s %s' % (win[Quartz.kCGWindowOwnerName], win.get(Quartz.kCGWindowName, '')): + return win['kCGWindowAlpha'] != 0.0 + +def isMinimized(): + # TEMP - this is not a real api, I'm just using this name to stoe these notes for now. + # Source: https://stackoverflow.com/questions/10258676/how-to-know-whether-a-window-is-minimised-or-not + # Use the kCGWindowIsOnscreen to check this. Minimized windows are considered to not be on the screen. (But I'm not sure if there are other situations where a window is "off screen".) + + # I'm not sure how kCGWindowListOptionOnScreenOnly interferes with this. + pass + +# TODO: This class doesn't work yet. I've copied the Win32Window class and will make adjustments as needed here. + +class MacOSWindow(): + def __init__(self, hWnd): + self._hWnd = hWnd # TODO fix this, this is a LP_c_long insead of an int. + + def _onRead(attrName): + r = _getWindowRect(self._hWnd) + self._rect._left = r.left # Setting _left directly to skip the onRead. + self._rect._top = r.top # Setting _top directly to skip the onRead. + self._rect._width = r.right - r.left # Setting _width directly to skip the onRead. + self._rect._height = r.bottom - r.top # Setting _height directly to skip the onRead. + + def _onChange(oldBox, newBox): + self.moveTo(newBox.left, newBox.top) + self.resizeTo(newBox.width, newBox.height) + + r = _getWindowRect(self._hWnd) + self._rect = pyrect.Rect(r.left, r.top, r.right - r.left, r.bottom - r.top, onChange=_onChange, onRead=_onRead) + + def __str__(self): + r = _getWindowRect(self._hWnd) + width = r.right - r.left + height = r.bottom - r.top + return '<%s left="%s", top="%s", width="%s", height="%s", title="%s">' % (self.__class__.__name__, r.left, r.top, width, height, self.title) + + + def __repr__(self): + return '%s(hWnd=%s)' % (self.__class__.__name__, self._hWnd) + + + def __eq__(self, other): + return isinstance(other, Win32Window) and self._hWnd == other._hWnd + + + def close(self): + """Closes this window. This may trigger "Are you sure you want to + quit?" dialogs or other actions that prevent the window from + actually closing. This is identical to clicking the X button on the + window.""" + result = ctypes.windll.user32.PostMessageA(self._hWnd, WM_CLOSE, 0, 0) + if result == 0: + _raiseWithLastError() + + + def minimize(self): + """Minimizes this window.""" + ctypes.windll.user32.ShowWindow(self._hWnd, SW_MINIMIZE) + + + def maximize(self): + """Maximizes this window.""" + ctypes.windll.user32.ShowWindow(self._hWnd, SW_MAXIMIZE) + + + def restore(self): + """If maximized or minimized, restores the window to it's normal size.""" + ctypes.windll.user32.ShowWindow(self._hWnd, SW_RESTORE) + + + def focus(self): + """Focus this window and make it the foreground window.""" + result = ctypes.windll.user32.SetForegroundWindow(self._hWnd) + if result == 0: + _raiseWithLastError() + + + def resizeRel(self, widthOffset, heightOffset): + """Resizes the window relative to its current size.""" + result = ctypes.windll.user32.SetWindowPos(self._hWnd, HWND_TOP, self.left, self.top, self.width + widthOffset, self.height + heightOffset, 0) + if result == 0: + _raiseWithLastError() + + + def resizeTo(self, newWidth, newHeight): + """Resizes the window to a new width and height.""" + result = ctypes.windll.user32.SetWindowPos(self._hWnd, HWND_TOP, self.left, self.top, newWidth, newHeight, 0) + if result == 0: + _raiseWithLastError() + + + def moveRel(self, xOffset, yOffset): + """Moves the window relative to its current position.""" + result = ctypes.windll.user32.SetWindowPos(self._hWnd, HWND_TOP, self.left + xOffset, self.top + yOffset, self.width, self.height, 0) + if result == 0: + _raiseWithLastError() + + + def moveTo(self, newLeft, newTop): + """Moves the window to new coordinates on the screen.""" + result = ctypes.windll.user32.SetWindowPos(self._hWnd, HWND_TOP, newLeft, newTop, self.width, self.height, 0) + if result == 0: + _raiseWithLastError() + + + @property + def isMinimized(self): + """Returns True if the window is currently minimized.""" + return ctypes.windll.user32.IsIconic(self._hWnd) != 0 + + @property + def isMaximized(self): + """Returns True if the window is currently maximized.""" + return ctypes.windll.user32.IsZoomed(self._hWnd) != 0 + + @property + def isFocused(self): + """Returns True if the window is currently the focused, foreground window.""" + return getFocusedWindow() == self + + @property + def title(self): + """Returns the window title as a string.""" + return _getWindowText(self._hWnd) + + @property + def visible(self): + return isWindowVisible(self._hWnd) + + + + # Wrappers for pyrect.Rect object's properties. + @property + def left(self): + return self._rect.left + + @left.setter + def left(self, value): + #import pdb; pdb.set_trace() + self._rect.left # Run rect's onRead to update the Rect object. + self._rect.left = value + + + @property + def right(self): + return self._rect.right + + @right.setter + def right(self, value): + self._rect.right # Run rect's onRead to update the Rect object. + self._rect.right = value + + + @property + def top(self): + return self._rect.top + + @top.setter + def top(self, value): + self._rect.top # Run rect's onRead to update the Rect object. + self._rect.top = value + + + @property + def bottom(self): + return self._rect.bottom + + @bottom.setter + def bottom(self, value): + self._rect.bottom # Run rect's onRead to update the Rect object. + self._rect.bottom = value + + + @property + def topleft(self): + return self._rect.topleft + + @topleft.setter + def topleft(self, value): + self._rect.topleft # Run rect's onRead to update the Rect object. + self._rect.topleft = value + + + @property + def topright(self): + return self._rect.topright + + @topright.setter + def topright(self, value): + self._rect.topright # Run rect's onRead to update the Rect object. + self._rect.topright = value + + + @property + def bottomleft(self): + return self._rect.bottomleft + + @bottomleft.setter + def bottomleft(self, value): + self._rect.bottomleft # Run rect's onRead to update the Rect object. + self._rect.bottomleft = value + + + @property + def bottomright(self): + return self._rect.bottomright + + @bottomright.setter + def bottomright(self, value): + self._rect.bottomright # Run rect's onRead to update the Rect object. + self._rect.bottomright = value + + + @property + def midleft(self): + return self._rect.midleft + + @midleft.setter + def midleft(self, value): + self._rect.midleft # Run rect's onRead to update the Rect object. + self._rect.midleft = value + + + @property + def midright(self): + return self._rect.midright + + @midright.setter + def midright(self, value): + self._rect.midright # Run rect's onRead to update the Rect object. + self._rect.midright = value + + + @property + def midtop(self): + return self._rect.midtop + + @midtop.setter + def midtop(self, value): + self._rect.midtop # Run rect's onRead to update the Rect object. + self._rect.midtop = value + + + @property + def midbottom(self): + return self._rect.midbottom + + @midbottom.setter + def midbottom(self, value): + self._rect.midbottom # Run rect's onRead to update the Rect object. + self._rect.midbottom = value + + + @property + def center(self): + return self._rect.center + + @center.setter + def center(self, value): + self._rect.center # Run rect's onRead to update the Rect object. + self._rect.center = value + + + @property + def centerx(self): + return self._rect.centerx + + @centerx.setter + def centerx(self, value): + self._rect.centerx # Run rect's onRead to update the Rect object. + self._rect.centerx = value + + + @property + def centery(self): + return self._rect.centery + + @centery.setter + def centery(self, value): + self._rect.centery # Run rect's onRead to update the Rect object. + self._rect.centery = value + + + @property + def width(self): + return self._rect.width + + @width.setter + def width(self, value): + self._rect.width # Run rect's onRead to update the Rect object. + self._rect.width = value + + + @property + def height(self): + return self._rect.height + + @height.setter + def height(self, value): + self._rect.height # Run rect's onRead to update the Rect object. + self._rect.height = value + + + @property + def size(self): + return self._rect.size + + @size.setter + def size(self, value): + self._rect.size # Run rect's onRead to update the Rect object. + self._rect.size = value + + + @property + def area(self): + return self._rect.area + + @area.setter + def area(self, value): + self._rect.area # Run rect's onRead to update the Rect object. + self._rect.area = value + + + @property + def box(self): + return self._rect.box + + @box.setter + def box(self, value): + self._rect.box # Run rect's onRead to update the Rect object. + self._rect.box = value \ No newline at end of file diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/_pygetwindow_win.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/_pygetwindow_win.py new file mode 100644 index 00000000..79ae902f --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/_pygetwindow_win.py @@ -0,0 +1,563 @@ +import ctypes +import pyrect +from ctypes import wintypes # We can't use ctypes.wintypes, we must import wintypes this way. + +import pygetwindow + +NULL = 0 # Used to match the Win32 API value of "null". + +# These FORMAT_MESSAGE_ constants are used for FormatMesage() and are +# documented at https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-formatmessage#parameters +FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100 +FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 +FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200 + +# These SW_ constants are used for ShowWindow() and are documented at +# https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-showwindow#parameters +SW_MINIMIZE = 6 +SW_MAXIMIZE = 3 +SW_RESTORE = 9 + +# SetWindowPos constants: +HWND_TOP = 0 + +# Window Message constants: +WM_CLOSE = 0x0010 + +# This ctypes structure is for a Win32 POINT structure, +# which is documented here: http://msdn.microsoft.com/en-us/library/windows/desktop/dd162805(v=vs.85).aspx +# The POINT structure is used by GetCursorPos(). +class POINT(ctypes.Structure): + _fields_ = [("x", ctypes.c_long), + ("y", ctypes.c_long)] + +enumWindows = ctypes.windll.user32.EnumWindows +enumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.c_int, ctypes.POINTER(ctypes.c_int)) +getWindowText = ctypes.windll.user32.GetWindowTextW +getWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW +isWindowVisible = ctypes.windll.user32.IsWindowVisible + + +class RECT(ctypes.Structure): + """A nice wrapper of the RECT structure. + + Microsoft Documentation: + https://msdn.microsoft.com/en-us/library/windows/desktop/dd162897(v=vs.85).aspx + """ + _fields_ = [('left', ctypes.c_long), + ('top', ctypes.c_long), + ('right', ctypes.c_long), + ('bottom', ctypes.c_long)] + + +def _getAllTitles(): + # This code taken from https://sjohannes.wordpress.com/2012/03/23/win32-python-getting-all-window-titles/ + # A correction to this code (for enumWindowsProc) is here: http://makble.com/the-story-of-lpclong + titles = [] + def foreach_window(hWnd, lParam): + if isWindowVisible(hWnd): + length = getWindowTextLength(hWnd) + buff = ctypes.create_unicode_buffer(length + 1) + getWindowText(hWnd, buff, length + 1) + titles.append((hWnd, buff.value)) + return True + enumWindows(enumWindowsProc(foreach_window), 0) + + return titles + + +def _formatMessage(errorCode): + """A nice wrapper for FormatMessageW(). TODO + + Microsoft Documentation: + https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-formatmessagew + + Additional information: + https://stackoverflow.com/questions/18905702/python-ctypes-and-mutable-buffers + https://stackoverflow.com/questions/455434/how-should-i-use-formatmessage-properly-in-c + """ + lpBuffer = wintypes.LPWSTR() + + ctypes.windll.kernel32.FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + errorCode, + 0, # dwLanguageId + ctypes.cast(ctypes.byref(lpBuffer), wintypes.LPWSTR), + 0, # nSize + NULL) + msg = lpBuffer.value.rstrip() + ctypes.windll.kernel32.LocalFree(lpBuffer) # Free the memory allocated for the error message's buffer. + return msg + + +def _raiseWithLastError(): + """A helper function that raises PyGetWindowException using the error + information from GetLastError() and FormatMessage().""" + errorCode = ctypes.windll.kernel32.GetLastError() + raise pygetwindow.PyGetWindowException('Error code from Windows: %s - %s' % (errorCode, _formatMessage(errorCode))) + + +def _getWindowRect(hWnd): + """A nice wrapper for GetWindowRect(). TODO + + Syntax: + BOOL GetWindowRect( + HWND hWnd, + LPRECT lpRect + ); + + Microsoft Documentation: + https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getwindowrect + """ + rect = RECT() + result = ctypes.windll.user32.GetWindowRect(hWnd, ctypes.byref(rect)) + if result != 0: + return pygetwindow.Rect(rect.left, rect.top, rect.right, rect.bottom) + else: + _raiseWithLastError() + + +def _getWindowText(hWnd): + """A wrapper for the GetWindowTextW() win api. TODO + + Syntax: + int GetWindowTextW( + HWND hWnd, + LPWSTR lpString, + int nMaxCount + ); + + int GetWindowTextLengthW( + HWND hWnd + ); + + Microsoft Documentation: + https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getwindowtextw + https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getwindowtextlengthw + """ + textLenInCharacters = ctypes.windll.user32.GetWindowTextLengthW(hWnd) + stringBuffer = ctypes.create_unicode_buffer(textLenInCharacters + 1) # +1 for the \0 at the end of the null-terminated string. + ctypes.windll.user32.GetWindowTextW(hWnd, stringBuffer, textLenInCharacters + 1) + + # TODO it's ambiguous if an error happened or the title text is just empty. Look into this later. + return stringBuffer.value + + +def getActiveWindow(): + """Returns a Window object of the currently active Window.""" + hWnd = ctypes.windll.user32.GetForegroundWindow() + if hWnd == 0: + # TODO - raise error instead + return None # Note that this function doesn't use GetLastError(). + else: + return Win32Window(hWnd) + + +def getWindowsAt(x, y): + """Returns a list of Window objects + + Args: + x (int, optional): The x position of the window(s). + y (int, optional): The y position of the window(s).""" + windowsAtXY = [] + for window in getAllWindows(): + if pygetwindow.pointInRect(x, y, window.left, window.top, window.width, window.height): + windowsAtXY.append(window) + return windowsAtXY + + +def getWindowsWithTitle(title): + """Returns a list of Window objects that substring match the title. + """ + hWndsAndTitles = _getAllTitles() + windowObjs = [] + for hWnd, winTitle in hWndsAndTitles: + if title.upper() in winTitle.upper(): # do a case-insensitive match + windowObjs.append(Win32Window(hWnd)) + return windowObjs + + +def getAllTitles(): + """Returns a list of strings of window titles for all visible windows. + """ + return [window.title for window in getAllWindows()] + + +def getAllWindows(): + """Returns a list of Window objects for all visible windows. + """ + windowObjs = [] + def foreach_window(hWnd, lParam): + if ctypes.windll.user32.IsWindowVisible(hWnd) != 0: + windowObjs.append(Win32Window(hWnd)) + return True + enumWindows(enumWindowsProc(foreach_window), 0) + + return windowObjs + + +class Win32Window(): + def __init__(self, hWnd): + self._hWnd = hWnd # TODO fix this, this is a LP_c_long insead of an int. + + def _onRead(attrName): + r = _getWindowRect(self._hWnd) + self._rect._left = r.left # Setting _left directly to skip the onRead. + self._rect._top = r.top # Setting _top directly to skip the onRead. + self._rect._width = r.right - r.left # Setting _width directly to skip the onRead. + self._rect._height = r.bottom - r.top # Setting _height directly to skip the onRead. + + def _onChange(oldBox, newBox): + self.moveTo(newBox.left, newBox.top) + self.resizeTo(newBox.width, newBox.height) + + r = _getWindowRect(self._hWnd) + self._rect = pyrect.Rect(r.left, r.top, r.right - r.left, r.bottom - r.top, onChange=_onChange, onRead=_onRead) + + def __str__(self): + r = _getWindowRect(self._hWnd) + width = r.right - r.left + height = r.bottom - r.top + return '<%s left="%s", top="%s", width="%s", height="%s", title="%s">' % (self.__class__.__name__, r.left, r.top, width, height, self.title) + + + def __repr__(self): + return '%s(hWnd=%s)' % (self.__class__.__name__, self._hWnd) + + + def __eq__(self, other): + return isinstance(other, Win32Window) and self._hWnd == other._hWnd + + + def close(self): + """Closes this window. This may trigger "Are you sure you want to + quit?" dialogs or other actions that prevent the window from + actually closing. This is identical to clicking the X button on the + window.""" + result = ctypes.windll.user32.PostMessageA(self._hWnd, WM_CLOSE, 0, 0) + if result == 0: + _raiseWithLastError() + + + def minimize(self): + """Minimizes this window.""" + ctypes.windll.user32.ShowWindow(self._hWnd, SW_MINIMIZE) + + + def maximize(self): + """Maximizes this window.""" + ctypes.windll.user32.ShowWindow(self._hWnd, SW_MAXIMIZE) + + + def restore(self): + """If maximized or minimized, restores the window to it's normal size.""" + ctypes.windll.user32.ShowWindow(self._hWnd, SW_RESTORE) + + + def activate(self): + """Activate this window and make it the foreground window.""" + result = ctypes.windll.user32.SetForegroundWindow(self._hWnd) + if result == 0: + _raiseWithLastError() + + + def resizeRel(self, widthOffset, heightOffset): + """Resizes the window relative to its current size.""" + result = ctypes.windll.user32.SetWindowPos(self._hWnd, HWND_TOP, self.left, self.top, self.width + widthOffset, self.height + heightOffset, 0) + if result == 0: + _raiseWithLastError() + + + def resizeTo(self, newWidth, newHeight): + """Resizes the window to a new width and height.""" + result = ctypes.windll.user32.SetWindowPos(self._hWnd, HWND_TOP, self.left, self.top, newWidth, newHeight, 0) + if result == 0: + _raiseWithLastError() + + + def moveRel(self, xOffset, yOffset): + """Moves the window relative to its current position.""" + result = ctypes.windll.user32.SetWindowPos(self._hWnd, HWND_TOP, self.left + xOffset, self.top + yOffset, self.width, self.height, 0) + if result == 0: + _raiseWithLastError() + + + def moveTo(self, newLeft, newTop): + """Moves the window to new coordinates on the screen.""" + result = ctypes.windll.user32.SetWindowPos(self._hWnd, HWND_TOP, newLeft, newTop, self.width, self.height, 0) + if result == 0: + _raiseWithLastError() + + + @property + def isMinimized(self): + """Returns True if the window is currently minimized.""" + return ctypes.windll.user32.IsIconic(self._hWnd) != 0 + + @property + def isMaximized(self): + """Returns True if the window is currently maximized.""" + return ctypes.windll.user32.IsZoomed(self._hWnd) != 0 + + @property + def isActive(self): + """Returns True if the window is currently the active, foreground window.""" + return getActiveWindow() == self + + @property + def title(self): + """Returns the window title as a string.""" + return _getWindowText(self._hWnd) + + @property + def visible(self): + return isWindowVisible(self._hWnd) + + + + # Wrappers for pyrect.Rect object's properties. + @property + def left(self): + return self._rect.left + + @left.setter + def left(self, value): + #import pdb; pdb.set_trace() + self._rect.left # Run rect's onRead to update the Rect object. + self._rect.left = value + + + @property + def right(self): + return self._rect.right + + @right.setter + def right(self, value): + self._rect.right # Run rect's onRead to update the Rect object. + self._rect.right = value + + + @property + def top(self): + return self._rect.top + + @top.setter + def top(self, value): + self._rect.top # Run rect's onRead to update the Rect object. + self._rect.top = value + + + @property + def bottom(self): + return self._rect.bottom + + @bottom.setter + def bottom(self, value): + self._rect.bottom # Run rect's onRead to update the Rect object. + self._rect.bottom = value + + + @property + def topleft(self): + return self._rect.topleft + + @topleft.setter + def topleft(self, value): + self._rect.topleft # Run rect's onRead to update the Rect object. + self._rect.topleft = value + + + @property + def topright(self): + return self._rect.topright + + @topright.setter + def topright(self, value): + self._rect.topright # Run rect's onRead to update the Rect object. + self._rect.topright = value + + + @property + def bottomleft(self): + return self._rect.bottomleft + + @bottomleft.setter + def bottomleft(self, value): + self._rect.bottomleft # Run rect's onRead to update the Rect object. + self._rect.bottomleft = value + + + @property + def bottomright(self): + return self._rect.bottomright + + @bottomright.setter + def bottomright(self, value): + self._rect.bottomright # Run rect's onRead to update the Rect object. + self._rect.bottomright = value + + + @property + def midleft(self): + return self._rect.midleft + + @midleft.setter + def midleft(self, value): + self._rect.midleft # Run rect's onRead to update the Rect object. + self._rect.midleft = value + + + @property + def midright(self): + return self._rect.midright + + @midright.setter + def midright(self, value): + self._rect.midright # Run rect's onRead to update the Rect object. + self._rect.midright = value + + + @property + def midtop(self): + return self._rect.midtop + + @midtop.setter + def midtop(self, value): + self._rect.midtop # Run rect's onRead to update the Rect object. + self._rect.midtop = value + + + @property + def midbottom(self): + return self._rect.midbottom + + @midbottom.setter + def midbottom(self, value): + self._rect.midbottom # Run rect's onRead to update the Rect object. + self._rect.midbottom = value + + + @property + def center(self): + return self._rect.center + + @center.setter + def center(self, value): + self._rect.center # Run rect's onRead to update the Rect object. + self._rect.center = value + + + @property + def centerx(self): + return self._rect.centerx + + @centerx.setter + def centerx(self, value): + self._rect.centerx # Run rect's onRead to update the Rect object. + self._rect.centerx = value + + + @property + def centery(self): + return self._rect.centery + + @centery.setter + def centery(self, value): + self._rect.centery # Run rect's onRead to update the Rect object. + self._rect.centery = value + + + @property + def width(self): + return self._rect.width + + @width.setter + def width(self, value): + self._rect.width # Run rect's onRead to update the Rect object. + self._rect.width = value + + + @property + def height(self): + return self._rect.height + + @height.setter + def height(self, value): + self._rect.height # Run rect's onRead to update the Rect object. + self._rect.height = value + + + @property + def size(self): + return self._rect.size + + @size.setter + def size(self, value): + self._rect.size # Run rect's onRead to update the Rect object. + self._rect.size = value + + + @property + def area(self): + return self._rect.area + + @area.setter + def area(self, value): + self._rect.area # Run rect's onRead to update the Rect object. + self._rect.area = value + + + @property + def box(self): + return self._rect.box + + @box.setter + def box(self, value): + self._rect.box # Run rect's onRead to update the Rect object. + self._rect.box = value + + +def cursor(): + """Returns the current xy coordinates of the mouse cursor as a two-integer + tuple by calling the GetCursorPos() win32 function. + + Returns: + (x, y) tuple of the current xy coordinates of the mouse cursor. + """ + + cursor = POINT() + ctypes.windll.user32.GetCursorPos(ctypes.byref(cursor)) + return pygetwindow.Point(x=cursor.x, y=cursor.y) + + +def resolution(): + """Returns the width and height of the screen as a two-integer tuple. + + Returns: + (width, height) tuple of the screen size, in pixels. + """ + return pygetwindow.Size(width=ctypes.windll.user32.GetSystemMetrics(0), height=ctypes.windll.user32.GetSystemMetrics(1)) + +''' +def displayWindowsUnderMouse(xOffset=0, yOffset=0): + """This function is meant to be run from the command line. It will + automatically display the location and RGB of the mouse cursor.""" + print('Press Ctrl-C to quit.') + if xOffset != 0 or yOffset != 0: + print('xOffset: %s yOffset: %s' % (xOffset, yOffset)) + resolution = size() + try: + while True: + # Get and print the mouse coordinates. + x, y = position() + positionStr = 'X: ' + str(x - xOffset).rjust(4) + ' Y: ' + str(y - yOffset).rjust(4) + + # TODO - display windows under the mouse + + sys.stdout.write(positionStr) + sys.stdout.write('\b' * len(positionStr)) + sys.stdout.flush() + except KeyboardInterrupt: + sys.stdout.write('\n') + sys.stdout.flush() +''' \ No newline at end of file diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/foo.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/foo.py new file mode 100644 index 00000000..f7e7da9e --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pygetwindow/foo.py @@ -0,0 +1 @@ +bar = 42 \ No newline at end of file diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/__init__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/__init__.py new file mode 100644 index 00000000..e11297eb --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/__init__.py @@ -0,0 +1,389 @@ +# PyMsgBox - A simple, cross-platform, pure Python module for JavaScript-like message boxes. +# Al Sweigart al@inventwithpython.com + +# Modified BSD License +# Derived from Stephen Raymond Ferg's EasyGui http://easygui.sourceforge.net/ + +""" +The four functions in PyMsgBox: + + - alert(text='', title='', button='OK') + + Displays a simple message box with text and a single OK button. Returns the text of the button clicked on. + + - confirm(text='', title='', buttons=['OK', 'Cancel']) + + Displays a message box with OK and Cancel buttons. Number and text of buttons can be customized. Returns the text of the button clicked on. + + - prompt(text='', title='' , default='') + + Displays a message box with text input, and OK & Cancel buttons. Returns the text entered, or None if Cancel was clicked. + + - password(text='', title='', default='', mask='*') + + Displays a message box with text input, and OK & Cancel buttons. Typed characters appear as *. Returns the text entered, or None if Cancel was clicked. +""" + +""" +TODO Roadmap: +- Be able to specify a custom icon in the message box. +- Be able to place the message box at an arbitrary position (including on multi screen layouts) +- Add mouse clicks to unit testing. +- progress() function to display a progress bar +- Maybe other types of dialog: open, save, file/folder picker, etc. +""" + +__version__ = '1.0.6' + +import sys +RUNNING_PYTHON_2 = sys.version_info[0] == 2 + +# Because PyAutoGUI requires PyMsgBox but might be installed on systems +# without tkinter, we don't want a lack of tkinter to cause installation +# to fail. So exceptions won't be raised until the PyMsgBox functions +# are actually called. +TKINTER_IMPORT_SUCCEEDED = True + +try: + if RUNNING_PYTHON_2: + import Tkinter as tk + else: + import tkinter as tk + + rootWindowPosition = '+300+200' + + if tk.TkVersion < 8.0 : + raise RuntimeError('You are running Tk version: ' + str(tk.TkVersion) + 'You must be using Tk version 8.0 or greater to use PyMsgBox.') + +except ImportError: + TKINTER_IMPORT_SUCCEEDED = False + + + +PROPORTIONAL_FONT_FAMILY = ('MS', 'Sans', 'Serif') +MONOSPACE_FONT_FAMILY = ('Courier') + +PROPORTIONAL_FONT_SIZE = 10 +MONOSPACE_FONT_SIZE = 9 #a little smaller, because it it more legible at a smaller size +TEXT_ENTRY_FONT_SIZE = 12 # a little larger makes it easier to see + + +STANDARD_SELECTION_EVENTS = ['Return', 'Button-1', 'space'] + +# constants for strings: (for internationalization, change these) +OK_TEXT = 'OK' +CANCEL_TEXT = 'Cancel' +TIMEOUT_TEXT = 'Timeout' + +# Initialize some global variables that will be reset later +__choiceboxMultipleSelect = None +__widgetTexts = None +__replyButtonText = None +__choiceboxResults = None +__firstWidget = None +__enterboxText = None +__enterboxDefaultText='' +__multenterboxText = '' +choiceboxChoices = None +choiceboxWidget = None +entryWidget = None +boxRoot = None +buttonsFrame = None + + + + + +def alert(text='', title='', button=OK_TEXT, root=None, timeout=None): + """Displays a simple message box with text and a single OK button. Returns the text of the button clicked on.""" + assert TKINTER_IMPORT_SUCCEEDED, 'Tkinter is required for pymsgbox' + return _buttonbox(msg=text, title=title, choices=[str(button)], root=root, timeout=timeout) + + +def confirm(text='', title='', buttons=[OK_TEXT, CANCEL_TEXT], root=None, timeout=None): + """Displays a message box with OK and Cancel buttons. Number and text of buttons can be customized. Returns the text of the button clicked on.""" + assert TKINTER_IMPORT_SUCCEEDED, 'Tkinter is required for pymsgbox' + return _buttonbox(msg=text, title=title, choices=[str(b) for b in buttons], root=root, timeout=timeout) + + +def prompt(text='', title='' , default='', root=None, timeout=None): + """Displays a message box with text input, and OK & Cancel buttons. Returns the text entered, or None if Cancel was clicked.""" + assert TKINTER_IMPORT_SUCCEEDED, 'Tkinter is required for pymsgbox' + return __fillablebox(text, title, default=default, mask=None,root=root, timeout=timeout) + + +def password(text='', title='', default='', mask='*', root=None, timeout=None): + """Displays a message box with text input, and OK & Cancel buttons. Typed characters appear as *. Returns the text entered, or None if Cancel was clicked.""" + assert TKINTER_IMPORT_SUCCEEDED, 'Tkinter is required for pymsgbox' + return __fillablebox(text, title, default, mask=mask, root=root, timeout=timeout) + + + + + +import pymsgbox.native as native # This needs to be after the above functions so that the unimplmeneted native functions can default back to the above functions. +native # dummy line just to make lint stop complaining about the previous line + +def timeoutBoxRoot(): + global boxRoot, __replyButtonText, __enterboxText + boxRoot.destroy() + __replyButtonText = TIMEOUT_TEXT + __enterboxText = TIMEOUT_TEXT + + +def _buttonbox(msg, title, choices, root=None, timeout=None): + """ + Display a msg, a title, and a set of buttons. + The buttons are defined by the members of the choices list. + Return the text of the button that the user selected. + + @arg msg: the msg to be displayed. + @arg title: the window title + @arg choices: a list or tuple of the choices to be displayed + """ + global boxRoot, __replyButtonText, __widgetTexts, buttonsFrame + + + # Initialize __replyButtonText to the first choice. + # This is what will be used if the window is closed by the close button. + __replyButtonText = choices[0] + + if root: + root.withdraw() + boxRoot = tk.Toplevel(master=root) + boxRoot.withdraw() + else: + boxRoot = tk.Tk() + boxRoot.withdraw() + + boxRoot.title(title) + boxRoot.iconname('Dialog') + boxRoot.geometry(rootWindowPosition) + boxRoot.minsize(400, 100) + + # ------------- define the messageFrame --------------------------------- + messageFrame = tk.Frame(master=boxRoot) + messageFrame.pack(side=tk.TOP, fill=tk.BOTH) + + # ------------- define the buttonsFrame --------------------------------- + buttonsFrame = tk.Frame(master=boxRoot) + buttonsFrame.pack(side=tk.TOP, fill=tk.BOTH) + + # -------------------- place the widgets in the frames ----------------------- + messageWidget = tk.Message(messageFrame, text=msg, width=400) + messageWidget.configure(font=(PROPORTIONAL_FONT_FAMILY, PROPORTIONAL_FONT_SIZE)) + messageWidget.pack(side=tk.TOP, expand=tk.YES, fill=tk.X, padx='3m', pady='3m') + + __put_buttons_in_buttonframe(choices) + + # -------------- the action begins ----------- + # put the focus on the first button + __firstWidget.focus_force() + + boxRoot.deiconify() + if timeout is not None: + boxRoot.after(timeout, timeoutBoxRoot) + boxRoot.mainloop() + try: + boxRoot.destroy() + except tk.TclError: + if __replyButtonText != TIMEOUT_TEXT: + __replyButtonText = None + + if root: root.deiconify() + return __replyButtonText + + +def __put_buttons_in_buttonframe(choices): + """Put the buttons in the buttons frame""" + global __widgetTexts, __firstWidget, buttonsFrame + + __firstWidget = None + __widgetTexts = {} + + i = 0 + + for buttonText in choices: + tempButton = tk.Button(buttonsFrame, takefocus=1, text=buttonText) + _bindArrows(tempButton) + tempButton.pack(expand=tk.YES, side=tk.LEFT, padx='1m', pady='1m', ipadx='2m', ipady='1m') + + # remember the text associated with this widget + __widgetTexts[tempButton] = buttonText + + # remember the first widget, so we can put the focus there + if i == 0: + __firstWidget = tempButton + i = 1 + + # for the commandButton, bind activation events to the activation event handler + commandButton = tempButton + handler = __buttonEvent + for selectionEvent in STANDARD_SELECTION_EVENTS: + commandButton.bind('<%s>' % selectionEvent, handler) + + if CANCEL_TEXT in choices: + commandButton.bind('', __cancelButtonEvent) + + +def _bindArrows(widget, skipArrowKeys=False): + widget.bind('', _tabRight) + widget.bind('' , _tabLeft) + + if not skipArrowKeys: + widget.bind('',_tabRight) + widget.bind('' , _tabLeft) + +def _tabRight(event): + boxRoot.event_generate('') + +def _tabLeft(event): + boxRoot.event_generate('') + + +def __buttonEvent(event): + """ + Handle an event that is generated by a person clicking a button. + """ + global boxRoot, __widgetTexts, __replyButtonText + __replyButtonText = __widgetTexts[event.widget] + boxRoot.quit() # quit the main loop + +def __cancelButtonEvent(event): + """Handle pressing Esc by clicking the Cancel button.""" + global boxRoot, __widgetTexts, __replyButtonText + __replyButtonText = CANCEL_TEXT + boxRoot.quit() + + +def __fillablebox(msg, title='', default='', mask=None, root=None, timeout=None): + """ + Show a box in which a user can enter some text. + You may optionally specify some default text, which will appear in the + enterbox when it is displayed. + Returns the text that the user entered, or None if he cancels the operation. + """ + + global boxRoot, __enterboxText, __enterboxDefaultText + global cancelButton, entryWidget, okButton + + if title == None: + title == '' + if default == None: + default = '' + __enterboxDefaultText = default + __enterboxText = __enterboxDefaultText + + if root: + root.withdraw() + boxRoot = tk.Toplevel(master=root) + boxRoot.withdraw() + else: + boxRoot = tk.Tk() + boxRoot.withdraw() + + boxRoot.title(title) + boxRoot.iconname('Dialog') + boxRoot.geometry(rootWindowPosition) + boxRoot.bind('', __enterboxCancel) + + # ------------- define the messageFrame --------------------------------- + messageFrame = tk.Frame(master=boxRoot) + messageFrame.pack(side=tk.TOP, fill=tk.BOTH) + + # ------------- define the buttonsFrame --------------------------------- + buttonsFrame = tk.Frame(master=boxRoot) + buttonsFrame.pack(side=tk.TOP, fill=tk.BOTH) + + + # ------------- define the entryFrame --------------------------------- + entryFrame = tk.Frame(master=boxRoot) + entryFrame.pack(side=tk.TOP, fill=tk.BOTH) + + # ------------- define the buttonsFrame --------------------------------- + buttonsFrame = tk.Frame(master=boxRoot) + buttonsFrame.pack(side=tk.TOP, fill=tk.BOTH) + + #-------------------- the msg widget ---------------------------- + messageWidget = tk.Message(messageFrame, width='4.5i', text=msg) + messageWidget.configure(font=(PROPORTIONAL_FONT_FAMILY, PROPORTIONAL_FONT_SIZE)) + messageWidget.pack(side=tk.RIGHT, expand=1, fill=tk.BOTH, padx='3m', pady='3m') + + # --------- entryWidget ---------------------------------------------- + entryWidget = tk.Entry(entryFrame, width=40) + _bindArrows(entryWidget, skipArrowKeys=True) + entryWidget.configure(font=(PROPORTIONAL_FONT_FAMILY, TEXT_ENTRY_FONT_SIZE)) + if mask: + entryWidget.configure(show=mask) + entryWidget.pack(side=tk.LEFT, padx='3m') + entryWidget.bind('', __enterboxGetText) + entryWidget.bind('', __enterboxCancel) + + # put text into the entryWidget and have it pre-highlighted + if __enterboxDefaultText != '': + entryWidget.insert(0,__enterboxDefaultText) + entryWidget.select_range(0, tk.END) + + # ------------------ ok button ------------------------------- + okButton = tk.Button(buttonsFrame, takefocus=1, text=OK_TEXT) + _bindArrows(okButton) + okButton.pack(expand=1, side=tk.LEFT, padx='3m', pady='3m', ipadx='2m', ipady='1m') + + # for the commandButton, bind activation events to the activation event handler + commandButton = okButton + handler = __enterboxGetText + for selectionEvent in STANDARD_SELECTION_EVENTS: + commandButton.bind('<%s>' % selectionEvent, handler) + + + # ------------------ cancel button ------------------------------- + cancelButton = tk.Button(buttonsFrame, takefocus=1, text=CANCEL_TEXT) + _bindArrows(cancelButton) + cancelButton.pack(expand=1, side=tk.RIGHT, padx='3m', pady='3m', ipadx='2m', ipady='1m') + + # for the commandButton, bind activation events to the activation event handler + commandButton = cancelButton + handler = __enterboxCancel + for selectionEvent in STANDARD_SELECTION_EVENTS: + commandButton.bind('<%s>' % selectionEvent, handler) + + # ------------------- time for action! ----------------- + entryWidget.focus_force() # put the focus on the entryWidget + boxRoot.deiconify() + if timeout is not None: + boxRoot.after(timeout, timeoutBoxRoot) + boxRoot.mainloop() # run it! + + # -------- after the run has completed ---------------------------------- + if root: root.deiconify() + try: + boxRoot.destroy() # button_click didn't destroy boxRoot, so we do it now + except tk.TclError: + if __enterboxText != TIMEOUT_TEXT: + return None + + return __enterboxText + + +def __enterboxGetText(event): + global __enterboxText + + __enterboxText = entryWidget.get() + boxRoot.quit() + + +def __enterboxRestore(event): + global entryWidget + + entryWidget.delete(0,len(entryWidget.get())) + entryWidget.insert(0, __enterboxDefaultText) + + +def __enterboxCancel(event): + global __enterboxText + + __enterboxText = None + boxRoot.quit() + + + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_java.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_java.py new file mode 100644 index 00000000..e69de29b diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_osx.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_osx.py new file mode 100644 index 00000000..e69de29b diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_win.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_win.py new file mode 100644 index 00000000..d0d5a42b --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_win.py @@ -0,0 +1,65 @@ +# The Windows native message box. + +import sys +import ctypes # An included library with Python install. + + + + +MB_OK = 0x0 +MB_OKCANCEL = 0x1 +MB_ABORTRETRYIGNORE = 0x2 +MB_YESNOCANCEL = 0x3 +MB_YESNO = 0x4 +MB_RETRYCANCEL = 0x5 + +MB_ICONHAND = MB_ICONSTOP = MB_ICONERRPR = 0x10 +MB_ICONQUESTION = 0x20 +MB_ICONEXCLAIMATION = 0x30 +MB_ICONASTERISK = MB_ICONINFOMRAITON = 0x40 + +MB_DEFAULTBUTTON1 = 0x0 +MB_DEFAULTBUTTON2 = 0x100 +MB_DEFAULTBUTTON3 = 0x200 +MB_DEFAULTBUTTON4 = 0x300 + +MB_SETFOREGROUND = 0x10000 +MB_TOPMOST = 0x40000 + +runningOnPython2 = sys.version_info[0] == 2 + + + +if runningOnPython2: + messageBoxFunc = ctypes.windll.user32.MessageBoxA +else: # Python 3 functions. + messageBoxFunc = ctypes.windll.user32.MessageBoxW + + +def alert(text='', title='', button='OK'): + """Displays a simple message box with text and a single OK button. Returns the text of the button clicked on.""" + messageBoxFunc(0, text, title, MB_OK | MB_SETFOREGROUND | MB_TOPMOST) + return button + +def confirm(text='', title='', buttons=['OK', 'Cancel']): + """Displays a message box with OK and Cancel buttons. Number and text of buttons can be customized. Returns the text of the button clicked on.""" + retVal = messageBoxFunc(0, text, title, MB_OKCANCEL | MB_ICONQUESTION | MB_SETFOREGROUND | MB_TOPMOST) + if retVal == 1 or len(buttons) == 1: + return buttons[0] + elif retVal == 2: + return buttons[1] + else: + assert False, 'Unexpected return value from MessageBox: %s' % (retVal) + + + +''' +def prompt(text='', title='' , default=''): + """Displays a message box with text input, and OK & Cancel buttons. Returns the text entered, or None if Cancel was clicked.""" + pass + +def password(text='', title='', default='', mask='*'): + """Displays a message box with text input, and OK & Cancel buttons. Typed characters appear as *. Returns the text entered, or None if Cancel was clicked.""" + pass + +''' \ No newline at end of file diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_x11.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/_native_x11.py new file mode 100644 index 00000000..e69de29b diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/native.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/native.py new file mode 100644 index 00000000..93c729c5 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pymsgbox/native.py @@ -0,0 +1,27 @@ +# These functions use the operating system's native message box calls. + +import sys + +# default back to the original functions if no native functions exist. +import pymsgbox +alert = pymsgbox.alert +confirm = pymsgbox.confirm +prompt = pymsgbox.prompt +password = pymsgbox.password + + +# The platformModule is where we reference the platform-specific functions. +if sys.platform.startswith('java'): + import pymsgbox._native_java as platformModule +elif sys.platform == 'darwin': + import pymsgbox._native_osx as platformModule +elif sys.platform == 'win32': + import pymsgbox._native_win as platformModule + alert = platformModule.alert + confirm = platformModule.confirm +else: + import pymsgbox._native_x11 as platformModule + +platformModule # this line used to silence the linting tool. Will be removed once implementation is done + + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyrect/__init__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyrect/__init__.py new file mode 100644 index 00000000..feaf4929 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyrect/__init__.py @@ -0,0 +1,1334 @@ +import doctest +import collections + +# TODO - finish doc tests + +# TODO - unit tests needed for get/set and Box named tuple + +__version__ = '0.1.4' + + +# Constants for rectangle attributes: +TOP = 'top' +BOTTOM = 'bottom' +LEFT = 'left' +RIGHT = 'right' +TOPLEFT = 'topleft' +TOPRIGHT = 'topright' +BOTTOMLEFT = 'bottomleft' +BOTTOMRIGHT = 'bottomright' +MIDTOP = 'midtop' +MIDRIGHT = 'midright' +MIDLEFT = 'midleft' +MIDBOTTOM = 'midbottom' +CENTER = 'center' +CENTERX = 'centerx' +CENTERY = 'centery' +WIDTH = 'width' +HEIGHT = 'height' +SIZE = 'size' +BOX = 'box' +AREA = 'area' + +Box = collections.namedtuple('Box', 'left top width height') +Point = collections.namedtuple('Point', 'x y') +Size = collections.namedtuple('Size', 'width height') + +class PyRectException(Exception): + """ + This class exists for PyRect exceptions. If the PyRect module raises any + non-PyRectException exceptions, this indicates there's a bug in PyRect. + """ + pass + + +def _checkForIntOrFloat(arg): + """Raises an exception if arg is not an int or float. Always returns None.""" + if not isinstance(arg, (int, float)): + raise PyRectException('argument must be int or float, not %s' % (arg.__class__.__name__)) + + +def _checkForInt(arg): + """Raises an exception if arg is not an int. Always returns None.""" + if not isinstance(arg, int): + raise PyRectException('argument must be int or float, not %s' % (arg.__class__.__name__)) + + +def _checkForTwoIntOrFloatTuple(arg): + try: + if not isinstance(arg[0], (int, float)) or \ + not isinstance(arg[1], (int, float)): + raise PyRectException('argument must be a two-item tuple containing int or float values') + except: + raise PyRectException('argument must be a two-item tuple containing int or float values') + + +def _checkForFourIntOrFloatTuple(arg): + try: + if not isinstance(arg[0], (int, float)) or \ + not isinstance(arg[1], (int, float)) or \ + not isinstance(arg[2], (int, float)) or \ + not isinstance(arg[3], (int, float)): + raise PyRectException('argument must be a four-item tuple containing int or float values') + except: + raise PyRectException('argument must be a four-item tuple containing int or float values') + + +def _collides(rectOrPoint1, rectOrPoint2): + """Returns True if rectOrPoint1 and rectOrPoint2 collide with each other.""" + + +def _getRectsAndPoints(rectsOrPoints): + points = [] + rects = [] + for rectOrPoint in rectsOrPoints: + try: + _checkForTwoIntOrFloatTuple(rectOrPoint) + points.append(rectOrPoint) + except PyRectException: + try: + _checkForFourIntOrFloatTuple(rectOrPoint) + except: + raise PyRectException('argument is not a point or a rect tuple') + rects.append(rectOrPoint) + return (rects, points) + + +''' +def collideAnyBetween(rectsOrPoints): + """Returns True if any of the (x, y) or (left, top, width, height) tuples + in rectsOrPoints collides with any other point or box tuple in rectsOrPoints. + + >>> p1 = (50, 50) + >>> p2 = (100, 100) + >>> p3 = (50, 200) + >>> r1 = (-50, -50, 20, 20) + >>> r2 = (25, 25, 50, 50) + >>> collideAnyBetween([p1, p2, p3, r1, r2]) # p1 and r2 collide + True + >>> collideAnyBetween([p1, p2, p3, r1]) + False + """ + # TODO - needs to be complete + + # split up + rects, points = _getRectsAndPoints(rectsOrPoints) + + # compare points with each other + if len(points) > 1: + for point in points: + if point != points[0]: + return False + + # TODO finish +''' + + + +''' +def collideAllBetween(rectsOrPoints): + """Returns True if any of the (x, y) or (left, top, width, height) tuples + in rectsOrPoints collides with any other point or box tuple in rectsOrPoints. + + >>> p1 = (50, 50) + >>> p2 = (100, 100) + >>> p3 = (50, 200) + >>> r1 = (-50, -50, 20, 20) + >>> r2 = (25, 25, 50, 50) + >>> collideAllBetween([p1, p2, p3, r1, r2]) + False + >>> collideAllBetween([p1, p2, p3, r1]) + False + >>> collideAllBetween([p1, r2]) # Everything in the list collides with each other. + True + """ + + # Check for valid arguments + try: + for rectOrPoint in rectsOrPoints: + if len(rectOrPoint) == 2: + _checkForTwoIntOrFloatTuple(rectOrPoint) + elif len(rectOrPoint) == 4: + _checkForFourIntOrFloatTuple(rectOrPoint) + else: + raise PyRectException() + except: + raise PyRectException('Arguments in rectsOrPoints must be 2- or 4-integer/float tuples.') + + raise NotImplementedError # return a list of all rects or points that collide with any other in the argument +''' + +class Rect(object): + def __init__(self, left=0, top=0, width=0, height=0, enableFloat=False, readOnly=False, onChange=None, onRead=None): + _checkForIntOrFloat(width) + _checkForIntOrFloat(height) + _checkForIntOrFloat(left) + _checkForIntOrFloat(top) + + self._enableFloat = bool(enableFloat) + self._readOnly = bool(readOnly) + + if onChange is not None and not callable(onChange): + raise PyRectException('onChange argument must be None or callable (function, method, etc.)') + self.onChange = onChange + + if onRead is not None and not callable(onRead): + raise PyRectException('onRead argument must be None or callable (function, method, etc.)') + self.onRead = onRead + + if enableFloat: + self._width = float(width) + self._height = float(height) + self._left = float(left) + self._top = float(top) + else: + self._width = int(width) + self._height = int(height) + self._left = int(left) + self._top = int(top) + + + # OPERATOR OVERLOADING / DUNDER METHODS + def __repr__(self): + """Return a string of the constructor function call to create this Rect object.""" + return '%s(left=%s, top=%s, width=%s, height=%s)' % (self.__class__.__name__, self._left, self._top, self._width, self._height) + + + def __str__(self): + """Return a string representation of this Rect object.""" + return '(x=%s, y=%s, w=%s, h=%s)' % (self._left, self._top, self._width, self._height) + + + def callOnChange(self, oldLeft, oldTop, oldWidth, oldHeight): + # Note: callOnChange() should be called *after* the attribute has been changed. + # Note: This isn't thread safe; the attributes can change between the calling of this function and the code in the function running. + if self.onChange is not None: + self.onChange(Box(oldLeft, oldTop, oldWidth, oldHeight), Box(self._left, self._top, self._width, self._height)) + + + @property + def enableFloat(self): + """ + A Boolean attribute that determines if this rectangle uses floating point + numbers for its position and size. False, by default. + + >>> r = Rect(0, 0, 10, 20) + >>> r.enableFloat + False + >>> r.enableFloat = True + >>> r.top = 3.14 + >>> r + Rect(left=0.0, top=3.14, width=10.0, height=20.0) + """ + return self._enableFloat + + @enableFloat.setter + def enableFloat(self, value): + if not isinstance(value, bool): + raise PyRectException('enableFloat must be set to a bool value') + self._enableFloat = value + + if self._enableFloat: + self._left = float(self._left) + self._top = float(self._top) + self._width = float(self._width) + self._height = float(self._height) + else: + self._left = int(self._left) + self._top = int(self._top) + self._width = int(self._width) + self._height = int(self._height) + + + # LEFT SIDE PROPERTY + @property + def left(self): + """ + The x coordinate for the left edge of the rectangle. `x` is an alias for `left`. + + >>> r = Rect(0, 0, 10, 20) + >>> r.left + 0 + >>> r.left = 50 + >>> r + Rect(left=50, top=0, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(LEFT) + return self._left + + @left.setter + def left(self, newLeft): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(newLeft) + if newLeft != self._left: # Only run this code if the size/position has changed. + originalLeft = self._left + if self._enableFloat: + self._left = newLeft + else: + self._left = int(newLeft) + self.callOnChange(originalLeft, self._top, self._width, self._height) + + x = left # x is an alias for left + + + # TOP SIDE PROPERTY + @property + def top(self): + """ + The y coordinate for the top edge of the rectangle. `y` is an alias for `top`. + + >>> r = Rect(0, 0, 10, 20) + >>> r.top + 0 + >>> r.top = 50 + >>> r + Rect(left=0, top=50, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(TOP) + return self._top + + @top.setter + def top(self, newTop): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(newTop) + if newTop != self._top: # Only run this code if the size/position has changed. + originalTop = self._top + if self._enableFloat: + self._top = newTop + else: + self._top = int(newTop) + self.callOnChange(self._left, originalTop, self._width, self._height) + + y = top # y is an alias for top + + + # RIGHT SIDE PROPERTY + @property + def right(self): + """ + The x coordinate for the right edge of the rectangle. + + >>> r = Rect(0, 0, 10, 20) + >>> r.right + 10 + >>> r.right = 50 + >>> r + Rect(left=40, top=0, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(RIGHT) + return self._left + self._width + + @right.setter + def right(self, newRight): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(newRight) + if newRight != self._left + self._width: # Only run this code if the size/position has changed. + originalLeft = self._left + if self._enableFloat: + self._left = newRight - self._width + else: + self._left = int(newRight) - self._width + self.callOnChange(originalLeft, self._top, self._width, self._height) + + + # BOTTOM SIDE PROPERTY + @property + def bottom(self): + """The y coordinate for the bottom edge of the rectangle. + + >>> r = Rect(0, 0, 10, 20) + >>> r.bottom + 20 + >>> r.bottom = 30 + >>> r + Rect(left=0, top=10, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(BOTTOM) + return self._top + self._height + + @bottom.setter + def bottom(self, newBottom): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(newBottom) + if newBottom != self._top + self._height: # Only run this code if the size/position has changed. + originalTop = self._top + if self._enableFloat: + self._top = newBottom - self._height + else: + self._top = int(newBottom) - self._height + self.callOnChange(self._left, originalTop, self._width, self._height) + + + # TOP LEFT CORNER PROPERTY + @property + def topleft(self): + """ + The x and y coordinates for the top right corner of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.topleft + (0, 0) + >>> r.topleft = (30, 30) + >>> r + Rect(left=30, top=30, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(TOPLEFT) + return Point(x=self._left, y=self._top) + + @topleft.setter + def topleft(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newLeft, newTop = value + if (newLeft != self._left) or (newTop != self._top): # Only run this code if the size/position has changed. + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + self._left = newLeft + self._top = newTop + else: + self._left = int(newLeft) + self._top = int(newTop) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # BOTTOM LEFT CORNER PROPERTY + @property + def bottomleft(self): + """ + The x and y coordinates for the bottom right corner of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.bottomleft + (0, 20) + >>> r.bottomleft = (30, 30) + >>> r + Rect(left=30, top=10, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(BOTTOMLEFT) + return Point(x=self._left, y=self._top + self._height) + + @bottomleft.setter + def bottomleft(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newLeft, newBottom = value + if (newLeft != self._left) or (newBottom != self._top + self._height): # Only run this code if the size/position has changed. + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + self._left = newLeft + self._top = newBottom - self._height + else: + self._left = int(newLeft) + self._top = int(newBottom) - self._height + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # TOP RIGHT CORNER PROPERTY + @property + def topright(self): + """ + The x and y coordinates for the top right corner of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.topright + (10, 0) + >>> r.topright = (30, 30) + >>> r + Rect(left=20, top=30, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(TOPRIGHT) + return Point(x=self._left + self._width, y=self._top) + + @topright.setter + def topright(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newRight, newTop = value + if (newRight != self._left + self._width) or (newTop != self._top): # Only run this code if the size/position has changed. + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + self._left = newRight - self._width + self._top = newTop + else: + self._left = int(newRight) - self._width + self._top = int(newTop) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # BOTTOM RIGHT CORNER PROPERTY + @property + def bottomright(self): + """ + The x and y coordinates for the bottom right corner of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.bottomright + (10, 20) + >>> r.bottomright = (30, 30) + >>> r + Rect(left=20, top=10, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(BOTTOMRIGHT) + return Point(x=self._left + self._width, y=self._top + self._height) + + @bottomright.setter + def bottomright(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newRight, newBottom = value + if (newBottom != self._top + self._height) or (newRight != self._left + self._width): # Only run this code if the size/position has changed. + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + self._left = newRight - self._width + self._top = newBottom - self._height + else: + self._left = int(newRight) - self._width + self._top = int(newBottom) - self._height + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # MIDDLE OF TOP SIDE PROPERTY + @property + def midtop(self): + """ + The x and y coordinates for the midpoint of the top edge of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.midtop + (5, 0) + >>> r.midtop = (40, 50) + >>> r + Rect(left=35, top=50, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(MIDTOP) + if self._enableFloat: + return Point(x=self._left + (self._width / 2.0), y=self._top) + else: + return Point(x=self._left + (self._width // 2), y=self._top) + + @midtop.setter + def midtop(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newMidTop, newTop = value + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + if (newMidTop != self._left + self._width / 2.0) or (newTop != self._top): # Only run this code if the size/position has changed. + self._left = newMidTop - (self._width / 2.0) + self._top = newTop + self.callOnChange(originalLeft, originalTop, self._width, self._height) + else: + if (newMidTop != self._left + self._width // 2) or (newTop != self._top): # Only run this code if the size/position has changed. + self._left = int(newMidTop) - (self._width // 2) + self._top = int(newTop) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # MIDDLE OF BOTTOM SIDE PROPERTY + @property + def midbottom(self): + """ + The x and y coordinates for the midpoint of the bottom edge of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.midbottom + (5, 20) + >>> r.midbottom = (40, 50) + >>> r + Rect(left=35, top=30, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(MIDBOTTOM) + if self._enableFloat: + return Point(x=self._left + (self._width / 2.0), y=self._top + self._height) + else: + return Point(x=self._left + (self._width // 2), y=self._top + self._height) + + @midbottom.setter + def midbottom(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newMidBottom, newBottom = value + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + if (newMidBottom != self._left + self._width / 2.0) or (newBottom != self._top + self._height): # Only run this code if the size/position has changed. + self._left = newMidBottom - (self._width / 2.0) + self._top = newBottom - self._height + self.callOnChange(originalLeft, originalTop, self._width, self._height) + else: + if (newMidBottom != self._left + self._width // 2) or (newBottom != self._top + self._height): # Only run this code if the size/position has changed. + self._left = int(newMidBottom) - (self._width // 2) + self._top = int(newBottom) - self._height + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # MIDDLE OF LEFT SIDE PROPERTY + @property + def midleft(self): + """ + The x and y coordinates for the midpoint of the left edge of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.midleft + (0, 10) + >>> r.midleft = (40, 50) + >>> r + Rect(left=40, top=40, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(MIDLEFT) + if self._enableFloat: + return Point(x=self._left, y=self._top + (self._height / 2.0)) + else: + return Point(x=self._left, y=self._top + (self._height // 2)) + + + @midleft.setter + def midleft(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newLeft, newMidLeft = value + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + if (newLeft != self._left) or (newMidLeft != self._top + (self._height / 2.0)): # Only run this code if the size/position has changed. + self._left = newLeft + self._top = newMidLeft - (self._height / 2.0) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + else: + if (newLeft != self._left) or (newMidLeft != self._top + (self._height // 2)): # Only run this code if the size/position has changed. + self._left = int(newLeft) + self._top = int(newMidLeft) - (self._height // 2) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # MIDDLE OF RIGHT SIDE PROPERTY + @property + def midright(self): + """ + The x and y coordinates for the midpoint of the right edge of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.midright + (10, 10) + >>> r.midright = (40, 50) + >>> r + Rect(left=30, top=40, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(MIDRIGHT) + if self._enableFloat: + return Point(x=self._left + self._width, y=self._top + (self._height / 2.0)) + else: + return Point(x=self._left + self._width, y=self._top + (self._height // 2)) + + + @midright.setter + def midright(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newRight, newMidRight = value + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + if (newRight != self._left + self._width) or (newMidRight != self._top + self._height / 2.0): # Only run this code if the size/position has changed. + self._left = newRight - self._width + self._top = newMidRight - (self._height / 2.0) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + else: + if (newRight != self._left + self._width) or (newMidRight != self._top + self._height // 2): # Only run this code if the size/position has changed. + self._left = int(newRight) - self._width + self._top = int(newMidRight) - (self._height // 2) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # CENTER POINT PROPERTY + @property + def center(self): + """ + The x and y coordinates for the center of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.center + (5, 10) + >>> r.center = (40, 50) + >>> r + Rect(left=35, top=40, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(CENTER) + if self._enableFloat: + return Point(x=self._left + (self._width / 2.0), y=self._top + (self._height / 2.0)) + else: + return Point(x=self._left + (self._width // 2), y=self._top + (self._height // 2)) + + @center.setter + def center(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newCenterx, newCentery = value + originalLeft = self._left + originalTop = self._top + if self._enableFloat: + if (newCenterx != self._left + self._width / 2.0) or (newCentery != self._top + self._height / 2.0): # Only run this code if the size/position has changed. + self._left = newCenterx - (self._width / 2.0) + self._top = newCentery - (self._height / 2.0) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + else: + if (newCenterx != self._left + self._width // 2) or (newCentery != self._top + self._height // 2): # Only run this code if the size/position has changed. + self._left = int(newCenterx) - (self._width // 2) + self._top = int(newCentery) - (self._height // 2) + self.callOnChange(originalLeft, originalTop, self._width, self._height) + + + # X COORDINATE OF CENTER POINT PROPERTY + @property + def centerx(self): + """ + The x coordinate for the center of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.centerx + 5 + >>> r.centerx = 50 + >>> r + Rect(left=45, top=0, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(CENTERX) + if self._enableFloat: + return self._left + (self._width / 2.0) + else: + return self._left + (self._width // 2) + + @centerx.setter + def centerx(self, newCenterx): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(newCenterx) + originalLeft = self._left + if self._enableFloat: + if (newCenterx != self._left + self._width / 2.0): # Only run this code if the size/position has changed. + self._left = newCenterx - (self._width / 2.0) + self.callOnChange(originalLeft, self._top, self._width, self._height) + else: + if (newCenterx != self._left + self._width // 2): # Only run this code if the size/position has changed. + self._left = int(newCenterx) - (self._width // 2) + self.callOnChange(originalLeft, self._top, self._width, self._height) + + + # Y COORDINATE OF CENTER POINT PROPERTY + @property + def centery(self): + """ + The y coordinate for the center of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.centery + 10 + >>> r.centery = 50 + >>> r + Rect(left=0, top=40, width=10, height=20) + """ + if self.onRead is not None: + self.onRead(CENTERY) + if self._enableFloat: + return self._top + (self._height / 2.0) + else: + return self._top + (self._height // 2) + + @centery.setter + def centery(self, newCentery): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(newCentery) + originalTop = self._top + if self._enableFloat: + if (newCentery != self._top + self._height / 2.0): # Only run this code if the size/position has changed. + self._top = newCentery - (self._height / 2.0) + self.callOnChange(self._left, originalTop, self._width, self._height) + else: + if (newCentery != self._top + self._height // 2): # Only run this code if the size/position has changed. + self._top = int(newCentery) - (self._height // 2) + self.callOnChange(self._left, originalTop, self._width, self._height) + + + # SIZE PROPERTY (i.e. (width, height)) + @property + def size(self): + """ + The width and height of the rectangle, as a tuple. + + >>> r = Rect(0, 0, 10, 20) + >>> r.size + (10, 20) + >>> r.size = (40, 50) + >>> r + Rect(left=0, top=0, width=40, height=50) + """ + if self.onRead is not None: + self.onRead(SIZE) + return Size(width=self._width, height=self._height) + + @size.setter + def size(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForTwoIntOrFloatTuple(value) + newWidth, newHeight = value + if newWidth != self._width or newHeight != self._height: + originalWidth = self._width + originalHeight = self._height + if self._enableFloat: + self._width = newWidth + self._height = newHeight + else: + self._width = int(newWidth) + self._height = int(newHeight) + self.callOnChange(self._left, self._top, originalWidth, originalHeight) + + + # WIDTH PROPERTY + @property + def width(self): + """ + The width of the rectangle. `w` is an alias for `width`. + + >>> r = Rect(0, 0, 10, 20) + >>> r.width + 10 + >>> r.width = 50 + >>> r + Rect(left=0, top=0, width=50, height=20) + """ + if self.onRead is not None: + self.onRead(WIDTH) + return self._width + + @width.setter + def width(self, newWidth): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(newWidth) + if (newWidth != self._width): # Only run this code if the size/position has changed. + originalWidth = self._width + if self._enableFloat: + self._width = newWidth + else: + self._width = int(newWidth) + self.callOnChange(self._left, self._top, originalWidth, self._height) + + w = width + + + # HEIGHT PROPERTY + @property + def height(self): + """ + The height of the rectangle. `h` is an alias for `height` + + >>> r = Rect(0, 0, 10, 20) + >>> r.height + 20 + >>> r.height = 50 + >>> r + Rect(left=0, top=0, width=10, height=50) + """ + if self.onRead is not None: + self.onRead(HEIGHT) + return self._height + + @height.setter + def height(self, newHeight): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(newHeight) + if (newHeight != self._height): # Only run this code if the size/position has changed. + originalHeight = self._height + if self._enableFloat: + self._height = newHeight + else: + self._height = int(newHeight) + self.callOnChange(self._left, self._top, self._width, originalHeight) + + h = height + + + # AREA PROPERTY + @property + def area(self): + """The area of the `Rect`, which is simply the width times the height. + This is a read-only attribute. + + >>> r = Rect(0, 0, 10, 20) + >>> r.area + 200 + """ + if self.onRead is not None: + self.onRead(AREA) + return self._width * self._height + + + # BOX PROPERTY + @property + def box(self): + """A tuple of four integers: (left, top, width, height). + + >>> r = Rect(0, 0, 10, 20) + >>> r.box + (0, 0, 10, 20) + >>> r.box = (5, 15, 100, 200) + >>> r.box + (5, 15, 100, 200)""" + if self.onRead is not None: + self.onRead(BOX) + return Box(left=self._left, top=self._top, width=self._width, height=self._height) + + @box.setter + def box(self, value): + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForFourIntOrFloatTuple(value) + newLeft, newTop, newWidth, newHeight = value + if (newLeft != self._left) or (newTop != self._top) or (newWidth != self._width) or (newHeight != self._height): + originalLeft = self._left + originalTop = self._top + originalWidth = self._width + originalHeight = self._height + if self._enableFloat: + self._left = float(newLeft) + self._top = float(newTop) + self._width = float(newWidth) + self._height = float(newHeight) + else: + self._left = int(newLeft) + self._top = int(newTop) + self._width = int(newWidth) + self._height = int(newHeight) + self.callOnChange(originalLeft, originalTop, originalWidth, originalHeight) + + + def get(self, rectAttrName): + # Access via the properties so that it triggers onRead(). + if rectAttrName == TOP: + return self.top + elif rectAttrName == BOTTOM: + return self.bottom + elif rectAttrName == LEFT: + return self.left + elif rectAttrName == RIGHT: + return self.right + elif rectAttrName == TOPLEFT: + return self.topleft + elif rectAttrName == TOPRIGHT: + return self.topright + elif rectAttrName == BOTTOMLEFT: + return self.bottomleft + elif rectAttrName == BOTTOMRIGHT: + return self.bottomright + elif rectAttrName == MIDTOP: + return self.midtop + elif rectAttrName == MIDBOTTOM: + return self.midbottom + elif rectAttrName == MIDLEFT: + return self.midleft + elif rectAttrName == MIDRIGHT: + return self.midright + elif rectAttrName == CENTER: + return self.center + elif rectAttrName == CENTERX: + return self.centerx + elif rectAttrName == CENTERY: + return self.centery + elif rectAttrName == WIDTH: + return self.width + elif rectAttrName == HEIGHT: + return self.height + elif rectAttrName == SIZE: + return self.size + elif rectAttrName == AREA: + return self.area + elif rectAttrName == BOX: + return self.box + else: + raise PyRectException("'%s' is not a valid attribute name" % (rectAttrName)) + + + def set(self, rectAttrName, value): + # Set via the properties so that it triggers onChange(). + if rectAttrName == TOP: + self.top = value + elif rectAttrName == BOTTOM: + self.bottom = value + elif rectAttrName == LEFT: + self.left = value + elif rectAttrName == RIGHT: + self.right = value + elif rectAttrName == TOPLEFT: + self.topleft = value + elif rectAttrName == TOPRIGHT: + self.topright = value + elif rectAttrName == BOTTOMLEFT: + self.bottomleft = value + elif rectAttrName == BOTTOMRIGHT: + self.bottomright = value + elif rectAttrName == MIDTOP: + self.midtop = value + elif rectAttrName == MIDBOTTOM: + self.midbottom = value + elif rectAttrName == MIDLEFT: + self.midleft = value + elif rectAttrName == MIDRIGHT: + self.midright = value + elif rectAttrName == CENTER: + self.center = value + elif rectAttrName == CENTERX: + self.centerx = value + elif rectAttrName == CENTERY: + self.centery = value + elif rectAttrName == WIDTH: + self.width = value + elif rectAttrName == HEIGHT: + self.height = value + elif rectAttrName == SIZE: + self.size = value + elif rectAttrName == AREA: + raise PyRectException('area is a read-only attribute') + elif rectAttrName == BOX: + self.box = value + else: + raise PyRectException("'%s' is not a valid attribute name" % (rectAttrName)) + + + def move(self, xOffset, yOffset): + """Moves this Rect object by the given offsets. The xOffset and yOffset + arguments can be any integer value, positive or negative. + >>> r = Rect(0, 0, 100, 100) + >>> r.move(10, 20) + >>> r + Rect(left=10, top=20, width=100, height=100) + """ + if self._readOnly: + raise PyRectException('Rect object is read-only') + + _checkForIntOrFloat(xOffset) + _checkForIntOrFloat(yOffset) + if self._enableFloat: + self._left += xOffset + self._top += yOffset + else: + self._left += int(xOffset) + self._top += int(yOffset) + + + def copy(self): + """Return a copied `Rect` object with the same position and size as this + `Rect` object. + + >>> r1 = Rect(0, 0, 100, 150) + >>> r2 = r1.copy() + >>> r1 == r2 + True + >>> r2 + Rect(left=0, top=0, width=100, height=150) + """ + return Rect(self._left, self._top, self._width, self._height, self._enableFloat, self._readOnly) + + + def inflate(self, widthChange=0, heightChange=0): + """Increases the size of this Rect object by the given offsets. The + rectangle's center doesn't move. Negative values will shrink the + rectangle. + + >>> r = Rect(0, 0, 100, 150) + >>> r.inflate(20, 40) + >>> r + Rect(left=-10, top=-20, width=120, height=190) + """ + if self._readOnly: + raise PyRectException('Rect object is read-only') + + originalCenter = self.center + self.width += widthChange + self.height += heightChange + self.center = originalCenter + + + def clamp(self, otherRect): + """Centers this Rect object at the center of otherRect. + + >>> r1 =Rect(0, 0, 100, 100) + >>> r2 = Rect(-20, -90, 50, 50) + >>> r2.clamp(r1) + >>> r2 + Rect(left=25, top=25, width=50, height=50) + >>> r1.center == r2.center + True + """ + if self._readOnly: + raise PyRectException('Rect object is read-only') + + self.center = otherRect.center + + ''' + def intersection(self, otherRect): + """Returns a new Rect object of the overlapping area between this + Rect object and otherRect. + + `clip()` is an alias for `intersection()`. + """ + pass + + clip = intersection + ''' + + def union(self, otherRect): + """Adjusts the width and height to also cover the area of `otherRect`. + + >>> r1 = Rect(0, 0, 100, 100) + >>> r2 = Rect(-10, -10, 100, 100) + >>> r1.union(r2) + >>> r1 + Rect(left=-10, top=-10, width=110, height=110) + """ + + # TODO - Change otherRect so that it could be a point as well. + + unionLeft = min(self._left, otherRect._left) + unionTop = min(self._top, otherRect._top) + unionRight = max(self.right, otherRect.right) + unionBottom = max(self.bottom, otherRect.bottom) + + self._left = unionLeft + self._top = unionTop + self._width = unionRight - unionLeft + self._height = unionBottom - unionTop + + + def unionAll(self, otherRects): + """Adjusts the width and height to also cover all the `Rect` objects in + the `otherRects` sequence. + + >>> r = Rect(0, 0, 100, 100) + >>> r1 = Rect(0, 0, 150, 100) + >>> r2 = Rect(-10, -10, 100, 100) + >>> r.unionAll([r1, r2]) + >>> r + Rect(left=-10, top=-10, width=160, height=110) + """ + + # TODO - Change otherRect so that it could be a point as well. + + otherRects = list(otherRects) + otherRects.append(self) + + unionLeft = min([r._left for r in otherRects]) + unionTop = min([r._top for r in otherRects]) + unionRight = max([r.right for r in otherRects]) + unionBottom = max([r.bottom for r in otherRects]) + + self._left = unionLeft + self._top = unionTop + self._width = unionRight - unionLeft + self._height = unionBottom - unionTop + + """ + def fit(self, other): + pass # TODO - needs to be complete + """ + + + def normalize(self): + """Rect objects with a negative width or height cover a region where the + right/bottom edge is to the left/above of the left/top edge, respectively. + The `normalize()` method sets the `width` and `height` to positive if they + were negative. + + The Rect stays in the same place, though with the `top` and `left` + attributes representing the true top and left side. + + >>> r = Rect(0, 0, -10, -20) + >>> r.normalize() + >>> r + Rect(left=-10, top=-20, width=10, height=20) + """ + if self._readOnly: + raise PyRectException('Rect object is read-only') + + if self._width < 0: + self._width = -self._width + self._left -= self._width + if self._height < 0: + self._height = -self._height + self._top -= self._height + # Note: No need to intify here, since the four attributes should already be ints and no multiplication was done. + + + def __contains__(self, value): # for either points or other Rect objects. For Rects, the *entire* Rect must be in this Rect. + if isinstance(value, Rect): + return value.topleft in self and value.topright in self and value.bottomleft in self and value.bottomright in self + + # Check if value is an (x, y) sequence or a (left, top, width, height) sequence. + try: + len(value) + except: + raise PyRectException('in requires an (x, y) tuple, a (left, top, width, height) tuple, or a Rect object as left operand, not %s' % (value.__class__.__name__)) + + if len(value) == 2: + # Assume that value is an (x, y) sequence. + _checkForTwoIntOrFloatTuple(value) + x, y = value + return self._left < x < self._left + self._width and self._top < y < self._top + self._height + + elif len(value) == 4: + # Assume that value is an (x, y) sequence. + _checkForFourIntOrFloatTuple(value) + left, top, width, height = value + return (left, top) in self and (left + width, top) in self and (left, top + height) in self and (left + width, top + height) in self + else: + raise PyRectException('in requires an (x, y) tuple, a (left, top, width, height) tuple, or a Rect object as left operand, not %s' % (value.__class__.__name__)) + + + def collide(self, value): + """Returns `True` if value collides with this `Rect` object, where value can + be an (x, y) tuple, a (left, top, width, height) box tuple, or another `Rect` + object. If value represents a rectangular area, any part of that area + can collide with this `Rect` object to make `collide()` return `True`. + Otherwise, returns `False`.""" + + # Note: This code is similar to __contains__(), with some minor changes + # because __contains__() requires the rectangular are to be COMPELTELY + # within the Rect object. + if isinstance(value, Rect): + return value.topleft in self or value.topright in self or value.bottomleft in self or value.bottomright in self + + # Check if value is an (x, y) sequence or a (left, top, width, height) sequence. + try: + len(value) + except: + raise PyRectException('in requires an (x, y) tuple, a (left, top, width, height) tuple, or a Rect object as left operand, not %s' % (value.__class__.__name__)) + + if len(value) == 2: + # Assume that value is an (x, y) sequence. + _checkForTwoIntOrFloatTuple(value) + x, y = value + return self._left < x < self._left + self._width and self._top < y < self._top + self._height + + elif len(value) == 4: + # Assume that value is an (x, y) sequence. + left, top, width, height = value + return (left, top) in self or (left + width, top) in self or (left, top + height) in self or (left + width, top + height) in self + else: + raise PyRectException('in requires an (x, y) tuple, a (left, top, width, height) tuple, or a Rect object as left operand, not %s' % (value.__class__.__name__)) + + + ''' + def collideAny(self, rectsOrPoints): + """Returns True if any of the (x, y) or (left, top, width, height) + tuples in rectsOrPoints is inside this Rect object. + + >> r = Rect(0, 0, 100, 100) + >> p1 = (150, 80) + >> p2 = (100, 100) # This point collides. + >> r.collideAny([p1, p2]) + True + >> r1 = Rect(50, 50, 10, 20) # This Rect collides. + >> r.collideAny([r1]) + True + >> r.collideAny([p1, p2, r1]) + True + """ + # TODO - needs to be complete + pass # returns True or False + raise NotImplementedError +''' + + ''' + def collideAll(self, rectsOrPoints): + """Returns True if all of the (x, y) or (left, top, width, height) + tuples in rectsOrPoints is inside this Rect object. + """ + + pass # return a list of all rects or points that collide with any other in the argument + raise NotImplementedError +''' + + # TODO - Add overloaded operators for + - * / and others once we can determine actual use cases for them. + + """NOTE: All of the comparison magic methods compare the box tuple of Rect + objects. This is the behavior of the pygame Rect objects. Originally, + I thought about having the <, <=, >, and >= operators compare the area + of Rect objects. But at the same time, I wanted to have == and != compare + not just area, but all four left, top, width, and height attributes. + But that's weird to have different comparison operators comparing different + features of a rectangular area. So I just defaulted to what Pygame does + and compares the box tuple. This means that the == and != operators are + the only really useful comparison operators, so I decided to ditch the + other operators altogether and just have Rect only support == and !=. + """ + + def __eq__(self, other): + if isinstance(other, Rect): + return other.box == self.box + else: + raise PyRectException('Rect objects can only be compared with other Rect objects') + + + def __ne__(self, other): + if isinstance(other, Rect): + return other.box != self.box + else: + raise PyRectException('Rect objects can only be compared with other Rect objects') + + + +if __name__ == '__main__': + print(doctest.testmod()) + diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyscreeze/__init__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyscreeze/__init__.py new file mode 100644 index 00000000..a4810c42 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyscreeze/__init__.py @@ -0,0 +1,500 @@ +# PyScreeze +# by Al Sweigart +# https://github.com/asweigart/pyscreeze +# BSD license + +""" +So, apparently Pillow support on Ubuntu 64-bit has several additional steps since it doesn't have JPEG/PNG support out of the box. Description here: + +https://stackoverflow.com/questions/7648200/pip-install-pil-e-tickets-1-no-jpeg-png-support +http://ubuntuforums.org/showthread.php?t=1751455 +""" + +__version__ = '0.1.21' + +import collections +import datetime +import os +import subprocess +import sys +import time +import errno +try: + from PIL import Image + from PIL import ImageOps +except ImportError: + pass +from contextlib import contextmanager + +try: + import cv2, numpy + useOpenCV = True + RUNNING_CV_2 = cv2.__version__[0] < '3' +except ImportError: + useOpenCV = False + +RUNNING_PYTHON_2 = sys.version_info[0] == 2 +if useOpenCV: + if RUNNING_CV_2: + LOAD_COLOR = cv2.CV_LOAD_IMAGE_COLOR + LOAD_GRAYSCALE = cv2.CV_LOAD_IMAGE_GRAYSCALE + else: + LOAD_COLOR = cv2.IMREAD_COLOR + LOAD_GRAYSCALE = cv2.IMREAD_GRAYSCALE + + +GRAYSCALE_DEFAULT = False + +# For version 0.1.19 I changed it so that ImageNotFoundException was raised +# instead of returning None. In hindsight, this change came too late, so I'm +# changing it back to returning None. But I'm also including this option for +# folks who would rather have it raise an exception. +USE_IMAGE_NOT_FOUND_EXCEPTION = False + +scrotExists = False +try: + if sys.platform not in ('java', 'darwin', 'win32'): + whichProc = subprocess.Popen( + ['which', 'scrot'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + scrotExists = whichProc.wait() == 0 +except OSError as ex: + if ex.errno == errno.ENOENT: + # if there is no "which" program to find scrot, then assume there + # is no scrot. + pass + else: + raise + + +if sys.platform == 'win32': + from ctypes import windll + + # win32 DC(DeviceContext) Manager + @contextmanager + def __win32_openDC(hWnd): + hDC = windll.user32.GetDC(hWnd) + if hDC == 0: #NULL + raise WindowsError("windll.user32.GetDC failed : return NULL") + try: + yield hDC + finally: + if windll.user32.ReleaseDC(hWnd, hDC) == 0: + raise WindowsError("windll.user32.ReleaseDC failed : return 0") + +Box = collections.namedtuple('Box', 'left top width height') +Point = collections.namedtuple('Point', 'x y') +RGB = collections.namedtuple('RGB', 'red green blue') + +class ImageNotFoundException(Exception): + pass # This is an exception class raised when the locate functions fail. + + +def _load_cv2(img, grayscale=None): + # load images if given filename, or convert as needed to opencv + # Alpha layer just causes failures at this point, so flatten to RGB. + # RGBA: load with -1 * cv2.CV_LOAD_IMAGE_COLOR to preserve alpha + # to matchTemplate, need template and image to be the same wrt having alpha + + if grayscale is None: + grayscale = GRAYSCALE_DEFAULT + if isinstance(img, str): + # The function imread loads an image from the specified file and + # returns it. If the image cannot be read (because of missing + # file, improper permissions, unsupported or invalid format), + # the function returns an empty matrix + # http://docs.opencv.org/3.0-beta/modules/imgcodecs/doc/reading_and_writing_images.html + if grayscale: + img_cv = cv2.imread(img, LOAD_GRAYSCALE) + else: + img_cv = cv2.imread(img, LOAD_COLOR) + if img_cv is None: + raise IOError("Failed to read %s because file is missing, " + "has improper permissions, or is an " + "unsupported or invalid format" % img) + elif isinstance(img, numpy.ndarray): + # don't try to convert an already-gray image to gray + if grayscale and len(img.shape) == 3: # and img.shape[2] == 3: + img_cv = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + else: + img_cv = img + elif hasattr(img, 'convert'): + # assume its a PIL.Image, convert to cv format + img_array = numpy.array(img.convert('RGB')) + img_cv = img_array[:, :, ::-1].copy() # -1 does RGB -> BGR + if grayscale: + img_cv = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY) + else: + raise TypeError('expected an image filename, OpenCV numpy array, or PIL image') + return img_cv + + +def _locateAll_opencv(needleImage, haystackImage, grayscale=None, limit=10000, region=None, step=1, + confidence=0.999): + """ faster but more memory-intensive than pure python + step 2 skips every other row and column = ~3x faster but prone to miss; + to compensate, the algorithm automatically reduces the confidence + threshold by 5% (which helps but will not avoid all misses). + limitations: + - OpenCV 3.x & python 3.x not tested + - RGBA images are treated as RBG (ignores alpha channel) + """ + if grayscale is None: + grayscale = GRAYSCALE_DEFAULT + + confidence = float(confidence) + + needleImage = _load_cv2(needleImage, grayscale) + needleHeight, needleWidth = needleImage.shape[:2] + haystackImage = _load_cv2(haystackImage, grayscale) + + if region: + haystackImage = haystackImage[region[1]:region[1]+region[3], + region[0]:region[0]+region[2]] + else: + region = (0, 0) # full image; these values used in the yield statement + if (haystackImage.shape[0] < needleImage.shape[0] or + haystackImage.shape[1] < needleImage.shape[1]): + # avoid semi-cryptic OpenCV error below if bad size + raise ValueError('needle dimension(s) exceed the haystack image or region dimensions') + + if step == 2: + confidence *= 0.95 + needleImage = needleImage[::step, ::step] + haystackImage = haystackImage[::step, ::step] + else: + step = 1 + + # get all matches at once, credit: https://stackoverflow.com/questions/7670112/finding-a-subimage-inside-a-numpy-image/9253805#9253805 + result = cv2.matchTemplate(haystackImage, needleImage, cv2.TM_CCOEFF_NORMED) + match_indices = numpy.arange(result.size)[(result > confidence).flatten()] + matches = numpy.unravel_index(match_indices[:limit], result.shape) + + if len(matches[0]) == 0: + if USE_IMAGE_NOT_FOUND_EXCEPTION: + raise ImageNotFoundException('Could not locate the image (highest confidence = %.3f)' % result.max()) + else: + return + + # use a generator for API consistency: + matchx = matches[1] * step + region[0] # vectorized + matchy = matches[0] * step + region[1] + for x, y in zip(matchx, matchy): + yield Box(x, y, needleWidth, needleHeight) + + +def _locateAll_python(needleImage, haystackImage, grayscale=None, limit=None, region=None, step=1): + # setup all the arguments + if grayscale is None: + grayscale = GRAYSCALE_DEFAULT + + needleFileObj = None + if isinstance(needleImage, str): + # 'image' is a filename, load the Image object + needleFileObj = open(needleImage, 'rb') + needleImage = Image.open(needleFileObj) + + haystackFileObj = None + if isinstance(haystackImage, str): + # 'image' is a filename, load the Image object + haystackFileObj = open(haystackImage, 'rb') + haystackImage = Image.open(haystackFileObj) + + if region is not None: + haystackImage = haystackImage.crop((region[0], region[1], region[0] + region[2], region[1] + region[3])) + else: + region = (0, 0) # set to 0 because the code always accounts for a region + + if grayscale: # if grayscale mode is on, convert the needle and haystack images to grayscale + needleImage = ImageOps.grayscale(needleImage) + haystackImage = ImageOps.grayscale(haystackImage) + else: + # if not using grayscale, make sure we are comparing RGB images, not RGBA images. + if needleImage.mode == 'RGBA': + needleImage = needleImage.convert('RGB') + if haystackImage.mode == 'RGBA': + haystackImage = haystackImage.convert('RGB') + + # setup some constants we'll be using in this function + needleWidth, needleHeight = needleImage.size + haystackWidth, haystackHeight = haystackImage.size + + needleImageData = tuple(needleImage.getdata()) + haystackImageData = tuple(haystackImage.getdata()) + + needleImageRows = [needleImageData[y * needleWidth:(y+1) * needleWidth] for y in range(needleHeight)] # LEFT OFF - check this + needleImageFirstRow = needleImageRows[0] + + assert len(needleImageFirstRow) == needleWidth, 'For some reason, the calculated width of first row of the needle image is not the same as the width of the image.' + assert [len(row) for row in needleImageRows] == [needleWidth] * needleHeight, 'For some reason, the needleImageRows aren\'t the same size as the original image.' + + numMatchesFound = 0 + + # NOTE: After running tests/benchmarks.py on the following code, it seem that having a step + # value greater than 1 does not give *any* significant performance improvements. + # Since using a step higher than 1 makes for less accurate matches, it will be + # set to 1. + step = 1 # hard-code step as 1 until a way to improve it can be figured out. + + if step == 1: + firstFindFunc = _kmp + else: + firstFindFunc = _steppingFind + + + for y in range(haystackHeight): # start at the leftmost column + for matchx in firstFindFunc(needleImageFirstRow, haystackImageData[y * haystackWidth:(y+1) * haystackWidth], step): + foundMatch = True + for searchy in range(1, needleHeight, step): + haystackStart = (searchy + y) * haystackWidth + matchx + if needleImageData[searchy * needleWidth:(searchy+1) * needleWidth] != haystackImageData[haystackStart:haystackStart + needleWidth]: + foundMatch = False + break + if foundMatch: + # Match found, report the x, y, width, height of where the matching region is in haystack. + numMatchesFound += 1 + yield Box(matchx + region[0], y + region[1], needleWidth, needleHeight) + if limit is not None and numMatchesFound >= limit: + # Limit has been reached. Close file handles. + if needleFileObj is not None: + needleFileObj.close() + if haystackFileObj is not None: + haystackFileObj.close() + return + + + # There was no limit or the limit wasn't reached, but close the file handles anyway. + if needleFileObj is not None: + needleFileObj.close() + if haystackFileObj is not None: + haystackFileObj.close() + + if numMatchesFound == 0: + if USE_IMAGE_NOT_FOUND_EXCEPTION: + raise ImageNotFoundException('Could not locate the image.') + else: + return + + +def locate(needleImage, haystackImage, **kwargs): + # Note: The gymnastics in this function is because we want to make sure to exhaust the iterator so that the needle and haystack files are closed in locateAll. + kwargs['limit'] = 1 + points = tuple(locateAll(needleImage, haystackImage, **kwargs)) + if len(points) > 0: + return points[0] + else: + if USE_IMAGE_NOT_FOUND_EXCEPTION: + raise ImageNotFoundException('Could not locate the image.') + else: + return None + + +def locateOnScreen(image, minSearchTime=0, **kwargs): + """minSearchTime - amount of time in seconds to repeat taking + screenshots and trying to locate a match. The default of 0 performs + a single search. + """ + start = time.time() + while True: + try: + screenshotIm = screenshot(region=None) # the locateAll() function must handle cropping to return accurate coordinates, so don't pass a region here. + retVal = locate(image, screenshotIm, **kwargs) + try: + screenshotIm.fp.close() + except AttributeError: + # Screenshots on Windows won't have an fp since they came from + # ImageGrab, not a file. Screenshots on Linux will have fp set + # to None since the file has been unlinked + pass + if retVal or time.time() - start > minSearchTime: + return retVal + except ImageNotFoundException: + if time.time() - start > minSearchTime: + if USE_IMAGE_NOT_FOUND_EXCEPTION: + raise + else: + return None + + +def locateAllOnScreen(image, **kwargs): + screenshotIm = screenshot(region=None) # the locateAll() function must handle cropping to return accurate coordinates, so don't pass a region here. + retVal = locateAll(image, screenshotIm, **kwargs) + try: + screenshotIm.fp.close() + except AttributeError: + # Screenshots on Windows won't have an fp since they came from + # ImageGrab, not a file. Screenshots on Linux will have fp set + # to None since the file has been unlinked + pass + return retVal + + +def locateCenterOnScreen(image, **kwargs): + coords = locateOnScreen(image, **kwargs) + return center(coords) + + +def showRegionOnScreen(region, outlineColor='red', filename='_showRegionOnScreen.png'): + from PIL import ImageDraw # this is the only function that needs this, and it's rarely called + screenshotIm = screenshot() + draw = ImageDraw.Draw(screenshotIm) + region = (region[0], region[1], region[2] + region[0], region[3] + region[1]) # convert from (left, top, right, bottom) to (left, top, width, height) + draw.rectangle(region, outline=outlineColor) + screenshotIm.save(filename) + + +def _screenshot_win32(imageFilename=None, region=None): + try: + im = ImageGrab.grab() + except NameError: + raise ImportError('Pillow module must be installed to use screenshot functions on Windows.') + if region is not None: + assert len(region) == 4, 'region argument must be a tuple of four ints' + region = [int(x) for x in region] + im = im.crop((region[0], region[1], region[2] + region[0], region[3] + region[1])) + if imageFilename is not None: + im.save(imageFilename) + return im + + +def _screenshot_osx(imageFilename=None, region=None): + if imageFilename is None: + tmpFilename = 'screenshot%s.png' % (datetime.datetime.now().strftime('%Y-%m%d_%H-%M-%S-%f')) + else: + tmpFilename = imageFilename + subprocess.call(['screencapture', '-x', tmpFilename]) + im = Image.open(tmpFilename) + + if region is not None: + assert len(region) == 4, 'region argument must be a tuple of four ints' + region = [int(x) for x in region] + im = im.crop((region[0], region[1], region[2] + region[0], region[3] + region[1])) + os.unlink(tmpFilename) # delete image of entire screen to save cropped version + im.save(tmpFilename) + else: + # force loading before unlinking, Image.open() is lazy + im.load() + + if imageFilename is None: + os.unlink(tmpFilename) + return im + + +def _screenshot_linux(imageFilename=None, region=None): + if not scrotExists: + raise NotImplementedError('"scrot" must be installed to use screenshot functions in Linux. Run: sudo apt-get install scrot') + if imageFilename is None: + tmpFilename = '.screenshot%s.png' % (datetime.datetime.now().strftime('%Y-%m%d_%H-%M-%S-%f')) + else: + tmpFilename = imageFilename + if scrotExists: + subprocess.call(['scrot', tmpFilename]) + im = Image.open(tmpFilename) + + if region is not None: + assert len(region) == 4, 'region argument must be a tuple of four ints' + region = [int(x) for x in region] + im = im.crop((region[0], region[1], region[2] + region[0], region[3] + region[1])) + os.unlink(tmpFilename) # delete image of entire screen to save cropped version + im.save(tmpFilename) + else: + # force loading before unlinking, Image.open() is lazy + im.load() + + if imageFilename is None: + os.unlink(tmpFilename) + return im + else: + raise Exception('The scrot program must be installed to take a screenshot with PyScreeze on Linux. Run: sudo apt-get install scrot') + + + +def _kmp(needle, haystack, _dummy): # Knuth-Morris-Pratt search algorithm implementation (to be used by screen capture) + # build table of shift amounts + shifts = [1] * (len(needle) + 1) + shift = 1 + for pos in range(len(needle)): + while shift <= pos and needle[pos] != needle[pos-shift]: + shift += shifts[pos-shift] + shifts[pos+1] = shift + + # do the actual search + startPos = 0 + matchLen = 0 + for c in haystack: + while matchLen == len(needle) or \ + matchLen >= 0 and needle[matchLen] != c: + startPos += shifts[matchLen] + matchLen -= shifts[matchLen] + matchLen += 1 + if matchLen == len(needle): + yield startPos + + +def _steppingFind(needle, haystack, step): + for startPos in range(0, len(haystack) - len(needle) + 1): + foundMatch = True + for pos in range(0, len(needle), step): + if haystack[startPos + pos] != needle[pos]: + foundMatch = False + break + if foundMatch: + yield startPos + + +def center(coords): + return Point(coords[0] + int(coords[2] / 2), coords[1] + int(coords[3] / 2)) + + +def pixelMatchesColor(x, y, expectedRGBColor, tolerance=0): + pix = pixel(x, y) + if len(pix) == 3 or len(expectedRGBColor) == 3: #RGB mode + r, g, b = pix[:3] + exR, exG, exB = expectedRGBColor[:3] + return (abs(r - exR) <= tolerance) and (abs(g - exG) <= tolerance) and (abs(b - exB) <= tolerance) + elif len(pix) == 4 and len(expectedRGBColor) == 4: #RGBA mode + r, g, b, a = pix + exR, exG, exB, exA = expectedRGBColor + return (abs(r - exR) <= tolerance) and (abs(g - exG) <= tolerance) and (abs(b - exB) <= tolerance) and (abs(a - exA) <= tolerance) + else: + assert False, 'Color mode was expected to be length 3 (RGB) or 4 (RGBA), but pixel is length %s and expectedRGBColor is length %s' % (len(pix), len(expectedRGBColor)) + +def pixel(x, y): + if sys.platform == 'win32': + # On Windows, calling GetDC() and GetPixel() is twice as fast as using our screenshot() function. + with __win32_openDC(0) as hdc: # handle will be released automatically + color = windll.gdi32.GetPixel(hdc, x, y) + if color < 0: + raise WindowsError("windll.gdi32.GetPixel faild : return {}".format(color)) + # color is in the format 0xbbggrr https://msdn.microsoft.com/en-us/library/windows/desktop/dd183449(v=vs.85).aspx + bbggrr = "{:0>6x}".format(color) # bbggrr => 'bbggrr' (hex) + b, g, r = (int(bbggrr[i:i+2], 16) for i in range(0, 6, 2)) + return (r, g, b) + else: + # Need to select only the first three values of the color in + # case the returned pixel has an alpha channel + return RGB(*(screenshot().getpixel((x, y))[:3])) + + +# set the screenshot() function based on the platform running this module +if sys.platform.startswith('java'): + raise NotImplementedError('Jython is not yet supported by PyScreeze.') +elif sys.platform == 'darwin': + screenshot = _screenshot_osx +elif sys.platform == 'win32': + screenshot = _screenshot_win32 + try: + from PIL import ImageGrab + except ImportError: + pass +else: + screenshot = _screenshot_linux + +grab = screenshot # for compatibility with Pillow/PIL's ImageGrab module. + +# set the locateAll function to use opencv if possible; python 3 needs opencv 3.0+ +if useOpenCV: + locateAll = _locateAll_opencv + if not RUNNING_PYTHON_2 and cv2.__version__ < '3': + locateAll = _locateAll_python +else: + locateAll = _locateAll_python diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pytweening/__init__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pytweening/__init__.py new file mode 100644 index 00000000..38b9c6b8 --- /dev/null +++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pytweening/__init__.py @@ -0,0 +1,594 @@ +from __future__ import division + +import math + +__version__ = '1.0.3' + + +# from http://www.roguebasin.com/index.php?title=Bresenham%27s_Line_Algorithm#Python +def getLine(x1, y1, x2, y2): + """Returns a list of (x, y) tuples of every point on a line between + (x1, y1) and (x2, y2). The x and y values inside the tuple are integers. + + Line generated with the Bresenham algorithm. + + Args: + x1 (int, float): The x coordinate of the line's start point. + y1 (int, float): The y coordinate of the line's start point. + x2 (int, float): The x coordinate of the line's end point. + y2 (int, float): The y coordiante of the line's end point. + + Returns: + [(x1, y1), (x2, y2), (x3, y3), ...] + + Example: + >>> getLine(0, 0, 6, 6) + [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)] + >>> getLine(0, 0, 3, 6) + [(0, 0), (0, 1), (1, 2), (1, 3), (2, 4), (2, 5), (3, 6)] + >>> getLine(3, 3, -3, -3) + [(3, 3), (2, 2), (1, 1), (0, 0), (-1, -1), (-2, -2), (-3, -3)] + """ + x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) + points = [] + issteep = abs(y2-y1) > abs(x2-x1) + if issteep: + x1, y1 = y1, x1 + x2, y2 = y2, x2 + rev = False + if x1 > x2: + x1, x2 = x2, x1 + y1, y2 = y2, y1 + rev = True + deltax = x2 - x1 + deltay = abs(y2-y1) + error = int(deltax / 2) + y = y1 + ystep = None + if y1 < y2: + ystep = 1 + else: + ystep = -1 + for x in range(x1, x2 + 1): + if issteep: + points.append((y, x)) + else: + points.append((x, y)) + error -= deltay + if error < 0: + y += ystep + error += deltax + # Reverse the list if the coordinates were reversed + if rev: + points.reverse() + return points + + +def getPointOnLine(x1, y1, x2, y2, n): + """Returns the (x, y) tuple of the point that has progressed a proportion + n along the line defined by the two x, y coordinates. + + Args: + x1 (int, float): The x coordinate of the line's start point. + y1 (int, float): The y coordinate of the line's start point. + x2 (int, float): The x coordinate of the line's end point. + y2 (int, float): The y coordiante of the line's end point. + n (float): Progress along the line. 0.0 is the start point, 1.0 is the end point. 0.5 is the midpoint. This value can be less than 0.0 or greater than 1.0. + + Returns: + Tuple of floats for the x, y coordinate of the point. + + Example: + >>> getPointOnLine(0, 0, 6, 6, 0) + (0, 0) + >>> getPointOnLine(0, 0, 6, 6, 1) + (6, 6) + >>> getPointOnLine(0, 0, 6, 6, 0.5) + (3.0, 3.0) + >>> getPointOnLine(0, 0, 6, 6, 0.75) + (4.5, 4.5) + >>> getPointOnLine(3, 3, -3, -3, 0.5) + (0.0, 0.0) + >>> getPointOnLine(3, 3, -3, -3, 0.25) + (1.5, 1.5) + >>> getPointOnLine(3, 3, -3, -3, 0.75) + (-1.5, -1.5) + """ + x = ((x2 - x1) * n) + x1 + y = ((y2 - y1) * n) + y1 + return (x, y) + + +def _checkRange(n): + """Raises ValueError if the argument is not between 0.0 and 1.0. + """ + if not 0.0 <= n <= 1.0: + raise ValueError('Argument must be between 0.0 and 1.0.') + + +def linear(n): + """A linear tween function + + Example: + >>> linear(0.0) + 0.0 + >>> linear(0.2) + 0.2 + >>> linear(0.4) + 0.4 + >>> linear(0.6) + 0.6 + >>> linear(0.8) + 0.8 + >>> linear(1.0) + 1.0 + """ + _checkRange(n) + return n + + +def easeInQuad(n): + """A quadratic tween function that begins slow and then accelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return n**2 + + +def easeOutQuad(n): + """A quadratic tween function that begins fast and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return -n * (n-2) + + +def easeInOutQuad(n): + """A quadratic tween function that accelerates, reaches the midpoint, and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + if n < 0.5: + return 2 * n**2 + else: + n = n * 2 - 1 + return -0.5 * (n*(n-2) - 1) + + +def easeInCubic(n): + """A cubic tween function that begins slow and then accelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return n**3 + + +def easeOutCubic(n): + """A cubic tween function that begins fast and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = n - 1 + return n**3 + 1 + + +def easeInOutCubic(n): + """A cubic tween function that accelerates, reaches the midpoint, and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = 2 * n + if n < 1: + return 0.5 * n**3 + else: + n = n - 2 + return 0.5 * (n**3 + 2) + + +def easeInQuart(n): + """A quartic tween function that begins slow and then accelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return n**4 + + +def easeOutQuart(n): + """A quartic tween function that begins fast and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = n - 1 + return -(n**4 - 1) + + +def easeInOutQuart(n): + """A quartic tween function that accelerates, reaches the midpoint, and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = 2 * n + if n < 1: + return 0.5 * n**4 + else: + n = n - 2 + return -0.5 * (n**4 - 2) + + +def easeInQuint(n): + """A quintic tween function that begins slow and then accelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return n**5 + + +def easeOutQuint(n): + """A quintic tween function that begins fast and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = n - 1 + return n**5 + 1 + + +def easeInOutQuint(n): + """A quintic tween function that accelerates, reaches the midpoint, and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = 2 * n + if n < 1: + return 0.5 * n**5 + else: + n = n - 2 + return 0.5 * (n**5 + 2) + + +def easeInSine(n): + """A sinusoidal tween function that begins slow and then accelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return -1 * math.cos(n * math.pi / 2) + 1 + + +def easeOutSine(n): + """A sinusoidal tween function that begins fast and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return math.sin(n * math.pi / 2) + + +def easeInOutSine(n): + """A sinusoidal tween function that accelerates, reaches the midpoint, and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return -0.5 * (math.cos(math.pi * n) - 1) + + +def easeInExpo(n): + """An exponential tween function that begins slow and then accelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + if n == 0: + return 0 + else: + return 2**(10 * (n - 1)) + + +def easeOutExpo(n): + """An exponential tween function that begins fast and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + if n == 1: + return 1 + else: + return -(2 ** (-10 * n)) + 1 + + +def easeInOutExpo(n): + """An exponential tween function that accelerates, reaches the midpoint, and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + if n == 0: + return 0 + elif n == 1: + return 1 + else: + n = n * 2 + if n < 1: + return 0.5 * 2**(10 * (n - 1)) + else: + n -= 1 + # 0.5 * (-() + 2) + return 0.5 * (-1 * (2 ** (-10 * n)) + 2) + + +def easeInCirc(n): + """A circular tween function that begins slow and then accelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return -1 * (math.sqrt(1 - n * n) - 1) + + +def easeOutCirc(n): + """A circular tween function that begins fast and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n -= 1 + return math.sqrt(1 - (n * n)) + + +def easeInOutCirc(n): + """A circular tween function that accelerates, reaches the midpoint, and then decelerates. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = n * 2 + if n < 1: + return -0.5 * (math.sqrt(1 - n**2) - 1) + else: + n = n - 2 + return 0.5 * (math.sqrt(1 - n**2) + 1) + + +def easeInElastic(n, amplitude=1, period=0.3): + """An elastic tween function that begins with an increasing wobble and then snaps into the destination. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return 1 - easeOutElastic(1-n, amplitude=amplitude, period=period) + + +def easeOutElastic(n, amplitude=1, period=0.3): + """An elastic tween function that overshoots the destination and then "rubber bands" into the destination. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + + if amplitude < 1: + amplitude = 1 + s = period / 4 + else: + s = period / (2 * math.pi) * math.asin(1 / amplitude) + + return amplitude * 2**(-10*n) * math.sin((n-s)*(2*math.pi / period)) + 1 + + +def easeInOutElastic(n, amplitude=1, period=0.5): + """An elastic tween function wobbles towards the midpoint. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n *= 2 + if n < 1: + return easeInElastic(n, amplitude=amplitude, period=period) / 2 + else: + return easeOutElastic(n-1, amplitude=amplitude, period=period) / 2 + 0.5 + + +def easeInBack(n, s=1.70158): + """A tween function that backs up first at the start and then goes to the destination. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return n * n * ((s + 1) * n - s) + + +def easeOutBack(n, s=1.70158): + """A tween function that overshoots the destination a little and then backs into the destination. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = n - 1 + return n * n * ((s + 1) * n + s) + 1 + + +def easeInOutBack(n, s=1.70158): + """A "back-in" tween function that overshoots both the start and destination. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + n = n * 2 + if n < 1: + s *= 1.525 + return 0.5 * (n * n * ((s + 1) * n - s)) + else: + n -= 2 + s *= 1.525 + return 0.5 * (n * n * ((s + 1) * n + s) + 2) + + +def easeInBounce(n): + """A bouncing tween function that begins bouncing and then jumps to the destination. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + return 1 - easeOutBounce(1 - n) + + +def easeOutBounce(n): + """A bouncing tween function that hits the destination and then bounces to rest. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + if n < (1/2.75): + return 7.5625 * n * n + elif n < (2/2.75): + n -= (1.5/2.75) + return 7.5625 * n * n + 0.75 + elif n < (2.5/2.75): + n -= (2.25/2.75) + return 7.5625 * n * n + 0.9375 + else: + n -= (2.65/2.75) + return 7.5625 * n * n + 0.984375 + + +def easeInOutBounce(n): + """A bouncing tween function that bounces at the start and end. + + Args: + n (float): The time progress, starting at 0.0 and ending at 1.0. + + Returns: + (float) The line progress, starting at 0.0 and ending at 1.0. Suitable for passing to getPointOnLine(). + """ + _checkRange(n) + if n < 0.5: + return easeInBounce(n * 2) * 0.5 + else: + return easeOutBounce(n * 2 - 1) * 0.5 + 0.5 diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/UIAutomationClient.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/UIAutomationClient.py new file mode 100644 index 00000000..9972201f --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/UIAutomationClient.py @@ -0,0 +1,3 @@ +from comtypes.gen import _944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0 +globals().update(_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.__dict__) +__name__ = 'comtypes.gen.UIAutomationClient' \ No newline at end of file diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/_00020430_0000_0000_C000_000000000046_0_2_0.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/_00020430_0000_0000_C000_000000000046_0_2_0.py new file mode 100644 index 00000000..7d983e6e --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/_00020430_0000_0000_C000_000000000046_0_2_0.py @@ -0,0 +1,396 @@ +# -*- coding: mbcs -*- +typelib_path = 'C:\\Windows\\System32\\stdole2.tlb' +_lcid = 0 # change this if required +from ctypes import * +from ctypes.wintypes import VARIANT_BOOL +FONTITALIC = VARIANT_BOOL +from comtypes import IUnknown +OLE_COLOR = c_ulong +FONTUNDERSCORE = VARIANT_BOOL +from comtypes.automation import IDispatch +from comtypes import GUID +from comtypes import BSTR +from comtypes import dispid +from comtypes import DISPMETHOD, DISPPROPERTY, helpstring +FONTSTRIKETHROUGH = VARIANT_BOOL +OLE_XPOS_PIXELS = c_int +OLE_HANDLE = c_int +OLE_XSIZE_HIMETRIC = c_int +OLE_YSIZE_HIMETRIC = c_int +OLE_XPOS_HIMETRIC = c_int +OLE_YPOS_HIMETRIC = c_int +from ctypes import HRESULT +from comtypes import helpstring +from comtypes import COMMETHOD +from comtypes import CoClass +FONTNAME = BSTR +from comtypes import GUID +FONTSIZE = c_longlong +OLE_YPOS_PIXELS = c_int +OLE_XSIZE_PIXELS = c_int +from comtypes.automation import DISPPARAMS +OLE_YSIZE_PIXELS = c_int +OLE_XPOS_CONTAINER = c_float +from comtypes.automation import IEnumVARIANT +OLE_YPOS_CONTAINER = c_float +OLE_XSIZE_CONTAINER = c_float +OLE_YSIZE_CONTAINER = c_float +from comtypes.automation import EXCEPINFO +OLE_OPTEXCLUSIVE = VARIANT_BOOL +OLE_CANCELBOOL = VARIANT_BOOL +OLE_ENABLEDEFAULTBOOL = VARIANT_BOOL +FONTBOLD = VARIANT_BOOL + + +class FontEvents(IDispatch): + _case_insensitive_ = True + 'Event interface for the Font object' + _iid_ = GUID('{4EF6100A-AF88-11D0-9846-00C04FC29993}') + _idlflags_ = ['hidden'] + _methods_ = [] +FontEvents._disp_methods_ = [ + DISPMETHOD([dispid(9)], None, 'FontChanged', + ( ['in'], BSTR, 'PropertyName' )), +] + +# values for enumeration 'LoadPictureConstants' +Default = 0 +Monochrome = 1 +VgaColor = 2 +Color = 4 +LoadPictureConstants = c_int # enum +class Picture(IDispatch): + _case_insensitive_ = True + _iid_ = GUID('{7BF80981-BF32-101A-8BBB-00AA00300CAB}') + _idlflags_ = [] + _methods_ = [] +Picture._disp_methods_ = [ + DISPPROPERTY([dispid(0), 'readonly'], OLE_HANDLE, 'Handle'), + DISPPROPERTY([dispid(2)], OLE_HANDLE, 'hPal'), + DISPPROPERTY([dispid(3), 'readonly'], c_short, 'Type'), + DISPPROPERTY([dispid(4), 'readonly'], OLE_XSIZE_HIMETRIC, 'Width'), + DISPPROPERTY([dispid(5), 'readonly'], OLE_YSIZE_HIMETRIC, 'Height'), + DISPMETHOD([dispid(6)], None, 'Render', + ( [], c_int, 'hdc' ), + ( [], c_int, 'x' ), + ( [], c_int, 'y' ), + ( [], c_int, 'cx' ), + ( [], c_int, 'cy' ), + ( [], OLE_XPOS_HIMETRIC, 'xSrc' ), + ( [], OLE_YPOS_HIMETRIC, 'ySrc' ), + ( [], OLE_XSIZE_HIMETRIC, 'cxSrc' ), + ( [], OLE_YSIZE_HIMETRIC, 'cySrc' ), + ( [], c_void_p, 'prcWBounds' )), +] +IPictureDisp = Picture +class IFont(IUnknown): + _case_insensitive_ = True + 'Font Object' + _iid_ = GUID('{BEF6E002-A874-101A-8BBA-00AA00300CAB}') + _idlflags_ = ['hidden'] +IFont._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'Name', + ( ['out', 'retval'], POINTER(BSTR), 'pname' )), + COMMETHOD(['propput'], HRESULT, 'Name', + ( ['in'], BSTR, 'pname' )), + COMMETHOD(['propget'], HRESULT, 'Size', + ( ['out', 'retval'], POINTER(c_longlong), 'psize' )), + COMMETHOD(['propput'], HRESULT, 'Size', + ( ['in'], c_longlong, 'psize' )), + COMMETHOD(['propget'], HRESULT, 'Bold', + ( ['out', 'retval'], POINTER(VARIANT_BOOL), 'pbold' )), + COMMETHOD(['propput'], HRESULT, 'Bold', + ( ['in'], VARIANT_BOOL, 'pbold' )), + COMMETHOD(['propget'], HRESULT, 'Italic', + ( ['out', 'retval'], POINTER(VARIANT_BOOL), 'pitalic' )), + COMMETHOD(['propput'], HRESULT, 'Italic', + ( ['in'], VARIANT_BOOL, 'pitalic' )), + COMMETHOD(['propget'], HRESULT, 'Underline', + ( ['out', 'retval'], POINTER(VARIANT_BOOL), 'punderline' )), + COMMETHOD(['propput'], HRESULT, 'Underline', + ( ['in'], VARIANT_BOOL, 'punderline' )), + COMMETHOD(['propget'], HRESULT, 'Strikethrough', + ( ['out', 'retval'], POINTER(VARIANT_BOOL), 'pstrikethrough' )), + COMMETHOD(['propput'], HRESULT, 'Strikethrough', + ( ['in'], VARIANT_BOOL, 'pstrikethrough' )), + COMMETHOD(['propget'], HRESULT, 'Weight', + ( ['out', 'retval'], POINTER(c_short), 'pweight' )), + COMMETHOD(['propput'], HRESULT, 'Weight', + ( ['in'], c_short, 'pweight' )), + COMMETHOD(['propget'], HRESULT, 'Charset', + ( ['out', 'retval'], POINTER(c_short), 'pcharset' )), + COMMETHOD(['propput'], HRESULT, 'Charset', + ( ['in'], c_short, 'pcharset' )), + COMMETHOD(['propget'], HRESULT, 'hFont', + ( ['out', 'retval'], POINTER(OLE_HANDLE), 'phfont' )), + COMMETHOD([], HRESULT, 'Clone', + ( ['out'], POINTER(POINTER(IFont)), 'ppfont' )), + COMMETHOD([], HRESULT, 'IsEqual', + ( ['in'], POINTER(IFont), 'pfontOther' )), + COMMETHOD([], HRESULT, 'SetRatio', + ( ['in'], c_int, 'cyLogical' ), + ( ['in'], c_int, 'cyHimetric' )), + COMMETHOD([], HRESULT, 'AddRefHfont', + ( ['in'], OLE_HANDLE, 'hFont' )), + COMMETHOD([], HRESULT, 'ReleaseHfont', + ( ['in'], OLE_HANDLE, 'hFont' )), +] +################################################################ +## code template for IFont implementation +##class IFont_Impl(object): +## def _get(self): +## '-no docstring-' +## #return pname +## def _set(self, pname): +## '-no docstring-' +## Name = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return psize +## def _set(self, psize): +## '-no docstring-' +## Size = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return pbold +## def _set(self, pbold): +## '-no docstring-' +## Bold = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return pitalic +## def _set(self, pitalic): +## '-no docstring-' +## Italic = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return punderline +## def _set(self, punderline): +## '-no docstring-' +## Underline = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return pstrikethrough +## def _set(self, pstrikethrough): +## '-no docstring-' +## Strikethrough = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return pweight +## def _set(self, pweight): +## '-no docstring-' +## Weight = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return pcharset +## def _set(self, pcharset): +## '-no docstring-' +## Charset = property(_get, _set, doc = _set.__doc__) +## +## @property +## def hFont(self): +## '-no docstring-' +## #return phfont +## +## def Clone(self): +## '-no docstring-' +## #return ppfont +## +## def IsEqual(self, pfontOther): +## '-no docstring-' +## #return +## +## def SetRatio(self, cyLogical, cyHimetric): +## '-no docstring-' +## #return +## +## def AddRefHfont(self, hFont): +## '-no docstring-' +## #return +## +## def ReleaseHfont(self, hFont): +## '-no docstring-' +## #return +## + +class StdPicture(CoClass): + _reg_clsid_ = GUID('{0BE35204-8F91-11CE-9DE3-00AA004BB851}') + _idlflags_ = [] + _typelib_path_ = typelib_path + _reg_typelib_ = ('{00020430-0000-0000-C000-000000000046}', 2, 0) +class IPicture(IUnknown): + _case_insensitive_ = True + 'Picture Object' + _iid_ = GUID('{7BF80980-BF32-101A-8BBB-00AA00300CAB}') + _idlflags_ = ['hidden'] +StdPicture._com_interfaces_ = [Picture, IPicture] + +class Library(object): + 'OLE Automation' + name = 'stdole' + _reg_typelib_ = ('{00020430-0000-0000-C000-000000000046}', 2, 0) + +IFontEventsDisp = FontEvents +class StdFont(CoClass): + _reg_clsid_ = GUID('{0BE35203-8F91-11CE-9DE3-00AA004BB851}') + _idlflags_ = [] + _typelib_path_ = typelib_path + _reg_typelib_ = ('{00020430-0000-0000-C000-000000000046}', 2, 0) +class Font(IDispatch): + _case_insensitive_ = True + _iid_ = GUID('{BEF6E003-A874-101A-8BBA-00AA00300CAB}') + _idlflags_ = [] + _methods_ = [] +StdFont._com_interfaces_ = [Font, IFont] +StdFont._outgoing_interfaces_ = [FontEvents] + +IPicture._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'Handle', + ( ['out', 'retval'], POINTER(OLE_HANDLE), 'phandle' )), + COMMETHOD(['propget'], HRESULT, 'hPal', + ( ['out', 'retval'], POINTER(OLE_HANDLE), 'phpal' )), + COMMETHOD(['propget'], HRESULT, 'Type', + ( ['out', 'retval'], POINTER(c_short), 'ptype' )), + COMMETHOD(['propget'], HRESULT, 'Width', + ( ['out', 'retval'], POINTER(OLE_XSIZE_HIMETRIC), 'pwidth' )), + COMMETHOD(['propget'], HRESULT, 'Height', + ( ['out', 'retval'], POINTER(OLE_YSIZE_HIMETRIC), 'pheight' )), + COMMETHOD([], HRESULT, 'Render', + ( ['in'], c_int, 'hdc' ), + ( ['in'], c_int, 'x' ), + ( ['in'], c_int, 'y' ), + ( ['in'], c_int, 'cx' ), + ( ['in'], c_int, 'cy' ), + ( ['in'], OLE_XPOS_HIMETRIC, 'xSrc' ), + ( ['in'], OLE_YPOS_HIMETRIC, 'ySrc' ), + ( ['in'], OLE_XSIZE_HIMETRIC, 'cxSrc' ), + ( ['in'], OLE_YSIZE_HIMETRIC, 'cySrc' ), + ( ['in'], c_void_p, 'prcWBounds' )), + COMMETHOD(['propput'], HRESULT, 'hPal', + ( ['in'], OLE_HANDLE, 'phpal' )), + COMMETHOD(['propget'], HRESULT, 'CurDC', + ( ['out', 'retval'], POINTER(c_int), 'phdcOut' )), + COMMETHOD([], HRESULT, 'SelectPicture', + ( ['in'], c_int, 'hdcIn' ), + ( ['out'], POINTER(c_int), 'phdcOut' ), + ( ['out'], POINTER(OLE_HANDLE), 'phbmpOut' )), + COMMETHOD(['propget'], HRESULT, 'KeepOriginalFormat', + ( ['out', 'retval'], POINTER(VARIANT_BOOL), 'pfkeep' )), + COMMETHOD(['propput'], HRESULT, 'KeepOriginalFormat', + ( ['in'], VARIANT_BOOL, 'pfkeep' )), + COMMETHOD([], HRESULT, 'PictureChanged'), + COMMETHOD([], HRESULT, 'SaveAsFile', + ( ['in'], c_void_p, 'pstm' ), + ( ['in'], VARIANT_BOOL, 'fSaveMemCopy' ), + ( ['out'], POINTER(c_int), 'pcbSize' )), + COMMETHOD(['propget'], HRESULT, 'Attributes', + ( ['out', 'retval'], POINTER(c_int), 'pdwAttr' )), + COMMETHOD([], HRESULT, 'SetHdc', + ( ['in'], OLE_HANDLE, 'hdc' )), +] +################################################################ +## code template for IPicture implementation +##class IPicture_Impl(object): +## @property +## def Handle(self): +## '-no docstring-' +## #return phandle +## +## def _get(self): +## '-no docstring-' +## #return phpal +## def _set(self, phpal): +## '-no docstring-' +## hPal = property(_get, _set, doc = _set.__doc__) +## +## @property +## def Type(self): +## '-no docstring-' +## #return ptype +## +## @property +## def Width(self): +## '-no docstring-' +## #return pwidth +## +## @property +## def Height(self): +## '-no docstring-' +## #return pheight +## +## def Render(self, hdc, x, y, cx, cy, xSrc, ySrc, cxSrc, cySrc, prcWBounds): +## '-no docstring-' +## #return +## +## @property +## def CurDC(self): +## '-no docstring-' +## #return phdcOut +## +## def SelectPicture(self, hdcIn): +## '-no docstring-' +## #return phdcOut, phbmpOut +## +## def _get(self): +## '-no docstring-' +## #return pfkeep +## def _set(self, pfkeep): +## '-no docstring-' +## KeepOriginalFormat = property(_get, _set, doc = _set.__doc__) +## +## def PictureChanged(self): +## '-no docstring-' +## #return +## +## def SaveAsFile(self, pstm, fSaveMemCopy): +## '-no docstring-' +## #return pcbSize +## +## @property +## def Attributes(self): +## '-no docstring-' +## #return pdwAttr +## +## def SetHdc(self, hdc): +## '-no docstring-' +## #return +## + + +# values for enumeration 'OLE_TRISTATE' +Unchecked = 0 +Checked = 1 +Gray = 2 +OLE_TRISTATE = c_int # enum +Font._disp_methods_ = [ + DISPPROPERTY([dispid(0)], BSTR, 'Name'), + DISPPROPERTY([dispid(2)], c_longlong, 'Size'), + DISPPROPERTY([dispid(3)], VARIANT_BOOL, 'Bold'), + DISPPROPERTY([dispid(4)], VARIANT_BOOL, 'Italic'), + DISPPROPERTY([dispid(5)], VARIANT_BOOL, 'Underline'), + DISPPROPERTY([dispid(6)], VARIANT_BOOL, 'Strikethrough'), + DISPPROPERTY([dispid(7)], c_short, 'Weight'), + DISPPROPERTY([dispid(8)], c_short, 'Charset'), +] +IFontDisp = Font +__all__ = [ 'OLE_TRISTATE', 'FONTITALIC', 'OLE_OPTEXCLUSIVE', 'Font', + 'OLE_ENABLEDEFAULTBOOL', 'OLE_YPOS_CONTAINER', + 'OLE_XPOS_HIMETRIC', 'OLE_XSIZE_CONTAINER', 'IPictureDisp', + 'OLE_YSIZE_CONTAINER', 'OLE_XPOS_CONTAINER', + 'OLE_CANCELBOOL', 'LoadPictureConstants', 'Color', + 'FONTBOLD', 'OLE_HANDLE', 'Checked', 'Default', 'FONTSIZE', + 'StdPicture', 'StdFont', 'FontEvents', 'FONTSTRIKETHROUGH', + 'IPicture', 'Unchecked', 'OLE_XSIZE_HIMETRIC', 'IFont', + 'Monochrome', 'OLE_COLOR', 'Gray', 'OLE_YPOS_HIMETRIC', + 'OLE_YPOS_PIXELS', 'OLE_YSIZE_PIXELS', 'OLE_XPOS_PIXELS', + 'IFontEventsDisp', 'IFontDisp', 'FONTUNDERSCORE', + 'OLE_XSIZE_PIXELS', 'VgaColor', 'Picture', + 'OLE_YSIZE_HIMETRIC', 'FONTNAME'] +from comtypes import _check_version; _check_version('') diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py new file mode 100644 index 00000000..9a6fd0f5 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py @@ -0,0 +1,5044 @@ +# -*- coding: mbcs -*- +typelib_path = 'UIAutomationCore.dll' +_lcid = 0 # change this if required +from ctypes import * +import comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0 +from comtypes import GUID +from ctypes import HRESULT +from comtypes import helpstring +from comtypes import COMMETHOD +from comtypes import dispid +from ctypes.wintypes import tagPOINT +from comtypes.automation import VARIANT +from comtypes.automation import _midlSAFEARRAY +from comtypes import BSTR +from comtypes import IUnknown +from ctypes.wintypes import tagRECT +from comtypes import CoClass +from ctypes.wintypes import tagRECT +from comtypes.automation import IDispatch +WSTRING = c_wchar_p + + +UIA_WindowWindowInteractionStatePropertyId = 30076 # Constant c_int +UIA_FlowsFromPropertyId = 30148 # Constant c_int +UIA_WindowWindowVisualStatePropertyId = 30075 # Constant c_int +UIA_Transform2ZoomMaximumPropertyId = 30147 # Constant c_int +UIA_WindowCanMinimizePropertyId = 30074 # Constant c_int +UIA_Transform2ZoomMinimumPropertyId = 30146 # Constant c_int +class IUIAutomationTextRangeArray(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{CE4AE76A-E717-4C98-81EA-47371D028EB6}') + _idlflags_ = [] +class IUIAutomationTextRange(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{A543CC6A-F4AE-494B-8239-C814481187A8}') + _idlflags_ = [] +IUIAutomationTextRangeArray._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'Length', + ( ['out', 'retval'], POINTER(c_int), 'Length' )), + COMMETHOD([], HRESULT, 'GetElement', + ( ['in'], c_int, 'index' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'element' )), +] +################################################################ +## code template for IUIAutomationTextRangeArray implementation +##class IUIAutomationTextRangeArray_Impl(object): +## @property +## def Length(self): +## '-no docstring-' +## #return Length +## +## def GetElement(self, index): +## '-no docstring-' +## #return element +## + +UIA_WindowIsModalPropertyId = 30077 # Constant c_int +UIA_IsTextEditPatternAvailablePropertyId = 30149 # Constant c_int +UIA_AcceleratorKeyPropertyId = 30006 # Constant c_int +UIA_WindowIsTopmostPropertyId = 30078 # Constant c_int +UIA_AccessKeyPropertyId = 30007 # Constant c_int +UIA_SelectionItemIsSelectedPropertyId = 30079 # Constant c_int +UIA_HasKeyboardFocusPropertyId = 30008 # Constant c_int +UIA_SelectionItemSelectionContainerPropertyId = 30080 # Constant c_int +UIA_IsKeyboardFocusablePropertyId = 30009 # Constant c_int +UIA_TableRowHeadersPropertyId = 30081 # Constant c_int +UIA_IsEnabledPropertyId = 30010 # Constant c_int +UIA_TableColumnHeadersPropertyId = 30082 # Constant c_int +UIA_AutomationIdPropertyId = 30011 # Constant c_int +UIA_TableRowOrColumnMajorPropertyId = 30083 # Constant c_int +UIA_ClassNamePropertyId = 30012 # Constant c_int +UIA_TableItemRowHeaderItemsPropertyId = 30084 # Constant c_int +UIA_HelpTextPropertyId = 30013 # Constant c_int +UIA_TableItemColumnHeaderItemsPropertyId = 30085 # Constant c_int +UIA_ClickablePointPropertyId = 30014 # Constant c_int +UIA_ToggleToggleStatePropertyId = 30086 # Constant c_int +class IUIAutomationTextPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{32EBA289-3583-42C9-9C59-3B6D9A1E9B6A}') + _idlflags_ = [] +class IUIAutomationElement(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{D22108AA-8AC5-49A5-837B-37BBB3D7591E}') + _idlflags_ = [] + +# values for enumeration 'SupportedTextSelection' +SupportedTextSelection_None = 0 +SupportedTextSelection_Single = 1 +SupportedTextSelection_Multiple = 2 +SupportedTextSelection = c_int # enum +IUIAutomationTextPattern._methods_ = [ + COMMETHOD([], HRESULT, 'RangeFromPoint', + ( ['in'], tagPOINT, 'pt' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'range' )), + COMMETHOD([], HRESULT, 'RangeFromChild', + ( ['in'], POINTER(IUIAutomationElement), 'child' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'range' )), + COMMETHOD([], HRESULT, 'GetSelection', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRangeArray)), 'ranges' )), + COMMETHOD([], HRESULT, 'GetVisibleRanges', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRangeArray)), 'ranges' )), + COMMETHOD(['propget'], HRESULT, 'DocumentRange', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'range' )), + COMMETHOD(['propget'], HRESULT, 'SupportedTextSelection', + ( ['out', 'retval'], POINTER(SupportedTextSelection), 'SupportedTextSelection' )), +] +################################################################ +## code template for IUIAutomationTextPattern implementation +##class IUIAutomationTextPattern_Impl(object): +## def RangeFromPoint(self, pt): +## '-no docstring-' +## #return range +## +## def RangeFromChild(self, child): +## '-no docstring-' +## #return range +## +## def GetSelection(self): +## '-no docstring-' +## #return ranges +## +## def GetVisibleRanges(self): +## '-no docstring-' +## #return ranges +## +## @property +## def DocumentRange(self): +## '-no docstring-' +## #return range +## +## @property +## def SupportedTextSelection(self): +## '-no docstring-' +## #return SupportedTextSelection +## + +UIA_CulturePropertyId = 30015 # Constant c_int +UIA_TransformCanMovePropertyId = 30087 # Constant c_int +UIA_IsControlElementPropertyId = 30016 # Constant c_int +UIA_TransformCanResizePropertyId = 30088 # Constant c_int +UIA_IsContentElementPropertyId = 30017 # Constant c_int +UIA_TransformCanRotatePropertyId = 30089 # Constant c_int +UIA_LabeledByPropertyId = 30018 # Constant c_int +UIA_IsLegacyIAccessiblePatternAvailablePropertyId = 30090 # Constant c_int +UIA_IsPasswordPropertyId = 30019 # Constant c_int +UIA_LegacyIAccessibleChildIdPropertyId = 30091 # Constant c_int +UIA_NativeWindowHandlePropertyId = 30020 # Constant c_int +UIA_LegacyIAccessibleNamePropertyId = 30092 # Constant c_int +UIA_ItemTypePropertyId = 30021 # Constant c_int +UIA_LegacyIAccessibleValuePropertyId = 30093 # Constant c_int +UIA_IsOffscreenPropertyId = 30022 # Constant c_int +UIA_LegacyIAccessibleDescriptionPropertyId = 30094 # Constant c_int +UIA_OrientationPropertyId = 30023 # Constant c_int +UIA_LegacyIAccessibleRolePropertyId = 30095 # Constant c_int +UIA_FrameworkIdPropertyId = 30024 # Constant c_int +UIA_LegacyIAccessibleStatePropertyId = 30096 # Constant c_int +UIA_IsRequiredForFormPropertyId = 30025 # Constant c_int +UIA_LegacyIAccessibleHelpPropertyId = 30097 # Constant c_int +UIA_ItemStatusPropertyId = 30026 # Constant c_int +UIA_LegacyIAccessibleKeyboardShortcutPropertyId = 30098 # Constant c_int +UIA_IsDockPatternAvailablePropertyId = 30027 # Constant c_int +UIA_LegacyIAccessibleSelectionPropertyId = 30099 # Constant c_int +UIA_IsExpandCollapsePatternAvailablePropertyId = 30028 # Constant c_int +UIA_LegacyIAccessibleDefaultActionPropertyId = 30100 # Constant c_int +class IUIAutomationScrollItemPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{B488300F-D015-4F19-9C29-BB595E3645EF}') + _idlflags_ = [] +IUIAutomationScrollItemPattern._methods_ = [ + COMMETHOD([], HRESULT, 'ScrollIntoView'), +] +################################################################ +## code template for IUIAutomationScrollItemPattern implementation +##class IUIAutomationScrollItemPattern_Impl(object): +## def ScrollIntoView(self): +## '-no docstring-' +## #return +## + +UIA_IsGridItemPatternAvailablePropertyId = 30029 # Constant c_int +UIA_AriaRolePropertyId = 30101 # Constant c_int +UIA_IsGridPatternAvailablePropertyId = 30030 # Constant c_int +UIA_AriaPropertiesPropertyId = 30102 # Constant c_int +UIA_IsInvokePatternAvailablePropertyId = 30031 # Constant c_int +UIA_IsDataValidForFormPropertyId = 30103 # Constant c_int +class IUIAutomationSelectionPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{5ED5202E-B2AC-47A6-B638-4B0BF140D78E}') + _idlflags_ = [] +class IUIAutomationElementArray(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{14314595-B4BC-4055-95F2-58F2E42C9855}') + _idlflags_ = [] +IUIAutomationSelectionPattern._methods_ = [ + COMMETHOD([], HRESULT, 'GetCurrentSelection', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCanSelectMultiple', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsSelectionRequired', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedSelection', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCanSelectMultiple', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsSelectionRequired', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), +] +################################################################ +## code template for IUIAutomationSelectionPattern implementation +##class IUIAutomationSelectionPattern_Impl(object): +## def GetCurrentSelection(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentCanSelectMultiple(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsSelectionRequired(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedSelection(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCanSelectMultiple(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsSelectionRequired(self): +## '-no docstring-' +## #return retVal +## + +UIA_IsMultipleViewPatternAvailablePropertyId = 30032 # Constant c_int +UIA_ControllerForPropertyId = 30104 # Constant c_int +UIA_IsRangeValuePatternAvailablePropertyId = 30033 # Constant c_int +UIA_DescribedByPropertyId = 30105 # Constant c_int +UIA_IsScrollPatternAvailablePropertyId = 30034 # Constant c_int +UIA_FlowsToPropertyId = 30106 # Constant c_int +UIA_IsScrollItemPatternAvailablePropertyId = 30035 # Constant c_int +UIA_ProviderDescriptionPropertyId = 30107 # Constant c_int +UIA_IsSelectionItemPatternAvailablePropertyId = 30036 # Constant c_int +UIA_IsItemContainerPatternAvailablePropertyId = 30108 # Constant c_int +UIA_IsSelectionPatternAvailablePropertyId = 30037 # Constant c_int +UIA_IsVirtualizedItemPatternAvailablePropertyId = 30109 # Constant c_int +UIA_IsTablePatternAvailablePropertyId = 30038 # Constant c_int +UIA_IsSynchronizedInputPatternAvailablePropertyId = 30110 # Constant c_int +UIA_IsTableItemPatternAvailablePropertyId = 30039 # Constant c_int +UIA_OptimizeForVisualContentPropertyId = 30111 # Constant c_int +UIA_IsTextPatternAvailablePropertyId = 30040 # Constant c_int +UIA_IsObjectModelPatternAvailablePropertyId = 30112 # Constant c_int +UIA_IsTogglePatternAvailablePropertyId = 30041 # Constant c_int +UIA_AnnotationAnnotationTypeIdPropertyId = 30113 # Constant c_int +UIA_IsTransformPatternAvailablePropertyId = 30042 # Constant c_int +UIA_AnnotationAnnotationTypeNamePropertyId = 30114 # Constant c_int +UIA_IsValuePatternAvailablePropertyId = 30043 # Constant c_int +UIA_AnnotationAuthorPropertyId = 30115 # Constant c_int +UIA_IsWindowPatternAvailablePropertyId = 30044 # Constant c_int +UIA_AnnotationDateTimePropertyId = 30116 # Constant c_int +UIA_ValueValuePropertyId = 30045 # Constant c_int +UIA_AnnotationTargetPropertyId = 30117 # Constant c_int +UIA_ValueIsReadOnlyPropertyId = 30046 # Constant c_int +UIA_IsAnnotationPatternAvailablePropertyId = 30118 # Constant c_int +UIA_RangeValueValuePropertyId = 30047 # Constant c_int +UIA_IsTextPattern2AvailablePropertyId = 30119 # Constant c_int +UIA_RangeValueIsReadOnlyPropertyId = 30048 # Constant c_int +UIA_StylesStyleIdPropertyId = 30120 # Constant c_int +class IUIAutomationSelectionItemPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{A8EFA66A-0FDA-421A-9194-38021F3578EA}') + _idlflags_ = [] +IUIAutomationSelectionItemPattern._methods_ = [ + COMMETHOD([], HRESULT, 'Select'), + COMMETHOD([], HRESULT, 'AddToSelection'), + COMMETHOD([], HRESULT, 'RemoveFromSelection'), + COMMETHOD(['propget'], HRESULT, 'CurrentIsSelected', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentSelectionContainer', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsSelected', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedSelectionContainer', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationSelectionItemPattern implementation +##class IUIAutomationSelectionItemPattern_Impl(object): +## def Select(self): +## '-no docstring-' +## #return +## +## def AddToSelection(self): +## '-no docstring-' +## #return +## +## def RemoveFromSelection(self): +## '-no docstring-' +## #return +## +## @property +## def CurrentIsSelected(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentSelectionContainer(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsSelected(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedSelectionContainer(self): +## '-no docstring-' +## #return retVal +## + +UIA_RangeValueMinimumPropertyId = 30049 # Constant c_int +UIA_StylesStyleNamePropertyId = 30121 # Constant c_int +UIA_RangeValueMaximumPropertyId = 30050 # Constant c_int +UIA_StylesFillColorPropertyId = 30122 # Constant c_int +UIA_RangeValueLargeChangePropertyId = 30051 # Constant c_int +UIA_StylesFillPatternStylePropertyId = 30123 # Constant c_int +UIA_RangeValueSmallChangePropertyId = 30052 # Constant c_int +UIA_StylesShapePropertyId = 30124 # Constant c_int +UIA_ScrollHorizontalScrollPercentPropertyId = 30053 # Constant c_int +UIA_StylesFillPatternColorPropertyId = 30125 # Constant c_int +UIA_ScrollHorizontalViewSizePropertyId = 30054 # Constant c_int +UIA_StylesExtendedPropertiesPropertyId = 30126 # Constant c_int +UIA_ScrollVerticalScrollPercentPropertyId = 30055 # Constant c_int +UIA_IsStylesPatternAvailablePropertyId = 30127 # Constant c_int +UIA_ScrollVerticalViewSizePropertyId = 30056 # Constant c_int +UIA_IsSpreadsheetPatternAvailablePropertyId = 30128 # Constant c_int +class IUIAutomationTextPattern2(IUIAutomationTextPattern): + _case_insensitive_ = True + _iid_ = GUID('{506A921A-FCC9-409F-B23B-37EB74106872}') + _idlflags_ = [] +IUIAutomationTextPattern2._methods_ = [ + COMMETHOD([], HRESULT, 'RangeFromAnnotation', + ( ['in'], POINTER(IUIAutomationElement), 'annotation' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'range' )), + COMMETHOD([], HRESULT, 'GetCaretRange', + ( ['out'], POINTER(c_int), 'isActive' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'range' )), +] +################################################################ +## code template for IUIAutomationTextPattern2 implementation +##class IUIAutomationTextPattern2_Impl(object): +## def RangeFromAnnotation(self, annotation): +## '-no docstring-' +## #return range +## +## def GetCaretRange(self): +## '-no docstring-' +## #return isActive, range +## + +UIA_ScrollHorizontallyScrollablePropertyId = 30057 # Constant c_int +UIA_SpreadsheetItemFormulaPropertyId = 30129 # Constant c_int +UIA_ScrollVerticallyScrollablePropertyId = 30058 # Constant c_int +UIA_SpreadsheetItemAnnotationObjectsPropertyId = 30130 # Constant c_int +UIA_SelectionSelectionPropertyId = 30059 # Constant c_int +UIA_SpreadsheetItemAnnotationTypesPropertyId = 30131 # Constant c_int +UIA_SelectionCanSelectMultiplePropertyId = 30060 # Constant c_int +UIA_IsSpreadsheetItemPatternAvailablePropertyId = 30132 # Constant c_int +UIA_SelectionIsSelectionRequiredPropertyId = 30061 # Constant c_int +UIA_Transform2CanZoomPropertyId = 30133 # Constant c_int +UIA_GridRowCountPropertyId = 30062 # Constant c_int +UIA_IsTransformPattern2AvailablePropertyId = 30134 # Constant c_int +UIA_GridColumnCountPropertyId = 30063 # Constant c_int +UIA_LiveSettingPropertyId = 30135 # Constant c_int +UIA_GridItemRowPropertyId = 30064 # Constant c_int +UIA_IsTextChildPatternAvailablePropertyId = 30136 # Constant c_int +class IUIAutomationTextEditPattern(IUIAutomationTextPattern): + _case_insensitive_ = True + _iid_ = GUID('{17E21576-996C-4870-99D9-BFF323380C06}') + _idlflags_ = [] +IUIAutomationTextEditPattern._methods_ = [ + COMMETHOD([], HRESULT, 'GetActiveComposition', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'range' )), + COMMETHOD([], HRESULT, 'GetConversionTarget', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'range' )), +] +################################################################ +## code template for IUIAutomationTextEditPattern implementation +##class IUIAutomationTextEditPattern_Impl(object): +## def GetActiveComposition(self): +## '-no docstring-' +## #return range +## +## def GetConversionTarget(self): +## '-no docstring-' +## #return range +## + +UIA_GridItemColumnPropertyId = 30065 # Constant c_int +UIA_IsDragPatternAvailablePropertyId = 30137 # Constant c_int +UIA_GridItemRowSpanPropertyId = 30066 # Constant c_int +UIA_DragIsGrabbedPropertyId = 30138 # Constant c_int +UIA_GridItemColumnSpanPropertyId = 30067 # Constant c_int +UIA_DragDropEffectPropertyId = 30139 # Constant c_int +UIA_GridItemContainingGridPropertyId = 30068 # Constant c_int +UIA_DragDropEffectsPropertyId = 30140 # Constant c_int +UIA_DockDockPositionPropertyId = 30069 # Constant c_int +UIA_IsDropTargetPatternAvailablePropertyId = 30141 # Constant c_int +UIA_ExpandCollapseExpandCollapseStatePropertyId = 30070 # Constant c_int +UIA_DropTargetDropTargetEffectPropertyId = 30142 # Constant c_int +UIA_MultipleViewCurrentViewPropertyId = 30071 # Constant c_int +UIA_DropTargetDropTargetEffectsPropertyId = 30143 # Constant c_int +UIA_MultipleViewSupportedViewsPropertyId = 30072 # Constant c_int +UIA_DragGrabbedItemsPropertyId = 30144 # Constant c_int +UIA_WindowCanMaximizePropertyId = 30073 # Constant c_int +UIA_Transform2ZoomLevelPropertyId = 30145 # Constant c_int +StyleId_Custom = 70000 # Constant c_int +AnnotationType_Unknown = 60000 # Constant c_int +UIA_SummaryChangeId = 90000 # Constant c_int +class IUIAutomationRangeValuePattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{59213F4F-7346-49E5-B120-80555987A148}') + _idlflags_ = [] +IUIAutomationRangeValuePattern._methods_ = [ + COMMETHOD([], HRESULT, 'SetValue', + ( ['in'], c_double, 'val' )), + COMMETHOD(['propget'], HRESULT, 'CurrentValue', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsReadOnly', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentMaximum', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentMinimum', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentLargeChange', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentSmallChange', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedValue', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsReadOnly', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedMaximum', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedMinimum', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedLargeChange', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedSmallChange', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), +] +################################################################ +## code template for IUIAutomationRangeValuePattern implementation +##class IUIAutomationRangeValuePattern_Impl(object): +## def SetValue(self, val): +## '-no docstring-' +## #return +## +## @property +## def CurrentValue(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsReadOnly(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentMaximum(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentMinimum(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentLargeChange(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentSmallChange(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedValue(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsReadOnly(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedMaximum(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedMinimum(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedLargeChange(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedSmallChange(self): +## '-no docstring-' +## #return retVal +## + +UIA_ToolTipControlTypeId = 50022 # Constant c_int +UIA_TreeControlTypeId = 50023 # Constant c_int +UIA_TreeItemControlTypeId = 50024 # Constant c_int +UIA_CustomControlTypeId = 50025 # Constant c_int +UIA_GroupControlTypeId = 50026 # Constant c_int +class IUIAutomationPropertyChangedEventHandler(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{40CD37D4-C756-4B0C-8C6F-BDDFEEB13B50}') + _idlflags_ = ['oleautomation'] +IUIAutomationPropertyChangedEventHandler._methods_ = [ + COMMETHOD([], HRESULT, 'HandlePropertyChangedEvent', + ( ['in'], POINTER(IUIAutomationElement), 'sender' ), + ( ['in'], c_int, 'propertyId' ), + ( ['in'], VARIANT, 'newValue' )), +] +################################################################ +## code template for IUIAutomationPropertyChangedEventHandler implementation +##class IUIAutomationPropertyChangedEventHandler_Impl(object): +## def HandlePropertyChangedEvent(self, sender, propertyId, newValue): +## '-no docstring-' +## #return +## + +UIA_ThumbControlTypeId = 50027 # Constant c_int +UIA_DataGridControlTypeId = 50028 # Constant c_int +class IUIAutomationScrollPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{88F4D42A-E881-459D-A77C-73BBBB7E02DC}') + _idlflags_ = [] + +# values for enumeration 'ScrollAmount' +ScrollAmount_LargeDecrement = 0 +ScrollAmount_SmallDecrement = 1 +ScrollAmount_NoAmount = 2 +ScrollAmount_LargeIncrement = 3 +ScrollAmount_SmallIncrement = 4 +ScrollAmount = c_int # enum +IUIAutomationScrollPattern._methods_ = [ + COMMETHOD([], HRESULT, 'Scroll', + ( ['in'], ScrollAmount, 'horizontalAmount' ), + ( ['in'], ScrollAmount, 'verticalAmount' )), + COMMETHOD([], HRESULT, 'SetScrollPercent', + ( ['in'], c_double, 'horizontalPercent' ), + ( ['in'], c_double, 'verticalPercent' )), + COMMETHOD(['propget'], HRESULT, 'CurrentHorizontalScrollPercent', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentVerticalScrollPercent', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentHorizontalViewSize', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentVerticalViewSize', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentHorizontallyScrollable', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentVerticallyScrollable', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedHorizontalScrollPercent', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedVerticalScrollPercent', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedHorizontalViewSize', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedVerticalViewSize', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedHorizontallyScrollable', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedVerticallyScrollable', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), +] +################################################################ +## code template for IUIAutomationScrollPattern implementation +##class IUIAutomationScrollPattern_Impl(object): +## def Scroll(self, horizontalAmount, verticalAmount): +## '-no docstring-' +## #return +## +## def SetScrollPercent(self, horizontalPercent, verticalPercent): +## '-no docstring-' +## #return +## +## @property +## def CurrentHorizontalScrollPercent(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentVerticalScrollPercent(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentHorizontalViewSize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentVerticalViewSize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentHorizontallyScrollable(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentVerticallyScrollable(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedHorizontalScrollPercent(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedVerticalScrollPercent(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedHorizontalViewSize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedVerticalViewSize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedHorizontallyScrollable(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedVerticallyScrollable(self): +## '-no docstring-' +## #return retVal +## + +UIA_DataItemControlTypeId = 50029 # Constant c_int +UIA_DocumentControlTypeId = 50030 # Constant c_int +UIA_SplitButtonControlTypeId = 50031 # Constant c_int +UIA_WindowControlTypeId = 50032 # Constant c_int +class IUIAutomationStructureChangedEventHandler(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{E81D1B4E-11C5-42F8-9754-E7036C79F054}') + _idlflags_ = ['oleautomation'] + +# values for enumeration 'StructureChangeType' +StructureChangeType_ChildAdded = 0 +StructureChangeType_ChildRemoved = 1 +StructureChangeType_ChildrenInvalidated = 2 +StructureChangeType_ChildrenBulkAdded = 3 +StructureChangeType_ChildrenBulkRemoved = 4 +StructureChangeType_ChildrenReordered = 5 +StructureChangeType = c_int # enum +IUIAutomationStructureChangedEventHandler._methods_ = [ + COMMETHOD([], HRESULT, 'HandleStructureChangedEvent', + ( ['in'], POINTER(IUIAutomationElement), 'sender' ), + ( ['in'], StructureChangeType, 'changeType' ), + ( ['in'], _midlSAFEARRAY(c_int), 'runtimeId' )), +] +################################################################ +## code template for IUIAutomationStructureChangedEventHandler implementation +##class IUIAutomationStructureChangedEventHandler_Impl(object): +## def HandleStructureChangedEvent(self, sender, changeType, runtimeId): +## '-no docstring-' +## #return +## + +class ExtendedProperty(Structure): + pass +ExtendedProperty._fields_ = [ + ('PropertyName', BSTR), + ('PropertyValue', BSTR), +] +assert sizeof(ExtendedProperty) == 16, sizeof(ExtendedProperty) +assert alignment(ExtendedProperty) == 8, alignment(ExtendedProperty) +UIA_PaneControlTypeId = 50033 # Constant c_int +UIA_HeaderControlTypeId = 50034 # Constant c_int +UIA_HeaderItemControlTypeId = 50035 # Constant c_int +UIA_TableControlTypeId = 50036 # Constant c_int +UIA_TitleBarControlTypeId = 50037 # Constant c_int +UIA_SeparatorControlTypeId = 50038 # Constant c_int +UIA_SemanticZoomControlTypeId = 50039 # Constant c_int +UIA_AppBarControlTypeId = 50040 # Constant c_int +UIA_CustomLandmarkTypeId = 80000 # Constant c_int +AnnotationType_SpellingError = 60001 # Constant c_int +AnnotationType_GrammarError = 60002 # Constant c_int +AnnotationType_Comment = 60003 # Constant c_int +AnnotationType_FormulaError = 60004 # Constant c_int +AnnotationType_TrackChanges = 60005 # Constant c_int +AnnotationType_Header = 60006 # Constant c_int +AnnotationType_Footer = 60007 # Constant c_int +AnnotationType_Highlighted = 60008 # Constant c_int +AnnotationType_Endnote = 60009 # Constant c_int +UIA_ToolTipOpenedEventId = 20000 # Constant c_int +AnnotationType_Footnote = 60010 # Constant c_int +AnnotationType_InsertionChange = 60011 # Constant c_int +class IUIAutomationFocusChangedEventHandler(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{C270F6B5-5C69-4290-9745-7A7F97169468}') + _idlflags_ = ['oleautomation'] +IUIAutomationFocusChangedEventHandler._methods_ = [ + COMMETHOD([], HRESULT, 'HandleFocusChangedEvent', + ( ['in'], POINTER(IUIAutomationElement), 'sender' )), +] +################################################################ +## code template for IUIAutomationFocusChangedEventHandler implementation +##class IUIAutomationFocusChangedEventHandler_Impl(object): +## def HandleFocusChangedEvent(self, sender): +## '-no docstring-' +## #return +## + +AnnotationType_DeletionChange = 60012 # Constant c_int +AnnotationType_MoveChange = 60013 # Constant c_int +AnnotationType_FormatChange = 60014 # Constant c_int +AnnotationType_UnsyncedChange = 60015 # Constant c_int +class IUIAutomationTextEditTextChangedEventHandler(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{92FAA680-E704-4156-931A-E32D5BB38F3F}') + _idlflags_ = ['oleautomation'] + +# values for enumeration 'TextEditChangeType' +TextEditChangeType_None = 0 +TextEditChangeType_AutoCorrect = 1 +TextEditChangeType_Composition = 2 +TextEditChangeType_CompositionFinalized = 3 +TextEditChangeType_AutoComplete = 4 +TextEditChangeType = c_int # enum +IUIAutomationTextEditTextChangedEventHandler._methods_ = [ + COMMETHOD([], HRESULT, 'HandleTextEditTextChangedEvent', + ( ['in'], POINTER(IUIAutomationElement), 'sender' ), + ( ['in'], TextEditChangeType, 'TextEditChangeType' ), + ( ['in'], _midlSAFEARRAY(BSTR), 'eventStrings' )), +] +################################################################ +## code template for IUIAutomationTextEditTextChangedEventHandler implementation +##class IUIAutomationTextEditTextChangedEventHandler_Impl(object): +## def HandleTextEditTextChangedEvent(self, sender, TextEditChangeType, eventStrings): +## '-no docstring-' +## #return +## + +AnnotationType_EditingLockedChange = 60016 # Constant c_int +AnnotationType_ExternalChange = 60017 # Constant c_int +AnnotationType_ConflictingChange = 60018 # Constant c_int +AnnotationType_Author = 60019 # Constant c_int +AnnotationType_AdvancedProofingIssue = 60020 # Constant c_int +AnnotationType_DataValidationError = 60021 # Constant c_int +AnnotationType_CircularReferenceError = 60022 # Constant c_int + +# values for enumeration 'TreeScope' +TreeScope_Element = 1 +TreeScope_Children = 2 +TreeScope_Descendants = 4 +TreeScope_Parent = 8 +TreeScope_Ancestors = 16 +TreeScope_Subtree = 7 +TreeScope = c_int # enum +class IUIAutomationCondition(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{352FFBA8-0973-437C-A61F-F64CAFD81DF9}') + _idlflags_ = [] +class IUIAutomationCacheRequest(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{B32A92B5-BC25-4078-9C08-D7EE95C48E03}') + _idlflags_ = [] + +# values for enumeration 'OrientationType' +OrientationType_None = 0 +OrientationType_Horizontal = 1 +OrientationType_Vertical = 2 +OrientationType = c_int # enum +IUIAutomationElement._methods_ = [ + COMMETHOD([], HRESULT, 'SetFocus'), + COMMETHOD([], HRESULT, 'GetRuntimeId', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_int)), 'runtimeId' )), + COMMETHOD([], HRESULT, 'FindFirst', + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(IUIAutomationCondition), 'condition' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'found' )), + COMMETHOD([], HRESULT, 'FindAll', + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(IUIAutomationCondition), 'condition' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'found' )), + COMMETHOD([], HRESULT, 'FindFirstBuildCache', + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(IUIAutomationCondition), 'condition' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'found' )), + COMMETHOD([], HRESULT, 'FindAllBuildCache', + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(IUIAutomationCondition), 'condition' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'found' )), + COMMETHOD([], HRESULT, 'BuildUpdatedCache', + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'updatedElement' )), + COMMETHOD([], HRESULT, 'GetCurrentPropertyValue', + ( ['in'], c_int, 'propertyId' ), + ( ['out', 'retval'], POINTER(VARIANT), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentPropertyValueEx', + ( ['in'], c_int, 'propertyId' ), + ( ['in'], c_int, 'ignoreDefaultValue' ), + ( ['out', 'retval'], POINTER(VARIANT), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedPropertyValue', + ( ['in'], c_int, 'propertyId' ), + ( ['out', 'retval'], POINTER(VARIANT), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedPropertyValueEx', + ( ['in'], c_int, 'propertyId' ), + ( ['in'], c_int, 'ignoreDefaultValue' ), + ( ['out', 'retval'], POINTER(VARIANT), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentPatternAs', + ( ['in'], c_int, 'patternId' ), + ( ['in'], POINTER(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.GUID), 'riid' ), + ( ['out', 'retval'], POINTER(c_void_p), 'patternObject' )), + COMMETHOD([], HRESULT, 'GetCachedPatternAs', + ( ['in'], c_int, 'patternId' ), + ( ['in'], POINTER(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.GUID), 'riid' ), + ( ['out', 'retval'], POINTER(c_void_p), 'patternObject' )), + COMMETHOD([], HRESULT, 'GetCurrentPattern', + ( ['in'], c_int, 'patternId' ), + ( ['out', 'retval'], POINTER(POINTER(IUnknown)), 'patternObject' )), + COMMETHOD([], HRESULT, 'GetCachedPattern', + ( ['in'], c_int, 'patternId' ), + ( ['out', 'retval'], POINTER(POINTER(IUnknown)), 'patternObject' )), + COMMETHOD([], HRESULT, 'GetCachedParent', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'parent' )), + COMMETHOD([], HRESULT, 'GetCachedChildren', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'children' )), + COMMETHOD(['propget'], HRESULT, 'CurrentProcessId', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentControlType', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentLocalizedControlType', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentName', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAcceleratorKey', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAccessKey', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentHasKeyboardFocus', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsKeyboardFocusable', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsEnabled', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAutomationId', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentClassName', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentHelpText', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCulture', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsControlElement', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsContentElement', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsPassword', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentNativeWindowHandle', + ( ['out', 'retval'], POINTER(c_void_p), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentItemType', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsOffscreen', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentOrientation', + ( ['out', 'retval'], POINTER(OrientationType), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentFrameworkId', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsRequiredForForm', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentItemStatus', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentBoundingRectangle', + ( ['out', 'retval'], POINTER(tagRECT), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentLabeledBy', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAriaRole', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAriaProperties', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsDataValidForForm', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentControllerFor', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentDescribedBy', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentFlowsTo', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentProviderDescription', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedProcessId', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedControlType', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedLocalizedControlType', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedName', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAcceleratorKey', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAccessKey', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedHasKeyboardFocus', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsKeyboardFocusable', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsEnabled', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAutomationId', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedClassName', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedHelpText', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCulture', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsControlElement', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsContentElement', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsPassword', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedNativeWindowHandle', + ( ['out', 'retval'], POINTER(c_void_p), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedItemType', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsOffscreen', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedOrientation', + ( ['out', 'retval'], POINTER(OrientationType), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedFrameworkId', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsRequiredForForm', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedItemStatus', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedBoundingRectangle', + ( ['out', 'retval'], POINTER(tagRECT), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedLabeledBy', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAriaRole', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAriaProperties', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsDataValidForForm', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedControllerFor', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedDescribedBy', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedFlowsTo', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedProviderDescription', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD([], HRESULT, 'GetClickablePoint', + ( ['out'], POINTER(tagPOINT), 'clickable' ), + ( ['out', 'retval'], POINTER(c_int), 'gotClickable' )), +] +################################################################ +## code template for IUIAutomationElement implementation +##class IUIAutomationElement_Impl(object): +## def SetFocus(self): +## '-no docstring-' +## #return +## +## def GetRuntimeId(self): +## '-no docstring-' +## #return runtimeId +## +## def FindFirst(self, scope, condition): +## '-no docstring-' +## #return found +## +## def FindAll(self, scope, condition): +## '-no docstring-' +## #return found +## +## def FindFirstBuildCache(self, scope, condition, cacheRequest): +## '-no docstring-' +## #return found +## +## def FindAllBuildCache(self, scope, condition, cacheRequest): +## '-no docstring-' +## #return found +## +## def BuildUpdatedCache(self, cacheRequest): +## '-no docstring-' +## #return updatedElement +## +## def GetCurrentPropertyValue(self, propertyId): +## '-no docstring-' +## #return retVal +## +## def GetCurrentPropertyValueEx(self, propertyId, ignoreDefaultValue): +## '-no docstring-' +## #return retVal +## +## def GetCachedPropertyValue(self, propertyId): +## '-no docstring-' +## #return retVal +## +## def GetCachedPropertyValueEx(self, propertyId, ignoreDefaultValue): +## '-no docstring-' +## #return retVal +## +## def GetCurrentPatternAs(self, patternId, riid): +## '-no docstring-' +## #return patternObject +## +## def GetCachedPatternAs(self, patternId, riid): +## '-no docstring-' +## #return patternObject +## +## def GetCurrentPattern(self, patternId): +## '-no docstring-' +## #return patternObject +## +## def GetCachedPattern(self, patternId): +## '-no docstring-' +## #return patternObject +## +## def GetCachedParent(self): +## '-no docstring-' +## #return parent +## +## def GetCachedChildren(self): +## '-no docstring-' +## #return children +## +## @property +## def CurrentProcessId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentControlType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentLocalizedControlType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentName(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAcceleratorKey(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAccessKey(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentHasKeyboardFocus(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsKeyboardFocusable(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsEnabled(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAutomationId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentClassName(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentHelpText(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentCulture(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsControlElement(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsContentElement(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsPassword(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentNativeWindowHandle(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentItemType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsOffscreen(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentOrientation(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentFrameworkId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsRequiredForForm(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentItemStatus(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentBoundingRectangle(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentLabeledBy(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAriaRole(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAriaProperties(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsDataValidForForm(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentControllerFor(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentDescribedBy(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentFlowsTo(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentProviderDescription(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedProcessId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedControlType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedLocalizedControlType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedName(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAcceleratorKey(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAccessKey(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedHasKeyboardFocus(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsKeyboardFocusable(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsEnabled(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAutomationId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedClassName(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedHelpText(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCulture(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsControlElement(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsContentElement(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsPassword(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedNativeWindowHandle(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedItemType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsOffscreen(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedOrientation(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedFrameworkId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsRequiredForForm(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedItemStatus(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedBoundingRectangle(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedLabeledBy(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAriaRole(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAriaProperties(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsDataValidForForm(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedControllerFor(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedDescribedBy(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedFlowsTo(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedProviderDescription(self): +## '-no docstring-' +## #return retVal +## +## def GetClickablePoint(self): +## '-no docstring-' +## #return clickable, gotClickable +## + +StyleId_Heading1 = 70001 # Constant c_int +StyleId_Heading2 = 70002 # Constant c_int +StyleId_Heading3 = 70003 # Constant c_int +class IUIAutomationSpreadsheetPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{7517A7C8-FAAE-4DE9-9F08-29B91E8595C1}') + _idlflags_ = [] +IUIAutomationSpreadsheetPattern._methods_ = [ + COMMETHOD([], HRESULT, 'GetItemByName', + ( ['in'], BSTR, 'name' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), +] +################################################################ +## code template for IUIAutomationSpreadsheetPattern implementation +##class IUIAutomationSpreadsheetPattern_Impl(object): +## def GetItemByName(self, name): +## '-no docstring-' +## #return element +## + +StyleId_Heading4 = 70004 # Constant c_int +StyleId_Heading5 = 70005 # Constant c_int +StyleId_Heading6 = 70006 # Constant c_int +StyleId_Heading7 = 70007 # Constant c_int +StyleId_Heading8 = 70008 # Constant c_int +class IUIAutomationSpreadsheetItemPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{7D4FB86C-8D34-40E1-8E83-62C15204E335}') + _idlflags_ = [] +IUIAutomationSpreadsheetItemPattern._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentFormula', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentAnnotationObjects', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentAnnotationTypes', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_int)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedFormula', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedAnnotationObjects', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedAnnotationTypes', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_int)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationSpreadsheetItemPattern implementation +##class IUIAutomationSpreadsheetItemPattern_Impl(object): +## @property +## def CurrentFormula(self): +## '-no docstring-' +## #return retVal +## +## def GetCurrentAnnotationObjects(self): +## '-no docstring-' +## #return retVal +## +## def GetCurrentAnnotationTypes(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedFormula(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedAnnotationObjects(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedAnnotationTypes(self): +## '-no docstring-' +## #return retVal +## + +StyleId_Heading9 = 70009 # Constant c_int +StyleId_Title = 70010 # Constant c_int +StyleId_Subtitle = 70011 # Constant c_int +class IUIAutomationChangesEventHandler(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{58EDCA55-2C3E-4980-B1B9-56C17F27A2A0}') + _idlflags_ = ['oleautomation'] +class UiaChangeInfo(Structure): + pass +IUIAutomationChangesEventHandler._methods_ = [ + COMMETHOD([], HRESULT, 'HandleChangesEvent', + ( ['in'], POINTER(IUIAutomationElement), 'sender' ), + ( ['in'], POINTER(UiaChangeInfo), 'uiaChanges' ), + ( ['in'], c_int, 'changesCount' )), +] +################################################################ +## code template for IUIAutomationChangesEventHandler implementation +##class IUIAutomationChangesEventHandler_Impl(object): +## def HandleChangesEvent(self, sender, uiaChanges, changesCount): +## '-no docstring-' +## #return +## + +StyleId_Normal = 70012 # Constant c_int +StyleId_Emphasis = 70013 # Constant c_int +StyleId_Quote = 70014 # Constant c_int +StyleId_BulletedList = 70015 # Constant c_int +UiaChangeInfo._fields_ = [ + ('uiaId', c_int), + ('payload', VARIANT), + ('extraInfo', VARIANT), +] +assert sizeof(UiaChangeInfo) == 56, sizeof(UiaChangeInfo) +assert alignment(UiaChangeInfo) == 8, alignment(UiaChangeInfo) +StyleId_NumberedList = 70016 # Constant c_int +UIA_FormLandmarkTypeId = 80001 # Constant c_int +UIA_MainLandmarkTypeId = 80002 # Constant c_int +UIA_NavigationLandmarkTypeId = 80003 # Constant c_int +class IUIAutomationInvokePattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{FB377FBE-8EA6-46D5-9C73-6499642D3059}') + _idlflags_ = [] +IUIAutomationInvokePattern._methods_ = [ + COMMETHOD([], HRESULT, 'Invoke'), +] +################################################################ +## code template for IUIAutomationInvokePattern implementation +##class IUIAutomationInvokePattern_Impl(object): +## def Invoke(self): +## '-no docstring-' +## #return +## + +UIA_SearchLandmarkTypeId = 80004 # Constant c_int +UIA_TextControlTypeId = 50020 # Constant c_int +class IUIAutomationElement2(IUIAutomationElement): + _case_insensitive_ = True + _iid_ = GUID('{6749C683-F70D-4487-A698-5F79D55290D6}') + _idlflags_ = [] +class IUIAutomationElement3(IUIAutomationElement2): + _case_insensitive_ = True + _iid_ = GUID('{8471DF34-AEE0-4A01-A7DE-7DB9AF12C296}') + _idlflags_ = [] +class IUIAutomationElement4(IUIAutomationElement3): + _case_insensitive_ = True + _iid_ = GUID('{3B6E233C-52FB-4063-A4C9-77C075C2A06B}') + _idlflags_ = [] + +# values for enumeration 'LiveSetting' +Off = 0 +Polite = 1 +Assertive = 2 +LiveSetting = c_int # enum +IUIAutomationElement2._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentOptimizeForVisualContent', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedOptimizeForVisualContent', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentLiveSetting', + ( ['out', 'retval'], POINTER(LiveSetting), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedLiveSetting', + ( ['out', 'retval'], POINTER(LiveSetting), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentFlowsFrom', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedFlowsFrom', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationElement2 implementation +##class IUIAutomationElement2_Impl(object): +## @property +## def CurrentOptimizeForVisualContent(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedOptimizeForVisualContent(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentLiveSetting(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedLiveSetting(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentFlowsFrom(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedFlowsFrom(self): +## '-no docstring-' +## #return retVal +## + +IUIAutomationElement3._methods_ = [ + COMMETHOD([], HRESULT, 'ShowContextMenu'), + COMMETHOD(['propget'], HRESULT, 'CurrentIsPeripheral', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsPeripheral', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), +] +################################################################ +## code template for IUIAutomationElement3 implementation +##class IUIAutomationElement3_Impl(object): +## def ShowContextMenu(self): +## '-no docstring-' +## #return +## +## @property +## def CurrentIsPeripheral(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsPeripheral(self): +## '-no docstring-' +## #return retVal +## + +IUIAutomationElement4._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentPositionInSet', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentSizeOfSet', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentLevel', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAnnotationTypes', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_int)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAnnotationObjects', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedPositionInSet', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedSizeOfSet', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedLevel', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAnnotationTypes', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_int)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAnnotationObjects', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationElement4 implementation +##class IUIAutomationElement4_Impl(object): +## @property +## def CurrentPositionInSet(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentSizeOfSet(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentLevel(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAnnotationTypes(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAnnotationObjects(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedPositionInSet(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedSizeOfSet(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedLevel(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAnnotationTypes(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAnnotationObjects(self): +## '-no docstring-' +## #return retVal +## + +UIA_TabItemControlTypeId = 50019 # Constant c_int +IUIAutomationCondition._methods_ = [ +] +################################################################ +## code template for IUIAutomationCondition implementation +##class IUIAutomationCondition_Impl(object): + +class CUIAutomation(CoClass): + 'The Central Class for UIAutomation' + _reg_clsid_ = GUID('{FF48DBA4-60EF-4201-AA87-54103EEF594E}') + _idlflags_ = [] + _typelib_path_ = typelib_path + _reg_typelib_ = ('{944DE083-8FB8-45CF-BCB7-C477ACB2F897}', 1, 0) +class IUIAutomation(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{30CBE57D-D9D0-452A-AB13-7AC5AC4825EE}') + _idlflags_ = [] +CUIAutomation._com_interfaces_ = [IUIAutomation] + +UIA_TabControlTypeId = 50018 # Constant c_int +class IUIAutomationTogglePattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{94CF8058-9B8D-4AB9-8BFD-4CD0A33C8C70}') + _idlflags_ = [] + +# values for enumeration 'ToggleState' +ToggleState_Off = 0 +ToggleState_On = 1 +ToggleState_Indeterminate = 2 +ToggleState = c_int # enum +IUIAutomationTogglePattern._methods_ = [ + COMMETHOD([], HRESULT, 'Toggle'), + COMMETHOD(['propget'], HRESULT, 'CurrentToggleState', + ( ['out', 'retval'], POINTER(ToggleState), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedToggleState', + ( ['out', 'retval'], POINTER(ToggleState), 'retVal' )), +] +################################################################ +## code template for IUIAutomationTogglePattern implementation +##class IUIAutomationTogglePattern_Impl(object): +## def Toggle(self): +## '-no docstring-' +## #return +## +## @property +## def CurrentToggleState(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedToggleState(self): +## '-no docstring-' +## #return retVal +## + +UIA_AnimationStyleAttributeId = 40000 # Constant c_int +UIA_IsPeripheralPropertyId = 30150 # Constant c_int +class CUIAutomation8(CoClass): + 'The Central Class for UIAutomation8' + _reg_clsid_ = GUID('{E22AD333-B25F-460C-83D0-0581107395C9}') + _idlflags_ = [] + _typelib_path_ = typelib_path + _reg_typelib_ = ('{944DE083-8FB8-45CF-BCB7-C477ACB2F897}', 1, 0) +class IUIAutomation2(IUIAutomation): + _case_insensitive_ = True + _iid_ = GUID('{34723AFF-0C9D-49D0-9896-7AB52DF8CD8A}') + _idlflags_ = [] +class IUIAutomation3(IUIAutomation2): + _case_insensitive_ = True + _iid_ = GUID('{73D768DA-9B51-4B89-936E-C209290973E7}') + _idlflags_ = [] +class IUIAutomation4(IUIAutomation3): + _case_insensitive_ = True + _iid_ = GUID('{1189C02A-05F8-4319-8E21-E817E3DB2860}') + _idlflags_ = [] +CUIAutomation8._com_interfaces_ = [IUIAutomation2, IUIAutomation3, IUIAutomation4] + +UIA_IsCustomNavigationPatternAvailablePropertyId = 30151 # Constant c_int +UIA_PositionInSetPropertyId = 30152 # Constant c_int +UIA_SizeOfSetPropertyId = 30153 # Constant c_int +UIA_LevelPropertyId = 30154 # Constant c_int +UIA_AnnotationTypesPropertyId = 30155 # Constant c_int +UIA_AnnotationObjectsPropertyId = 30156 # Constant c_int +UIA_LandmarkTypePropertyId = 30157 # Constant c_int +UIA_LocalizedLandmarkTypePropertyId = 30158 # Constant c_int +UIA_FullDescriptionPropertyId = 30159 # Constant c_int +UIA_ButtonControlTypeId = 50000 # Constant c_int +UIA_BackgroundColorAttributeId = 40001 # Constant c_int +UIA_BulletStyleAttributeId = 40002 # Constant c_int +UIA_CapStyleAttributeId = 40003 # Constant c_int +UIA_CultureAttributeId = 40004 # Constant c_int +class IUIAutomationTransformPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{A9B55844-A55D-4EF0-926D-569C16FF89BB}') + _idlflags_ = [] +IUIAutomationTransformPattern._methods_ = [ + COMMETHOD([], HRESULT, 'Move', + ( ['in'], c_double, 'x' ), + ( ['in'], c_double, 'y' )), + COMMETHOD([], HRESULT, 'Resize', + ( ['in'], c_double, 'width' ), + ( ['in'], c_double, 'height' )), + COMMETHOD([], HRESULT, 'Rotate', + ( ['in'], c_double, 'degrees' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCanMove', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCanResize', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCanRotate', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCanMove', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCanResize', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCanRotate', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), +] +################################################################ +## code template for IUIAutomationTransformPattern implementation +##class IUIAutomationTransformPattern_Impl(object): +## def Move(self, x, y): +## '-no docstring-' +## #return +## +## def Resize(self, width, height): +## '-no docstring-' +## #return +## +## def Rotate(self, degrees): +## '-no docstring-' +## #return +## +## @property +## def CurrentCanMove(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentCanResize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentCanRotate(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCanMove(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCanResize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCanRotate(self): +## '-no docstring-' +## #return retVal +## + +UIA_FontNameAttributeId = 40005 # Constant c_int +UIA_FontSizeAttributeId = 40006 # Constant c_int +UIA_FontWeightAttributeId = 40007 # Constant c_int +UIA_ForegroundColorAttributeId = 40008 # Constant c_int +UIA_HorizontalTextAlignmentAttributeId = 40009 # Constant c_int +UIA_IndentationFirstLineAttributeId = 40010 # Constant c_int +UIA_IndentationLeadingAttributeId = 40011 # Constant c_int +UIA_IndentationTrailingAttributeId = 40012 # Constant c_int +UIA_IsHiddenAttributeId = 40013 # Constant c_int +UIA_IsItalicAttributeId = 40014 # Constant c_int +UIA_IsReadOnlyAttributeId = 40015 # Constant c_int +UIA_IsSubscriptAttributeId = 40016 # Constant c_int +UIA_IsSuperscriptAttributeId = 40017 # Constant c_int +IUIAutomationElementArray._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'Length', + ( ['out', 'retval'], POINTER(c_int), 'Length' )), + COMMETHOD([], HRESULT, 'GetElement', + ( ['in'], c_int, 'index' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), +] +################################################################ +## code template for IUIAutomationElementArray implementation +##class IUIAutomationElementArray_Impl(object): +## @property +## def Length(self): +## '-no docstring-' +## #return Length +## +## def GetElement(self, index): +## '-no docstring-' +## #return element +## + +UIA_MarginBottomAttributeId = 40018 # Constant c_int +UIA_MarginLeadingAttributeId = 40019 # Constant c_int +UIA_MarginTopAttributeId = 40020 # Constant c_int +UIA_MarginTrailingAttributeId = 40021 # Constant c_int +UIA_OutlineStylesAttributeId = 40022 # Constant c_int +UIA_OverlineColorAttributeId = 40023 # Constant c_int +UIA_OverlineStyleAttributeId = 40024 # Constant c_int +class IUIAutomationValuePattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{A94CD8B1-0844-4CD6-9D2D-640537AB39E9}') + _idlflags_ = [] +IUIAutomationValuePattern._methods_ = [ + COMMETHOD([], HRESULT, 'SetValue', + ( ['in'], BSTR, 'val' )), + COMMETHOD(['propget'], HRESULT, 'CurrentValue', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsReadOnly', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedValue', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsReadOnly', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), +] +################################################################ +## code template for IUIAutomationValuePattern implementation +##class IUIAutomationValuePattern_Impl(object): +## def SetValue(self, val): +## '-no docstring-' +## #return +## +## @property +## def CurrentValue(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsReadOnly(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedValue(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsReadOnly(self): +## '-no docstring-' +## #return retVal +## + +UIA_StrikethroughColorAttributeId = 40025 # Constant c_int +UIA_StrikethroughStyleAttributeId = 40026 # Constant c_int + +# values for enumeration 'AutomationElementMode' +AutomationElementMode_None = 0 +AutomationElementMode_Full = 1 +AutomationElementMode = c_int # enum +IUIAutomationCacheRequest._methods_ = [ + COMMETHOD([], HRESULT, 'AddProperty', + ( ['in'], c_int, 'propertyId' )), + COMMETHOD([], HRESULT, 'AddPattern', + ( ['in'], c_int, 'patternId' )), + COMMETHOD([], HRESULT, 'Clone', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCacheRequest)), 'clonedRequest' )), + COMMETHOD(['propget'], HRESULT, 'TreeScope', + ( ['out', 'retval'], POINTER(TreeScope), 'scope' )), + COMMETHOD(['propput'], HRESULT, 'TreeScope', + ( ['in'], TreeScope, 'scope' )), + COMMETHOD(['propget'], HRESULT, 'TreeFilter', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'filter' )), + COMMETHOD(['propput'], HRESULT, 'TreeFilter', + ( ['in'], POINTER(IUIAutomationCondition), 'filter' )), + COMMETHOD(['propget'], HRESULT, 'AutomationElementMode', + ( ['out', 'retval'], POINTER(AutomationElementMode), 'mode' )), + COMMETHOD(['propput'], HRESULT, 'AutomationElementMode', + ( ['in'], AutomationElementMode, 'mode' )), +] +################################################################ +## code template for IUIAutomationCacheRequest implementation +##class IUIAutomationCacheRequest_Impl(object): +## def AddProperty(self, propertyId): +## '-no docstring-' +## #return +## +## def AddPattern(self, patternId): +## '-no docstring-' +## #return +## +## def Clone(self): +## '-no docstring-' +## #return clonedRequest +## +## def _get(self): +## '-no docstring-' +## #return scope +## def _set(self, scope): +## '-no docstring-' +## TreeScope = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return filter +## def _set(self, filter): +## '-no docstring-' +## TreeFilter = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return mode +## def _set(self, mode): +## '-no docstring-' +## AutomationElementMode = property(_get, _set, doc = _set.__doc__) +## + +class IUIAutomationElement5(IUIAutomationElement4): + _case_insensitive_ = True + _iid_ = GUID('{98141C1D-0D0E-4175-BBE2-6BFF455842A7}') + _idlflags_ = [] +IUIAutomationElement5._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentLandmarkType', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentLocalizedLandmarkType', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedLandmarkType', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedLocalizedLandmarkType', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), +] +################################################################ +## code template for IUIAutomationElement5 implementation +##class IUIAutomationElement5_Impl(object): +## @property +## def CurrentLandmarkType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentLocalizedLandmarkType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedLandmarkType(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedLocalizedLandmarkType(self): +## '-no docstring-' +## #return retVal +## + +UIA_TabsAttributeId = 40027 # Constant c_int +UIA_TextFlowDirectionsAttributeId = 40028 # Constant c_int +UIA_UnderlineColorAttributeId = 40029 # Constant c_int +UIA_UnderlineStyleAttributeId = 40030 # Constant c_int +UIA_AnnotationTypesAttributeId = 40031 # Constant c_int +UIA_AnnotationObjectsAttributeId = 40032 # Constant c_int +UIA_StyleNameAttributeId = 40033 # Constant c_int +UIA_StyleIdAttributeId = 40034 # Constant c_int +UIA_LinkAttributeId = 40035 # Constant c_int +UIA_IsActiveAttributeId = 40036 # Constant c_int +UIA_SelectionActiveEndAttributeId = 40037 # Constant c_int +UIA_CaretPositionAttributeId = 40038 # Constant c_int +UIA_CaretBidiModeAttributeId = 40039 # Constant c_int +UIA_ToolBarControlTypeId = 50021 # Constant c_int +UIA_CalendarControlTypeId = 50001 # Constant c_int +UIA_CheckBoxControlTypeId = 50002 # Constant c_int +UIA_ComboBoxControlTypeId = 50003 # Constant c_int +UIA_EditControlTypeId = 50004 # Constant c_int +UIA_HyperlinkControlTypeId = 50005 # Constant c_int +class IUIAutomationElement6(IUIAutomationElement5): + _case_insensitive_ = True + _iid_ = GUID('{4780D450-8BCA-4977-AFA5-A4A517F555E3}') + _idlflags_ = [] +IUIAutomationElement6._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentFullDescription', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedFullDescription', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), +] +################################################################ +## code template for IUIAutomationElement6 implementation +##class IUIAutomationElement6_Impl(object): +## @property +## def CurrentFullDescription(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedFullDescription(self): +## '-no docstring-' +## #return retVal +## + +UIA_ImageControlTypeId = 50006 # Constant c_int +UIA_ListItemControlTypeId = 50007 # Constant c_int +UIA_ListControlTypeId = 50008 # Constant c_int +UIA_MenuControlTypeId = 50009 # Constant c_int +UIA_MenuBarControlTypeId = 50010 # Constant c_int +class IUIAutomationProxyFactory(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{85B94ECD-849D-42B6-B94D-D6DB23FDF5A4}') + _idlflags_ = [] +class IRawElementProviderSimple(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{D6DD68D1-86FD-4332-8666-9ABEDEA2D24C}') + _idlflags_ = ['oleautomation'] +IUIAutomationProxyFactory._methods_ = [ + COMMETHOD([], HRESULT, 'CreateProvider', + ( ['in'], c_void_p, 'hwnd' ), + ( ['in'], c_int, 'idObject' ), + ( ['in'], c_int, 'idChild' ), + ( ['out', 'retval'], POINTER(POINTER(IRawElementProviderSimple)), 'provider' )), + COMMETHOD(['propget'], HRESULT, 'ProxyFactoryId', + ( ['out', 'retval'], POINTER(BSTR), 'factoryId' )), +] +################################################################ +## code template for IUIAutomationProxyFactory implementation +##class IUIAutomationProxyFactory_Impl(object): +## def CreateProvider(self, hwnd, idObject, idChild): +## '-no docstring-' +## #return provider +## +## @property +## def ProxyFactoryId(self): +## '-no docstring-' +## #return factoryId +## + +UIA_MenuItemControlTypeId = 50011 # Constant c_int +UIA_ProgressBarControlTypeId = 50012 # Constant c_int +UIA_RadioButtonControlTypeId = 50013 # Constant c_int +UIA_ScrollBarControlTypeId = 50014 # Constant c_int +UIA_SliderControlTypeId = 50015 # Constant c_int +UIA_SpinnerControlTypeId = 50016 # Constant c_int +class IUIAutomationWindowPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{0FAEF453-9208-43EF-BBB2-3B485177864F}') + _idlflags_ = [] + +# values for enumeration 'WindowVisualState' +WindowVisualState_Normal = 0 +WindowVisualState_Maximized = 1 +WindowVisualState_Minimized = 2 +WindowVisualState = c_int # enum + +# values for enumeration 'WindowInteractionState' +WindowInteractionState_Running = 0 +WindowInteractionState_Closing = 1 +WindowInteractionState_ReadyForUserInteraction = 2 +WindowInteractionState_BlockedByModalWindow = 3 +WindowInteractionState_NotResponding = 4 +WindowInteractionState = c_int # enum +IUIAutomationWindowPattern._methods_ = [ + COMMETHOD([], HRESULT, 'Close'), + COMMETHOD([], HRESULT, 'WaitForInputIdle', + ( ['in'], c_int, 'milliseconds' ), + ( ['out', 'retval'], POINTER(c_int), 'success' )), + COMMETHOD([], HRESULT, 'SetWindowVisualState', + ( ['in'], WindowVisualState, 'state' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCanMaximize', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCanMinimize', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsModal', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentIsTopmost', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentWindowVisualState', + ( ['out', 'retval'], POINTER(WindowVisualState), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentWindowInteractionState', + ( ['out', 'retval'], POINTER(WindowInteractionState), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCanMaximize', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCanMinimize', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsModal', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsTopmost', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedWindowVisualState', + ( ['out', 'retval'], POINTER(WindowVisualState), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedWindowInteractionState', + ( ['out', 'retval'], POINTER(WindowInteractionState), 'retVal' )), +] +################################################################ +## code template for IUIAutomationWindowPattern implementation +##class IUIAutomationWindowPattern_Impl(object): +## def Close(self): +## '-no docstring-' +## #return +## +## def WaitForInputIdle(self, milliseconds): +## '-no docstring-' +## #return success +## +## def SetWindowVisualState(self, state): +## '-no docstring-' +## #return +## +## @property +## def CurrentCanMaximize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentCanMinimize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsModal(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentIsTopmost(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentWindowVisualState(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentWindowInteractionState(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCanMaximize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCanMinimize(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsModal(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsTopmost(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedWindowVisualState(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedWindowInteractionState(self): +## '-no docstring-' +## #return retVal +## + +UIA_StatusBarControlTypeId = 50017 # Constant c_int + +# values for enumeration 'TextPatternRangeEndpoint' +TextPatternRangeEndpoint_Start = 0 +TextPatternRangeEndpoint_End = 1 +TextPatternRangeEndpoint = c_int # enum + +# values for enumeration 'TextUnit' +TextUnit_Character = 0 +TextUnit_Format = 1 +TextUnit_Word = 2 +TextUnit_Line = 3 +TextUnit_Paragraph = 4 +TextUnit_Page = 5 +TextUnit_Document = 6 +TextUnit = c_int # enum +class IUIAutomationTextRange2(IUIAutomationTextRange): + _case_insensitive_ = True + _iid_ = GUID('{BB9B40E0-5E04-46BD-9BE0-4B601B9AFAD4}') + _idlflags_ = [] +IUIAutomationTextRange._methods_ = [ + COMMETHOD([], HRESULT, 'Clone', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'clonedRange' )), + COMMETHOD([], HRESULT, 'Compare', + ( ['in'], POINTER(IUIAutomationTextRange), 'range' ), + ( ['out', 'retval'], POINTER(c_int), 'areSame' )), + COMMETHOD([], HRESULT, 'CompareEndpoints', + ( ['in'], TextPatternRangeEndpoint, 'srcEndPoint' ), + ( ['in'], POINTER(IUIAutomationTextRange), 'range' ), + ( ['in'], TextPatternRangeEndpoint, 'targetEndPoint' ), + ( ['out', 'retval'], POINTER(c_int), 'compValue' )), + COMMETHOD([], HRESULT, 'ExpandToEnclosingUnit', + ( ['in'], TextUnit, 'TextUnit' )), + COMMETHOD([], HRESULT, 'FindAttribute', + ( ['in'], c_int, 'attr' ), + ( ['in'], VARIANT, 'val' ), + ( ['in'], c_int, 'backward' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'found' )), + COMMETHOD([], HRESULT, 'FindText', + ( ['in'], BSTR, 'text' ), + ( ['in'], c_int, 'backward' ), + ( ['in'], c_int, 'ignoreCase' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'found' )), + COMMETHOD([], HRESULT, 'GetAttributeValue', + ( ['in'], c_int, 'attr' ), + ( ['out', 'retval'], POINTER(VARIANT), 'value' )), + COMMETHOD([], HRESULT, 'GetBoundingRectangles', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_double)), 'boundingRects' )), + COMMETHOD([], HRESULT, 'GetEnclosingElement', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'enclosingElement' )), + COMMETHOD([], HRESULT, 'GetText', + ( ['in'], c_int, 'maxLength' ), + ( ['out', 'retval'], POINTER(BSTR), 'text' )), + COMMETHOD([], HRESULT, 'Move', + ( ['in'], TextUnit, 'unit' ), + ( ['in'], c_int, 'count' ), + ( ['out', 'retval'], POINTER(c_int), 'moved' )), + COMMETHOD([], HRESULT, 'MoveEndpointByUnit', + ( ['in'], TextPatternRangeEndpoint, 'endpoint' ), + ( ['in'], TextUnit, 'unit' ), + ( ['in'], c_int, 'count' ), + ( ['out', 'retval'], POINTER(c_int), 'moved' )), + COMMETHOD([], HRESULT, 'MoveEndpointByRange', + ( ['in'], TextPatternRangeEndpoint, 'srcEndPoint' ), + ( ['in'], POINTER(IUIAutomationTextRange), 'range' ), + ( ['in'], TextPatternRangeEndpoint, 'targetEndPoint' )), + COMMETHOD([], HRESULT, 'Select'), + COMMETHOD([], HRESULT, 'AddToSelection'), + COMMETHOD([], HRESULT, 'RemoveFromSelection'), + COMMETHOD([], HRESULT, 'ScrollIntoView', + ( ['in'], c_int, 'alignToTop' )), + COMMETHOD([], HRESULT, 'GetChildren', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'children' )), +] +################################################################ +## code template for IUIAutomationTextRange implementation +##class IUIAutomationTextRange_Impl(object): +## def Clone(self): +## '-no docstring-' +## #return clonedRange +## +## def Compare(self, range): +## '-no docstring-' +## #return areSame +## +## def CompareEndpoints(self, srcEndPoint, range, targetEndPoint): +## '-no docstring-' +## #return compValue +## +## def ExpandToEnclosingUnit(self, TextUnit): +## '-no docstring-' +## #return +## +## def FindAttribute(self, attr, val, backward): +## '-no docstring-' +## #return found +## +## def FindText(self, text, backward, ignoreCase): +## '-no docstring-' +## #return found +## +## def GetAttributeValue(self, attr): +## '-no docstring-' +## #return value +## +## def GetBoundingRectangles(self): +## '-no docstring-' +## #return boundingRects +## +## def GetEnclosingElement(self): +## '-no docstring-' +## #return enclosingElement +## +## def GetText(self, maxLength): +## '-no docstring-' +## #return text +## +## def Move(self, unit, count): +## '-no docstring-' +## #return moved +## +## def MoveEndpointByUnit(self, endpoint, unit, count): +## '-no docstring-' +## #return moved +## +## def MoveEndpointByRange(self, srcEndPoint, range, targetEndPoint): +## '-no docstring-' +## #return +## +## def Select(self): +## '-no docstring-' +## #return +## +## def AddToSelection(self): +## '-no docstring-' +## #return +## +## def RemoveFromSelection(self): +## '-no docstring-' +## #return +## +## def ScrollIntoView(self, alignToTop): +## '-no docstring-' +## #return +## +## def GetChildren(self): +## '-no docstring-' +## #return children +## + +IUIAutomationTextRange2._methods_ = [ + COMMETHOD([], HRESULT, 'ShowContextMenu'), +] +################################################################ +## code template for IUIAutomationTextRange2 implementation +##class IUIAutomationTextRange2_Impl(object): +## def ShowContextMenu(self): +## '-no docstring-' +## #return +## + +class IUIAutomationGridItemPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{78F8EF57-66C3-4E09-BD7C-E79B2004894D}') + _idlflags_ = [] +IUIAutomationGridItemPattern._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentContainingGrid', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentRow', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentColumn', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentRowSpan', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentColumnSpan', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedContainingGrid', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedRow', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedColumn', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedRowSpan', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedColumnSpan', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), +] +################################################################ +## code template for IUIAutomationGridItemPattern implementation +##class IUIAutomationGridItemPattern_Impl(object): +## @property +## def CurrentContainingGrid(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentRow(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentColumn(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentRowSpan(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentColumnSpan(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedContainingGrid(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedRow(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedColumn(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedRowSpan(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedColumnSpan(self): +## '-no docstring-' +## #return retVal +## + +class IUIAutomationSynchronizedInputPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{2233BE0B-AFB7-448B-9FDA-3B378AA5EAE1}') + _idlflags_ = [] + +# values for enumeration 'SynchronizedInputType' +SynchronizedInputType_KeyUp = 1 +SynchronizedInputType_KeyDown = 2 +SynchronizedInputType_LeftMouseUp = 4 +SynchronizedInputType_LeftMouseDown = 8 +SynchronizedInputType_RightMouseUp = 16 +SynchronizedInputType_RightMouseDown = 32 +SynchronizedInputType = c_int # enum +IUIAutomationSynchronizedInputPattern._methods_ = [ + COMMETHOD([], HRESULT, 'StartListening', + ( ['in'], SynchronizedInputType, 'inputType' )), + COMMETHOD([], HRESULT, 'Cancel'), +] +################################################################ +## code template for IUIAutomationSynchronizedInputPattern implementation +##class IUIAutomationSynchronizedInputPattern_Impl(object): +## def StartListening(self, inputType): +## '-no docstring-' +## #return +## +## def Cancel(self): +## '-no docstring-' +## #return +## + +class IUIAutomationDropTargetPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{69A095F7-EEE4-430E-A46B-FB73B1AE39A5}') + _idlflags_ = [] +IUIAutomationDropTargetPattern._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentDropTargetEffect', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedDropTargetEffect', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentDropTargetEffects', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(BSTR)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedDropTargetEffects', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(BSTR)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationDropTargetPattern implementation +##class IUIAutomationDropTargetPattern_Impl(object): +## @property +## def CurrentDropTargetEffect(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedDropTargetEffect(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentDropTargetEffects(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedDropTargetEffects(self): +## '-no docstring-' +## #return retVal +## + +class IUIAutomationTreeWalker(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{4042C624-389C-4AFC-A630-9DF854A541FC}') + _idlflags_ = [] + +# values for enumeration 'PropertyConditionFlags' +PropertyConditionFlags_None = 0 +PropertyConditionFlags_IgnoreCase = 1 +PropertyConditionFlags = c_int # enum +class IUIAutomationEventHandler(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{146C3C17-F12E-4E22-8C27-F894B9B79C69}') + _idlflags_ = ['oleautomation'] +class IUIAutomationProxyFactoryEntry(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{D50E472E-B64B-490C-BCA1-D30696F9F289}') + _idlflags_ = [] +class IUIAutomationProxyFactoryMapping(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{09E31E18-872D-4873-93D1-1E541EC133FD}') + _idlflags_ = [] +class IAccessible(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IDispatch): + _case_insensitive_ = True + _iid_ = GUID('{618736E0-3C3D-11CF-810C-00AA00389B71}') + _idlflags_ = ['hidden', 'dual', 'oleautomation'] +IUIAutomation._methods_ = [ + COMMETHOD([], HRESULT, 'CompareElements', + ( ['in'], POINTER(IUIAutomationElement), 'el1' ), + ( ['in'], POINTER(IUIAutomationElement), 'el2' ), + ( ['out', 'retval'], POINTER(c_int), 'areSame' )), + COMMETHOD([], HRESULT, 'CompareRuntimeIds', + ( ['in'], _midlSAFEARRAY(c_int), 'runtimeId1' ), + ( ['in'], _midlSAFEARRAY(c_int), 'runtimeId2' ), + ( ['out', 'retval'], POINTER(c_int), 'areSame' )), + COMMETHOD([], HRESULT, 'GetRootElement', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'root' )), + COMMETHOD([], HRESULT, 'ElementFromHandle', + ( ['in'], c_void_p, 'hwnd' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), + COMMETHOD([], HRESULT, 'ElementFromPoint', + ( ['in'], tagPOINT, 'pt' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), + COMMETHOD([], HRESULT, 'GetFocusedElement', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), + COMMETHOD([], HRESULT, 'GetRootElementBuildCache', + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'root' )), + COMMETHOD([], HRESULT, 'ElementFromHandleBuildCache', + ( ['in'], c_void_p, 'hwnd' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), + COMMETHOD([], HRESULT, 'ElementFromPointBuildCache', + ( ['in'], tagPOINT, 'pt' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), + COMMETHOD([], HRESULT, 'GetFocusedElementBuildCache', + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), + COMMETHOD([], HRESULT, 'CreateTreeWalker', + ( ['in'], POINTER(IUIAutomationCondition), 'pCondition' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTreeWalker)), 'walker' )), + COMMETHOD(['propget'], HRESULT, 'ControlViewWalker', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTreeWalker)), 'walker' )), + COMMETHOD(['propget'], HRESULT, 'ContentViewWalker', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTreeWalker)), 'walker' )), + COMMETHOD(['propget'], HRESULT, 'RawViewWalker', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTreeWalker)), 'walker' )), + COMMETHOD(['propget'], HRESULT, 'RawViewCondition', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'condition' )), + COMMETHOD(['propget'], HRESULT, 'ControlViewCondition', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'condition' )), + COMMETHOD(['propget'], HRESULT, 'ContentViewCondition', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'condition' )), + COMMETHOD([], HRESULT, 'CreateCacheRequest', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCacheRequest)), 'cacheRequest' )), + COMMETHOD([], HRESULT, 'CreateTrueCondition', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreateFalseCondition', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreatePropertyCondition', + ( ['in'], c_int, 'propertyId' ), + ( ['in'], VARIANT, 'value' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreatePropertyConditionEx', + ( ['in'], c_int, 'propertyId' ), + ( ['in'], VARIANT, 'value' ), + ( ['in'], PropertyConditionFlags, 'flags' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreateAndCondition', + ( ['in'], POINTER(IUIAutomationCondition), 'condition1' ), + ( ['in'], POINTER(IUIAutomationCondition), 'condition2' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreateAndConditionFromArray', + ( ['in'], _midlSAFEARRAY(POINTER(IUIAutomationCondition)), 'conditions' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreateAndConditionFromNativeArray', + ( ['in'], POINTER(POINTER(IUIAutomationCondition)), 'conditions' ), + ( ['in'], c_int, 'conditionCount' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreateOrCondition', + ( ['in'], POINTER(IUIAutomationCondition), 'condition1' ), + ( ['in'], POINTER(IUIAutomationCondition), 'condition2' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreateOrConditionFromArray', + ( ['in'], _midlSAFEARRAY(POINTER(IUIAutomationCondition)), 'conditions' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreateOrConditionFromNativeArray', + ( ['in'], POINTER(POINTER(IUIAutomationCondition)), 'conditions' ), + ( ['in'], c_int, 'conditionCount' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'CreateNotCondition', + ( ['in'], POINTER(IUIAutomationCondition), 'condition' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'newCondition' )), + COMMETHOD([], HRESULT, 'AddAutomationEventHandler', + ( ['in'], c_int, 'eventId' ), + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['in'], POINTER(IUIAutomationEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'RemoveAutomationEventHandler', + ( ['in'], c_int, 'eventId' ), + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'AddPropertyChangedEventHandlerNativeArray', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['in'], POINTER(IUIAutomationPropertyChangedEventHandler), 'handler' ), + ( ['in'], POINTER(c_int), 'propertyArray' ), + ( ['in'], c_int, 'propertyCount' )), + COMMETHOD([], HRESULT, 'AddPropertyChangedEventHandler', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['in'], POINTER(IUIAutomationPropertyChangedEventHandler), 'handler' ), + ( ['in'], _midlSAFEARRAY(c_int), 'propertyArray' )), + COMMETHOD([], HRESULT, 'RemovePropertyChangedEventHandler', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationPropertyChangedEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'AddStructureChangedEventHandler', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['in'], POINTER(IUIAutomationStructureChangedEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'RemoveStructureChangedEventHandler', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationStructureChangedEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'AddFocusChangedEventHandler', + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['in'], POINTER(IUIAutomationFocusChangedEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'RemoveFocusChangedEventHandler', + ( ['in'], POINTER(IUIAutomationFocusChangedEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'RemoveAllEventHandlers'), + COMMETHOD([], HRESULT, 'IntNativeArrayToSafeArray', + ( ['in'], POINTER(c_int), 'array' ), + ( ['in'], c_int, 'arrayCount' ), + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_int)), 'safeArray' )), + COMMETHOD([], HRESULT, 'IntSafeArrayToNativeArray', + ( ['in'], _midlSAFEARRAY(c_int), 'intArray' ), + ( ['out'], POINTER(POINTER(c_int)), 'array' ), + ( ['out', 'retval'], POINTER(c_int), 'arrayCount' )), + COMMETHOD([], HRESULT, 'RectToVariant', + ( ['in'], tagRECT, 'rc' ), + ( ['out', 'retval'], POINTER(VARIANT), 'var' )), + COMMETHOD([], HRESULT, 'VariantToRect', + ( ['in'], VARIANT, 'var' ), + ( ['out', 'retval'], POINTER(tagRECT), 'rc' )), + COMMETHOD([], HRESULT, 'SafeArrayToRectNativeArray', + ( ['in'], _midlSAFEARRAY(c_double), 'rects' ), + ( ['out'], POINTER(POINTER(tagRECT)), 'rectArray' ), + ( ['out', 'retval'], POINTER(c_int), 'rectArrayCount' )), + COMMETHOD([], HRESULT, 'CreateProxyFactoryEntry', + ( ['in'], POINTER(IUIAutomationProxyFactory), 'factory' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationProxyFactoryEntry)), 'factoryEntry' )), + COMMETHOD(['propget'], HRESULT, 'ProxyFactoryMapping', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationProxyFactoryMapping)), 'factoryMapping' )), + COMMETHOD([], HRESULT, 'GetPropertyProgrammaticName', + ( ['in'], c_int, 'property' ), + ( ['out', 'retval'], POINTER(BSTR), 'name' )), + COMMETHOD([], HRESULT, 'GetPatternProgrammaticName', + ( ['in'], c_int, 'pattern' ), + ( ['out', 'retval'], POINTER(BSTR), 'name' )), + COMMETHOD([], HRESULT, 'PollForPotentialSupportedPatterns', + ( ['in'], POINTER(IUIAutomationElement), 'pElement' ), + ( ['out'], POINTER(_midlSAFEARRAY(c_int)), 'patternIds' ), + ( ['out'], POINTER(_midlSAFEARRAY(BSTR)), 'patternNames' )), + COMMETHOD([], HRESULT, 'PollForPotentialSupportedProperties', + ( ['in'], POINTER(IUIAutomationElement), 'pElement' ), + ( ['out'], POINTER(_midlSAFEARRAY(c_int)), 'propertyIds' ), + ( ['out'], POINTER(_midlSAFEARRAY(BSTR)), 'propertyNames' )), + COMMETHOD([], HRESULT, 'CheckNotSupported', + ( ['in'], VARIANT, 'value' ), + ( ['out', 'retval'], POINTER(c_int), 'isNotSupported' )), + COMMETHOD(['propget'], HRESULT, 'ReservedNotSupportedValue', + ( ['out', 'retval'], POINTER(POINTER(IUnknown)), 'notSupportedValue' )), + COMMETHOD(['propget'], HRESULT, 'ReservedMixedAttributeValue', + ( ['out', 'retval'], POINTER(POINTER(IUnknown)), 'mixedAttributeValue' )), + COMMETHOD([], HRESULT, 'ElementFromIAccessible', + ( ['in'], POINTER(IAccessible), 'accessible' ), + ( ['in'], c_int, 'childId' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), + COMMETHOD([], HRESULT, 'ElementFromIAccessibleBuildCache', + ( ['in'], POINTER(IAccessible), 'accessible' ), + ( ['in'], c_int, 'childId' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), +] +################################################################ +## code template for IUIAutomation implementation +##class IUIAutomation_Impl(object): +## def CompareElements(self, el1, el2): +## '-no docstring-' +## #return areSame +## +## def CompareRuntimeIds(self, runtimeId1, runtimeId2): +## '-no docstring-' +## #return areSame +## +## def GetRootElement(self): +## '-no docstring-' +## #return root +## +## def ElementFromHandle(self, hwnd): +## '-no docstring-' +## #return element +## +## def ElementFromPoint(self, pt): +## '-no docstring-' +## #return element +## +## def GetFocusedElement(self): +## '-no docstring-' +## #return element +## +## def GetRootElementBuildCache(self, cacheRequest): +## '-no docstring-' +## #return root +## +## def ElementFromHandleBuildCache(self, hwnd, cacheRequest): +## '-no docstring-' +## #return element +## +## def ElementFromPointBuildCache(self, pt, cacheRequest): +## '-no docstring-' +## #return element +## +## def GetFocusedElementBuildCache(self, cacheRequest): +## '-no docstring-' +## #return element +## +## def CreateTreeWalker(self, pCondition): +## '-no docstring-' +## #return walker +## +## @property +## def ControlViewWalker(self): +## '-no docstring-' +## #return walker +## +## @property +## def ContentViewWalker(self): +## '-no docstring-' +## #return walker +## +## @property +## def RawViewWalker(self): +## '-no docstring-' +## #return walker +## +## @property +## def RawViewCondition(self): +## '-no docstring-' +## #return condition +## +## @property +## def ControlViewCondition(self): +## '-no docstring-' +## #return condition +## +## @property +## def ContentViewCondition(self): +## '-no docstring-' +## #return condition +## +## def CreateCacheRequest(self): +## '-no docstring-' +## #return cacheRequest +## +## def CreateTrueCondition(self): +## '-no docstring-' +## #return newCondition +## +## def CreateFalseCondition(self): +## '-no docstring-' +## #return newCondition +## +## def CreatePropertyCondition(self, propertyId, value): +## '-no docstring-' +## #return newCondition +## +## def CreatePropertyConditionEx(self, propertyId, value, flags): +## '-no docstring-' +## #return newCondition +## +## def CreateAndCondition(self, condition1, condition2): +## '-no docstring-' +## #return newCondition +## +## def CreateAndConditionFromArray(self, conditions): +## '-no docstring-' +## #return newCondition +## +## def CreateAndConditionFromNativeArray(self, conditions, conditionCount): +## '-no docstring-' +## #return newCondition +## +## def CreateOrCondition(self, condition1, condition2): +## '-no docstring-' +## #return newCondition +## +## def CreateOrConditionFromArray(self, conditions): +## '-no docstring-' +## #return newCondition +## +## def CreateOrConditionFromNativeArray(self, conditions, conditionCount): +## '-no docstring-' +## #return newCondition +## +## def CreateNotCondition(self, condition): +## '-no docstring-' +## #return newCondition +## +## def AddAutomationEventHandler(self, eventId, element, scope, cacheRequest, handler): +## '-no docstring-' +## #return +## +## def RemoveAutomationEventHandler(self, eventId, element, handler): +## '-no docstring-' +## #return +## +## def AddPropertyChangedEventHandlerNativeArray(self, element, scope, cacheRequest, handler, propertyArray, propertyCount): +## '-no docstring-' +## #return +## +## def AddPropertyChangedEventHandler(self, element, scope, cacheRequest, handler, propertyArray): +## '-no docstring-' +## #return +## +## def RemovePropertyChangedEventHandler(self, element, handler): +## '-no docstring-' +## #return +## +## def AddStructureChangedEventHandler(self, element, scope, cacheRequest, handler): +## '-no docstring-' +## #return +## +## def RemoveStructureChangedEventHandler(self, element, handler): +## '-no docstring-' +## #return +## +## def AddFocusChangedEventHandler(self, cacheRequest, handler): +## '-no docstring-' +## #return +## +## def RemoveFocusChangedEventHandler(self, handler): +## '-no docstring-' +## #return +## +## def RemoveAllEventHandlers(self): +## '-no docstring-' +## #return +## +## def IntNativeArrayToSafeArray(self, array, arrayCount): +## '-no docstring-' +## #return safeArray +## +## def IntSafeArrayToNativeArray(self, intArray): +## '-no docstring-' +## #return array, arrayCount +## +## def RectToVariant(self, rc): +## '-no docstring-' +## #return var +## +## def VariantToRect(self, var): +## '-no docstring-' +## #return rc +## +## def SafeArrayToRectNativeArray(self, rects): +## '-no docstring-' +## #return rectArray, rectArrayCount +## +## def CreateProxyFactoryEntry(self, factory): +## '-no docstring-' +## #return factoryEntry +## +## @property +## def ProxyFactoryMapping(self): +## '-no docstring-' +## #return factoryMapping +## +## def GetPropertyProgrammaticName(self, property): +## '-no docstring-' +## #return name +## +## def GetPatternProgrammaticName(self, pattern): +## '-no docstring-' +## #return name +## +## def PollForPotentialSupportedPatterns(self, pElement): +## '-no docstring-' +## #return patternIds, patternNames +## +## def PollForPotentialSupportedProperties(self, pElement): +## '-no docstring-' +## #return propertyIds, propertyNames +## +## def CheckNotSupported(self, value): +## '-no docstring-' +## #return isNotSupported +## +## @property +## def ReservedNotSupportedValue(self): +## '-no docstring-' +## #return notSupportedValue +## +## @property +## def ReservedMixedAttributeValue(self): +## '-no docstring-' +## #return mixedAttributeValue +## +## def ElementFromIAccessible(self, accessible, childId): +## '-no docstring-' +## #return element +## +## def ElementFromIAccessibleBuildCache(self, accessible, childId, cacheRequest): +## '-no docstring-' +## #return element +## + +IUIAutomation2._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'AutoSetFocus', + ( ['out', 'retval'], POINTER(c_int), 'AutoSetFocus' )), + COMMETHOD(['propput'], HRESULT, 'AutoSetFocus', + ( ['in'], c_int, 'AutoSetFocus' )), + COMMETHOD(['propget'], HRESULT, 'ConnectionTimeout', + ( ['out', 'retval'], POINTER(c_ulong), 'timeout' )), + COMMETHOD(['propput'], HRESULT, 'ConnectionTimeout', + ( ['in'], c_ulong, 'timeout' )), + COMMETHOD(['propget'], HRESULT, 'TransactionTimeout', + ( ['out', 'retval'], POINTER(c_ulong), 'timeout' )), + COMMETHOD(['propput'], HRESULT, 'TransactionTimeout', + ( ['in'], c_ulong, 'timeout' )), +] +################################################################ +## code template for IUIAutomation2 implementation +##class IUIAutomation2_Impl(object): +## def _get(self): +## '-no docstring-' +## #return AutoSetFocus +## def _set(self, AutoSetFocus): +## '-no docstring-' +## AutoSetFocus = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return timeout +## def _set(self, timeout): +## '-no docstring-' +## ConnectionTimeout = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return timeout +## def _set(self, timeout): +## '-no docstring-' +## TransactionTimeout = property(_get, _set, doc = _set.__doc__) +## + +class IUIAutomationTablePattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{620E691C-EA96-4710-A850-754B24CE2417}') + _idlflags_ = [] + +# values for enumeration 'RowOrColumnMajor' +RowOrColumnMajor_RowMajor = 0 +RowOrColumnMajor_ColumnMajor = 1 +RowOrColumnMajor_Indeterminate = 2 +RowOrColumnMajor = c_int # enum +IUIAutomationTablePattern._methods_ = [ + COMMETHOD([], HRESULT, 'GetCurrentRowHeaders', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentColumnHeaders', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentRowOrColumnMajor', + ( ['out', 'retval'], POINTER(RowOrColumnMajor), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedRowHeaders', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedColumnHeaders', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedRowOrColumnMajor', + ( ['out', 'retval'], POINTER(RowOrColumnMajor), 'retVal' )), +] +################################################################ +## code template for IUIAutomationTablePattern implementation +##class IUIAutomationTablePattern_Impl(object): +## def GetCurrentRowHeaders(self): +## '-no docstring-' +## #return retVal +## +## def GetCurrentColumnHeaders(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentRowOrColumnMajor(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedRowHeaders(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedColumnHeaders(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedRowOrColumnMajor(self): +## '-no docstring-' +## #return retVal +## + +class IUIAutomationMultipleViewPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{8D253C91-1DC5-4BB5-B18F-ADE16FA495E8}') + _idlflags_ = [] +IUIAutomationMultipleViewPattern._methods_ = [ + COMMETHOD([], HRESULT, 'GetViewName', + ( ['in'], c_int, 'view' ), + ( ['out', 'retval'], POINTER(BSTR), 'name' )), + COMMETHOD([], HRESULT, 'SetCurrentView', + ( ['in'], c_int, 'view' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCurrentView', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentSupportedViews', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_int)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCurrentView', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedSupportedViews', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_int)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationMultipleViewPattern implementation +##class IUIAutomationMultipleViewPattern_Impl(object): +## def GetViewName(self, view): +## '-no docstring-' +## #return name +## +## def SetCurrentView(self, view): +## '-no docstring-' +## #return +## +## @property +## def CurrentCurrentView(self): +## '-no docstring-' +## #return retVal +## +## def GetCurrentSupportedViews(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCurrentView(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedSupportedViews(self): +## '-no docstring-' +## #return retVal +## + +IUIAutomation3._methods_ = [ + COMMETHOD([], HRESULT, 'AddTextEditTextChangedEventHandler', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], TreeScope, 'scope' ), + ( ['in'], TextEditChangeType, 'TextEditChangeType' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['in'], POINTER(IUIAutomationTextEditTextChangedEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'RemoveTextEditTextChangedEventHandler', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationTextEditTextChangedEventHandler), 'handler' )), +] +################################################################ +## code template for IUIAutomation3 implementation +##class IUIAutomation3_Impl(object): +## def AddTextEditTextChangedEventHandler(self, element, scope, TextEditChangeType, cacheRequest, handler): +## '-no docstring-' +## #return +## +## def RemoveTextEditTextChangedEventHandler(self, element, handler): +## '-no docstring-' +## #return +## + +IUIAutomation4._methods_ = [ + COMMETHOD([], HRESULT, 'AddChangesEventHandler', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], TreeScope, 'scope' ), + ( ['in'], POINTER(c_int), 'changeTypes' ), + ( ['in'], c_int, 'changesCount' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'pCacheRequest' ), + ( ['in'], POINTER(IUIAutomationChangesEventHandler), 'handler' )), + COMMETHOD([], HRESULT, 'RemoveChangesEventHandler', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationChangesEventHandler), 'handler' )), +] +################################################################ +## code template for IUIAutomation4 implementation +##class IUIAutomation4_Impl(object): +## def AddChangesEventHandler(self, element, scope, changeTypes, changesCount, pCacheRequest, handler): +## '-no docstring-' +## #return +## +## def RemoveChangesEventHandler(self, element, handler): +## '-no docstring-' +## #return +## + +class IUIAutomationTableItemPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{0B964EB3-EF2E-4464-9C79-61D61737A27E}') + _idlflags_ = [] +IUIAutomationTableItemPattern._methods_ = [ + COMMETHOD([], HRESULT, 'GetCurrentRowHeaderItems', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentColumnHeaderItems', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedRowHeaderItems', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedColumnHeaderItems', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationTableItemPattern implementation +##class IUIAutomationTableItemPattern_Impl(object): +## def GetCurrentRowHeaderItems(self): +## '-no docstring-' +## #return retVal +## +## def GetCurrentColumnHeaderItems(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedRowHeaderItems(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedColumnHeaderItems(self): +## '-no docstring-' +## #return retVal +## + +class IUIAutomationObjectModelPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{71C284B3-C14D-4D14-981E-19751B0D756D}') + _idlflags_ = [] +IUIAutomationObjectModelPattern._methods_ = [ + COMMETHOD([], HRESULT, 'GetUnderlyingObjectModel', + ( ['out', 'retval'], POINTER(POINTER(IUnknown)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationObjectModelPattern implementation +##class IUIAutomationObjectModelPattern_Impl(object): +## def GetUnderlyingObjectModel(self): +## '-no docstring-' +## #return retVal +## + + +# values for enumeration 'DockPosition' +DockPosition_Top = 0 +DockPosition_Left = 1 +DockPosition_Bottom = 2 +DockPosition_Right = 3 +DockPosition_Fill = 4 +DockPosition_None = 5 +DockPosition = c_int # enum +class IUIAutomationDockPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{FDE5EF97-1464-48F6-90BF-43D0948E86EC}') + _idlflags_ = [] +IUIAutomationDockPattern._methods_ = [ + COMMETHOD([], HRESULT, 'SetDockPosition', + ( ['in'], DockPosition, 'dockPos' )), + COMMETHOD(['propget'], HRESULT, 'CurrentDockPosition', + ( ['out', 'retval'], POINTER(DockPosition), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedDockPosition', + ( ['out', 'retval'], POINTER(DockPosition), 'retVal' )), +] +################################################################ +## code template for IUIAutomationDockPattern implementation +##class IUIAutomationDockPattern_Impl(object): +## def SetDockPosition(self, dockPos): +## '-no docstring-' +## #return +## +## @property +## def CurrentDockPosition(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedDockPosition(self): +## '-no docstring-' +## #return retVal +## + +class IUIAutomationExpandCollapsePattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{619BE086-1F4E-4EE4-BAFA-210128738730}') + _idlflags_ = [] + +# values for enumeration 'ExpandCollapseState' +ExpandCollapseState_Collapsed = 0 +ExpandCollapseState_Expanded = 1 +ExpandCollapseState_PartiallyExpanded = 2 +ExpandCollapseState_LeafNode = 3 +ExpandCollapseState = c_int # enum +IUIAutomationExpandCollapsePattern._methods_ = [ + COMMETHOD([], HRESULT, 'Expand'), + COMMETHOD([], HRESULT, 'Collapse'), + COMMETHOD(['propget'], HRESULT, 'CurrentExpandCollapseState', + ( ['out', 'retval'], POINTER(ExpandCollapseState), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedExpandCollapseState', + ( ['out', 'retval'], POINTER(ExpandCollapseState), 'retVal' )), +] +################################################################ +## code template for IUIAutomationExpandCollapsePattern implementation +##class IUIAutomationExpandCollapsePattern_Impl(object): +## def Expand(self): +## '-no docstring-' +## #return +## +## def Collapse(self): +## '-no docstring-' +## #return +## +## @property +## def CurrentExpandCollapseState(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedExpandCollapseState(self): +## '-no docstring-' +## #return retVal +## + +class IUIAutomationGridPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{414C3CDC-856B-4F5B-8538-3131C6302550}') + _idlflags_ = [] +IUIAutomationGridPattern._methods_ = [ + COMMETHOD([], HRESULT, 'GetItem', + ( ['in'], c_int, 'row' ), + ( ['in'], c_int, 'column' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'element' )), + COMMETHOD(['propget'], HRESULT, 'CurrentRowCount', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentColumnCount', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedRowCount', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedColumnCount', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), +] +################################################################ +## code template for IUIAutomationGridPattern implementation +##class IUIAutomationGridPattern_Impl(object): +## def GetItem(self, row, column): +## '-no docstring-' +## #return element +## +## @property +## def CurrentRowCount(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentColumnCount(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedRowCount(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedColumnCount(self): +## '-no docstring-' +## #return retVal +## + +IUIAutomationEventHandler._methods_ = [ + COMMETHOD([], HRESULT, 'HandleAutomationEvent', + ( ['in'], POINTER(IUIAutomationElement), 'sender' ), + ( ['in'], c_int, 'eventId' )), +] +################################################################ +## code template for IUIAutomationEventHandler implementation +##class IUIAutomationEventHandler_Impl(object): +## def HandleAutomationEvent(self, sender, eventId): +## '-no docstring-' +## #return +## + +UIA_ValuePatternId = 10002 # Constant c_int +IAccessible._methods_ = [ + COMMETHOD([dispid(-5000), 'hidden', 'propget'], HRESULT, 'accParent', + ( ['out', 'retval'], POINTER(POINTER(IDispatch)), 'ppdispParent' )), + COMMETHOD([dispid(-5001), 'hidden', 'propget'], HRESULT, 'accChildCount', + ( ['out', 'retval'], POINTER(c_int), 'pcountChildren' )), + COMMETHOD([dispid(-5002), 'hidden', 'propget'], HRESULT, 'accChild', + ( ['in'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(POINTER(IDispatch)), 'ppdispChild' )), + COMMETHOD([dispid(-5003), 'hidden', 'propget'], HRESULT, 'accName', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(BSTR), 'pszName' )), + COMMETHOD([dispid(-5004), 'hidden', 'propget'], HRESULT, 'accValue', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(BSTR), 'pszValue' )), + COMMETHOD([dispid(-5005), 'hidden', 'propget'], HRESULT, 'accDescription', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(BSTR), 'pszDescription' )), + COMMETHOD([dispid(-5006), 'hidden', 'propget'], HRESULT, 'accRole', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(VARIANT), 'pvarRole' )), + COMMETHOD([dispid(-5007), 'hidden', 'propget'], HRESULT, 'accState', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(VARIANT), 'pvarState' )), + COMMETHOD([dispid(-5008), 'hidden', 'propget'], HRESULT, 'accHelp', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(BSTR), 'pszHelp' )), + COMMETHOD([dispid(-5009), 'hidden', 'propget'], HRESULT, 'accHelpTopic', + ( ['out'], POINTER(BSTR), 'pszHelpFile' ), + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(c_int), 'pidTopic' )), + COMMETHOD([dispid(-5010), 'hidden', 'propget'], HRESULT, 'accKeyboardShortcut', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(BSTR), 'pszKeyboardShortcut' )), + COMMETHOD([dispid(-5011), 'hidden', 'propget'], HRESULT, 'accFocus', + ( ['out', 'retval'], POINTER(VARIANT), 'pvarChild' )), + COMMETHOD([dispid(-5012), 'hidden', 'propget'], HRESULT, 'accSelection', + ( ['out', 'retval'], POINTER(VARIANT), 'pvarChildren' )), + COMMETHOD([dispid(-5013), 'hidden', 'propget'], HRESULT, 'accDefaultAction', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['out', 'retval'], POINTER(BSTR), 'pszDefaultAction' )), + COMMETHOD([dispid(-5014), 'hidden'], HRESULT, 'accSelect', + ( ['in'], c_int, 'flagsSelect' ), + ( ['in', 'optional'], VARIANT, 'varChild' )), + COMMETHOD([dispid(-5015), 'hidden'], HRESULT, 'accLocation', + ( ['out'], POINTER(c_int), 'pxLeft' ), + ( ['out'], POINTER(c_int), 'pyTop' ), + ( ['out'], POINTER(c_int), 'pcxWidth' ), + ( ['out'], POINTER(c_int), 'pcyHeight' ), + ( ['in', 'optional'], VARIANT, 'varChild' )), + COMMETHOD([dispid(-5016), 'hidden'], HRESULT, 'accNavigate', + ( ['in'], c_int, 'navDir' ), + ( ['in', 'optional'], VARIANT, 'varStart' ), + ( ['out', 'retval'], POINTER(VARIANT), 'pvarEndUpAt' )), + COMMETHOD([dispid(-5017), 'hidden'], HRESULT, 'accHitTest', + ( ['in'], c_int, 'xLeft' ), + ( ['in'], c_int, 'yTop' ), + ( ['out', 'retval'], POINTER(VARIANT), 'pvarChild' )), + COMMETHOD([dispid(-5018), 'hidden'], HRESULT, 'accDoDefaultAction', + ( ['in', 'optional'], VARIANT, 'varChild' )), + COMMETHOD([dispid(-5003), 'hidden', 'propput'], HRESULT, 'accName', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['in'], BSTR, 'pszName' )), + COMMETHOD([dispid(-5004), 'hidden', 'propput'], HRESULT, 'accValue', + ( ['in', 'optional'], VARIANT, 'varChild' ), + ( ['in'], BSTR, 'pszValue' )), +] +################################################################ +## code template for IAccessible implementation +##class IAccessible_Impl(object): +## @property +## def accParent(self): +## '-no docstring-' +## #return ppdispParent +## +## @property +## def accChildCount(self): +## '-no docstring-' +## #return pcountChildren +## +## @property +## def accChild(self, varChild): +## '-no docstring-' +## #return ppdispChild +## +## def _get(self, varChild): +## '-no docstring-' +## #return pszName +## def _set(self, varChild, pszName): +## '-no docstring-' +## accName = property(_get, _set, doc = _set.__doc__) +## +## def _get(self, varChild): +## '-no docstring-' +## #return pszValue +## def _set(self, varChild, pszValue): +## '-no docstring-' +## accValue = property(_get, _set, doc = _set.__doc__) +## +## @property +## def accDescription(self, varChild): +## '-no docstring-' +## #return pszDescription +## +## @property +## def accRole(self, varChild): +## '-no docstring-' +## #return pvarRole +## +## @property +## def accState(self, varChild): +## '-no docstring-' +## #return pvarState +## +## @property +## def accHelp(self, varChild): +## '-no docstring-' +## #return pszHelp +## +## @property +## def accHelpTopic(self, varChild): +## '-no docstring-' +## #return pszHelpFile, pidTopic +## +## @property +## def accKeyboardShortcut(self, varChild): +## '-no docstring-' +## #return pszKeyboardShortcut +## +## @property +## def accFocus(self): +## '-no docstring-' +## #return pvarChild +## +## @property +## def accSelection(self): +## '-no docstring-' +## #return pvarChildren +## +## @property +## def accDefaultAction(self, varChild): +## '-no docstring-' +## #return pszDefaultAction +## +## def accSelect(self, flagsSelect, varChild): +## '-no docstring-' +## #return +## +## def accLocation(self, varChild): +## '-no docstring-' +## #return pxLeft, pyTop, pcxWidth, pcyHeight +## +## def accNavigate(self, navDir, varStart): +## '-no docstring-' +## #return pvarEndUpAt +## +## def accHitTest(self, xLeft, yTop): +## '-no docstring-' +## #return pvarChild +## +## def accDoDefaultAction(self, varChild): +## '-no docstring-' +## #return +## + +IUIAutomationProxyFactoryMapping._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'count', + ( ['out', 'retval'], POINTER(c_uint), 'count' )), + COMMETHOD([], HRESULT, 'GetTable', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(POINTER(IUIAutomationProxyFactoryEntry))), 'table' )), + COMMETHOD([], HRESULT, 'GetEntry', + ( ['in'], c_uint, 'index' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationProxyFactoryEntry)), 'entry' )), + COMMETHOD([], HRESULT, 'SetTable', + ( ['in'], _midlSAFEARRAY(POINTER(IUIAutomationProxyFactoryEntry)), 'factoryList' )), + COMMETHOD([], HRESULT, 'InsertEntries', + ( ['in'], c_uint, 'before' ), + ( ['in'], _midlSAFEARRAY(POINTER(IUIAutomationProxyFactoryEntry)), 'factoryList' )), + COMMETHOD([], HRESULT, 'InsertEntry', + ( ['in'], c_uint, 'before' ), + ( ['in'], POINTER(IUIAutomationProxyFactoryEntry), 'factory' )), + COMMETHOD([], HRESULT, 'RemoveEntry', + ( ['in'], c_uint, 'index' )), + COMMETHOD([], HRESULT, 'ClearTable'), + COMMETHOD([], HRESULT, 'RestoreDefaultTable'), +] +################################################################ +## code template for IUIAutomationProxyFactoryMapping implementation +##class IUIAutomationProxyFactoryMapping_Impl(object): +## @property +## def count(self): +## '-no docstring-' +## #return count +## +## def GetTable(self): +## '-no docstring-' +## #return table +## +## def GetEntry(self, index): +## '-no docstring-' +## #return entry +## +## def SetTable(self, factoryList): +## '-no docstring-' +## #return +## +## def InsertEntries(self, before, factoryList): +## '-no docstring-' +## #return +## +## def InsertEntry(self, before, factory): +## '-no docstring-' +## #return +## +## def RemoveEntry(self, index): +## '-no docstring-' +## #return +## +## def ClearTable(self): +## '-no docstring-' +## #return +## +## def RestoreDefaultTable(self): +## '-no docstring-' +## #return +## + +UIA_InvokePatternId = 10000 # Constant c_int +UIA_SelectionPatternId = 10001 # Constant c_int + +# values for enumeration 'ProviderOptions' +ProviderOptions_ClientSideProvider = 1 +ProviderOptions_ServerSideProvider = 2 +ProviderOptions_NonClientAreaProvider = 4 +ProviderOptions_OverrideProvider = 8 +ProviderOptions_ProviderOwnsSetFocus = 16 +ProviderOptions_UseComThreading = 32 +ProviderOptions_RefuseNonClientSupport = 64 +ProviderOptions_HasNativeIAccessible = 128 +ProviderOptions_UseClientCoordinates = 256 +ProviderOptions = c_int # enum +IRawElementProviderSimple._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'ProviderOptions', + ( ['out', 'retval'], POINTER(ProviderOptions), 'pRetVal' )), + COMMETHOD([], HRESULT, 'GetPatternProvider', + ( ['in'], c_int, 'patternId' ), + ( ['out', 'retval'], POINTER(POINTER(IUnknown)), 'pRetVal' )), + COMMETHOD([], HRESULT, 'GetPropertyValue', + ( ['in'], c_int, 'propertyId' ), + ( ['out', 'retval'], POINTER(VARIANT), 'pRetVal' )), + COMMETHOD(['propget'], HRESULT, 'HostRawElementProvider', + ( ['out', 'retval'], POINTER(POINTER(IRawElementProviderSimple)), 'pRetVal' )), +] +################################################################ +## code template for IRawElementProviderSimple implementation +##class IRawElementProviderSimple_Impl(object): +## @property +## def ProviderOptions(self): +## '-no docstring-' +## #return pRetVal +## +## def GetPatternProvider(self, patternId): +## '-no docstring-' +## #return pRetVal +## +## def GetPropertyValue(self, propertyId): +## '-no docstring-' +## #return pRetVal +## +## @property +## def HostRawElementProvider(self): +## '-no docstring-' +## #return pRetVal +## + +class IUIAutomationTransformPattern2(IUIAutomationTransformPattern): + _case_insensitive_ = True + _iid_ = GUID('{6D74D017-6ECB-4381-B38B-3C17A48FF1C2}') + _idlflags_ = [] + +# values for enumeration 'ZoomUnit' +ZoomUnit_NoAmount = 0 +ZoomUnit_LargeDecrement = 1 +ZoomUnit_SmallDecrement = 2 +ZoomUnit_LargeIncrement = 3 +ZoomUnit_SmallIncrement = 4 +ZoomUnit = c_int # enum +IUIAutomationTransformPattern2._methods_ = [ + COMMETHOD([], HRESULT, 'Zoom', + ( ['in'], c_double, 'zoomValue' )), + COMMETHOD([], HRESULT, 'ZoomByUnit', + ( ['in'], ZoomUnit, 'ZoomUnit' )), + COMMETHOD(['propget'], HRESULT, 'CurrentCanZoom', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedCanZoom', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentZoomLevel', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedZoomLevel', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentZoomMinimum', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedZoomMinimum', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentZoomMaximum', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedZoomMaximum', + ( ['out', 'retval'], POINTER(c_double), 'retVal' )), +] +################################################################ +## code template for IUIAutomationTransformPattern2 implementation +##class IUIAutomationTransformPattern2_Impl(object): +## def Zoom(self, zoomValue): +## '-no docstring-' +## #return +## +## def ZoomByUnit(self, ZoomUnit): +## '-no docstring-' +## #return +## +## @property +## def CurrentCanZoom(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedCanZoom(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentZoomLevel(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedZoomLevel(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentZoomMinimum(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedZoomMinimum(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentZoomMaximum(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedZoomMaximum(self): +## '-no docstring-' +## #return retVal +## + +class Library(object): + name = 'UIAutomationClient' + _reg_typelib_ = ('{944DE083-8FB8-45CF-BCB7-C477ACB2F897}', 1, 0) + +IUIAutomationProxyFactoryEntry._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'ProxyFactory', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationProxyFactory)), 'factory' )), + COMMETHOD(['propget'], HRESULT, 'ClassName', + ( ['out', 'retval'], POINTER(BSTR), 'ClassName' )), + COMMETHOD(['propget'], HRESULT, 'ImageName', + ( ['out', 'retval'], POINTER(BSTR), 'ImageName' )), + COMMETHOD(['propget'], HRESULT, 'AllowSubstringMatch', + ( ['out', 'retval'], POINTER(c_int), 'AllowSubstringMatch' )), + COMMETHOD(['propget'], HRESULT, 'CanCheckBaseClass', + ( ['out', 'retval'], POINTER(c_int), 'CanCheckBaseClass' )), + COMMETHOD(['propget'], HRESULT, 'NeedsAdviseEvents', + ( ['out', 'retval'], POINTER(c_int), 'adviseEvents' )), + COMMETHOD(['propput'], HRESULT, 'ClassName', + ( ['in'], WSTRING, 'ClassName' )), + COMMETHOD(['propput'], HRESULT, 'ImageName', + ( ['in'], WSTRING, 'ImageName' )), + COMMETHOD(['propput'], HRESULT, 'AllowSubstringMatch', + ( ['in'], c_int, 'AllowSubstringMatch' )), + COMMETHOD(['propput'], HRESULT, 'CanCheckBaseClass', + ( ['in'], c_int, 'CanCheckBaseClass' )), + COMMETHOD(['propput'], HRESULT, 'NeedsAdviseEvents', + ( ['in'], c_int, 'adviseEvents' )), + COMMETHOD([], HRESULT, 'SetWinEventsForAutomationEvent', + ( ['in'], c_int, 'eventId' ), + ( ['in'], c_int, 'propertyId' ), + ( ['in'], _midlSAFEARRAY(c_uint), 'winEvents' )), + COMMETHOD([], HRESULT, 'GetWinEventsForAutomationEvent', + ( ['in'], c_int, 'eventId' ), + ( ['in'], c_int, 'propertyId' ), + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(c_uint)), 'winEvents' )), +] +################################################################ +## code template for IUIAutomationProxyFactoryEntry implementation +##class IUIAutomationProxyFactoryEntry_Impl(object): +## @property +## def ProxyFactory(self): +## '-no docstring-' +## #return factory +## +## def _get(self): +## '-no docstring-' +## #return ClassName +## def _set(self, ClassName): +## '-no docstring-' +## ClassName = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return ImageName +## def _set(self, ImageName): +## '-no docstring-' +## ImageName = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return AllowSubstringMatch +## def _set(self, AllowSubstringMatch): +## '-no docstring-' +## AllowSubstringMatch = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return CanCheckBaseClass +## def _set(self, CanCheckBaseClass): +## '-no docstring-' +## CanCheckBaseClass = property(_get, _set, doc = _set.__doc__) +## +## def _get(self): +## '-no docstring-' +## #return adviseEvents +## def _set(self, adviseEvents): +## '-no docstring-' +## NeedsAdviseEvents = property(_get, _set, doc = _set.__doc__) +## +## def SetWinEventsForAutomationEvent(self, eventId, propertyId, winEvents): +## '-no docstring-' +## #return +## +## def GetWinEventsForAutomationEvent(self, eventId, propertyId): +## '-no docstring-' +## #return winEvents +## + +class IUIAutomationTextChildPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{6552B038-AE05-40C8-ABFD-AA08352AAB86}') + _idlflags_ = [] +IUIAutomationTextChildPattern._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'TextContainer', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'container' )), + COMMETHOD(['propget'], HRESULT, 'TextRange', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationTextRange)), 'range' )), +] +################################################################ +## code template for IUIAutomationTextChildPattern implementation +##class IUIAutomationTextChildPattern_Impl(object): +## @property +## def TextContainer(self): +## '-no docstring-' +## #return container +## +## @property +## def TextRange(self): +## '-no docstring-' +## #return range +## + +class IUIAutomationDragPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{1DC7B570-1F54-4BAD-BCDA-D36A722FB7BD}') + _idlflags_ = [] +IUIAutomationDragPattern._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentIsGrabbed', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedIsGrabbed', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentDropEffect', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedDropEffect', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentDropEffects', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(BSTR)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedDropEffects', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(BSTR)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentGrabbedItems', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedGrabbedItems', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationDragPattern implementation +##class IUIAutomationDragPattern_Impl(object): +## @property +## def CurrentIsGrabbed(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedIsGrabbed(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentDropEffect(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedDropEffect(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentDropEffects(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedDropEffects(self): +## '-no docstring-' +## #return retVal +## +## def GetCurrentGrabbedItems(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedGrabbedItems(self): +## '-no docstring-' +## #return retVal +## + +class IUIAutomationItemContainerPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{C690FDB2-27A8-423C-812D-429773C9084E}') + _idlflags_ = [] +IUIAutomationItemContainerPattern._methods_ = [ + COMMETHOD([], HRESULT, 'FindItemByProperty', + ( ['in'], POINTER(IUIAutomationElement), 'pStartAfter' ), + ( ['in'], c_int, 'propertyId' ), + ( ['in'], VARIANT, 'value' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'pFound' )), +] +################################################################ +## code template for IUIAutomationItemContainerPattern implementation +##class IUIAutomationItemContainerPattern_Impl(object): +## def FindItemByProperty(self, pStartAfter, propertyId, value): +## '-no docstring-' +## #return pFound +## + +UIA_RuntimeIdPropertyId = 30000 # Constant c_int +class IUIAutomationBoolCondition(IUIAutomationCondition): + _case_insensitive_ = True + _iid_ = GUID('{1B4E1F2E-75EB-4D0B-8952-5A69988E2307}') + _idlflags_ = [] +IUIAutomationBoolCondition._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'BooleanValue', + ( ['out', 'retval'], POINTER(c_int), 'boolVal' )), +] +################################################################ +## code template for IUIAutomationBoolCondition implementation +##class IUIAutomationBoolCondition_Impl(object): +## @property +## def BooleanValue(self): +## '-no docstring-' +## #return boolVal +## + +class IUIAutomationCustomNavigationPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{01EA217A-1766-47ED-A6CC-ACF492854B1F}') + _idlflags_ = [] + +# values for enumeration 'NavigateDirection' +NavigateDirection_Parent = 0 +NavigateDirection_NextSibling = 1 +NavigateDirection_PreviousSibling = 2 +NavigateDirection_FirstChild = 3 +NavigateDirection_LastChild = 4 +NavigateDirection = c_int # enum +IUIAutomationCustomNavigationPattern._methods_ = [ + COMMETHOD([], HRESULT, 'Navigate', + ( ['in'], NavigateDirection, 'direction' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'pRetVal' )), +] +################################################################ +## code template for IUIAutomationCustomNavigationPattern implementation +##class IUIAutomationCustomNavigationPattern_Impl(object): +## def Navigate(self, direction): +## '-no docstring-' +## #return pRetVal +## + +UIA_ProcessIdPropertyId = 30002 # Constant c_int +UIA_ControlTypePropertyId = 30003 # Constant c_int +UIA_LocalizedControlTypePropertyId = 30004 # Constant c_int +UIA_RangeValuePatternId = 10003 # Constant c_int +UIA_ScrollPatternId = 10004 # Constant c_int +UIA_ExpandCollapsePatternId = 10005 # Constant c_int +UIA_GridPatternId = 10006 # Constant c_int +UIA_GridItemPatternId = 10007 # Constant c_int +UIA_MultipleViewPatternId = 10008 # Constant c_int +class IUIAutomationPropertyCondition(IUIAutomationCondition): + _case_insensitive_ = True + _iid_ = GUID('{99EBF2CB-5578-4267-9AD4-AFD6EA77E94B}') + _idlflags_ = [] +IUIAutomationPropertyCondition._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'propertyId', + ( ['out', 'retval'], POINTER(c_int), 'propertyId' )), + COMMETHOD(['propget'], HRESULT, 'PropertyValue', + ( ['out', 'retval'], POINTER(VARIANT), 'PropertyValue' )), + COMMETHOD(['propget'], HRESULT, 'PropertyConditionFlags', + ( ['out', 'retval'], POINTER(PropertyConditionFlags), 'flags' )), +] +################################################################ +## code template for IUIAutomationPropertyCondition implementation +##class IUIAutomationPropertyCondition_Impl(object): +## @property +## def propertyId(self): +## '-no docstring-' +## #return propertyId +## +## @property +## def PropertyValue(self): +## '-no docstring-' +## #return PropertyValue +## +## @property +## def PropertyConditionFlags(self): +## '-no docstring-' +## #return flags +## + +UIA_WindowPatternId = 10009 # Constant c_int +class IUIAutomationVirtualizedItemPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{6BA3D7A6-04CF-4F11-8793-A8D1CDE9969F}') + _idlflags_ = [] +IUIAutomationVirtualizedItemPattern._methods_ = [ + COMMETHOD([], HRESULT, 'Realize'), +] +################################################################ +## code template for IUIAutomationVirtualizedItemPattern implementation +##class IUIAutomationVirtualizedItemPattern_Impl(object): +## def Realize(self): +## '-no docstring-' +## #return +## + +UIA_SelectionItemPatternId = 10010 # Constant c_int +UIA_DockPatternId = 10011 # Constant c_int +UIA_TablePatternId = 10012 # Constant c_int +UIA_TableItemPatternId = 10013 # Constant c_int +UIA_TextPatternId = 10014 # Constant c_int +UIA_TogglePatternId = 10015 # Constant c_int +UIA_TransformPatternId = 10016 # Constant c_int +UIA_ScrollItemPatternId = 10017 # Constant c_int +UIA_LegacyIAccessiblePatternId = 10018 # Constant c_int +class IUIAutomationLegacyIAccessiblePattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{828055AD-355B-4435-86D5-3B51C14A9B1B}') + _idlflags_ = [] +IUIAutomationLegacyIAccessiblePattern._methods_ = [ + COMMETHOD([], HRESULT, 'Select', + ( [], c_int, 'flagsSelect' )), + COMMETHOD([], HRESULT, 'DoDefaultAction'), + COMMETHOD([], HRESULT, 'SetValue', + ( [], WSTRING, 'szValue' )), + COMMETHOD(['propget'], HRESULT, 'CurrentChildId', + ( ['out', 'retval'], POINTER(c_int), 'pRetVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentName', + ( ['out', 'retval'], POINTER(BSTR), 'pszName' )), + COMMETHOD(['propget'], HRESULT, 'CurrentValue', + ( ['out', 'retval'], POINTER(BSTR), 'pszValue' )), + COMMETHOD(['propget'], HRESULT, 'CurrentDescription', + ( ['out', 'retval'], POINTER(BSTR), 'pszDescription' )), + COMMETHOD(['propget'], HRESULT, 'CurrentRole', + ( ['out', 'retval'], POINTER(c_ulong), 'pdwRole' )), + COMMETHOD(['propget'], HRESULT, 'CurrentState', + ( ['out', 'retval'], POINTER(c_ulong), 'pdwState' )), + COMMETHOD(['propget'], HRESULT, 'CurrentHelp', + ( ['out', 'retval'], POINTER(BSTR), 'pszHelp' )), + COMMETHOD(['propget'], HRESULT, 'CurrentKeyboardShortcut', + ( ['out', 'retval'], POINTER(BSTR), 'pszKeyboardShortcut' )), + COMMETHOD([], HRESULT, 'GetCurrentSelection', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'pvarSelectedChildren' )), + COMMETHOD(['propget'], HRESULT, 'CurrentDefaultAction', + ( ['out', 'retval'], POINTER(BSTR), 'pszDefaultAction' )), + COMMETHOD(['propget'], HRESULT, 'CachedChildId', + ( ['out', 'retval'], POINTER(c_int), 'pRetVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedName', + ( ['out', 'retval'], POINTER(BSTR), 'pszName' )), + COMMETHOD(['propget'], HRESULT, 'CachedValue', + ( ['out', 'retval'], POINTER(BSTR), 'pszValue' )), + COMMETHOD(['propget'], HRESULT, 'CachedDescription', + ( ['out', 'retval'], POINTER(BSTR), 'pszDescription' )), + COMMETHOD(['propget'], HRESULT, 'CachedRole', + ( ['out', 'retval'], POINTER(c_ulong), 'pdwRole' )), + COMMETHOD(['propget'], HRESULT, 'CachedState', + ( ['out', 'retval'], POINTER(c_ulong), 'pdwState' )), + COMMETHOD(['propget'], HRESULT, 'CachedHelp', + ( ['out', 'retval'], POINTER(BSTR), 'pszHelp' )), + COMMETHOD(['propget'], HRESULT, 'CachedKeyboardShortcut', + ( ['out', 'retval'], POINTER(BSTR), 'pszKeyboardShortcut' )), + COMMETHOD([], HRESULT, 'GetCachedSelection', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElementArray)), 'pvarSelectedChildren' )), + COMMETHOD(['propget'], HRESULT, 'CachedDefaultAction', + ( ['out', 'retval'], POINTER(BSTR), 'pszDefaultAction' )), + COMMETHOD([], HRESULT, 'GetIAccessible', + ( ['out', 'retval'], POINTER(POINTER(IAccessible)), 'ppAccessible' )), +] +################################################################ +## code template for IUIAutomationLegacyIAccessiblePattern implementation +##class IUIAutomationLegacyIAccessiblePattern_Impl(object): +## def Select(self, flagsSelect): +## '-no docstring-' +## #return +## +## def DoDefaultAction(self): +## '-no docstring-' +## #return +## +## def SetValue(self, szValue): +## '-no docstring-' +## #return +## +## @property +## def CurrentChildId(self): +## '-no docstring-' +## #return pRetVal +## +## @property +## def CurrentName(self): +## '-no docstring-' +## #return pszName +## +## @property +## def CurrentValue(self): +## '-no docstring-' +## #return pszValue +## +## @property +## def CurrentDescription(self): +## '-no docstring-' +## #return pszDescription +## +## @property +## def CurrentRole(self): +## '-no docstring-' +## #return pdwRole +## +## @property +## def CurrentState(self): +## '-no docstring-' +## #return pdwState +## +## @property +## def CurrentHelp(self): +## '-no docstring-' +## #return pszHelp +## +## @property +## def CurrentKeyboardShortcut(self): +## '-no docstring-' +## #return pszKeyboardShortcut +## +## def GetCurrentSelection(self): +## '-no docstring-' +## #return pvarSelectedChildren +## +## @property +## def CurrentDefaultAction(self): +## '-no docstring-' +## #return pszDefaultAction +## +## @property +## def CachedChildId(self): +## '-no docstring-' +## #return pRetVal +## +## @property +## def CachedName(self): +## '-no docstring-' +## #return pszName +## +## @property +## def CachedValue(self): +## '-no docstring-' +## #return pszValue +## +## @property +## def CachedDescription(self): +## '-no docstring-' +## #return pszDescription +## +## @property +## def CachedRole(self): +## '-no docstring-' +## #return pdwRole +## +## @property +## def CachedState(self): +## '-no docstring-' +## #return pdwState +## +## @property +## def CachedHelp(self): +## '-no docstring-' +## #return pszHelp +## +## @property +## def CachedKeyboardShortcut(self): +## '-no docstring-' +## #return pszKeyboardShortcut +## +## def GetCachedSelection(self): +## '-no docstring-' +## #return pvarSelectedChildren +## +## @property +## def CachedDefaultAction(self): +## '-no docstring-' +## #return pszDefaultAction +## +## def GetIAccessible(self): +## '-no docstring-' +## #return ppAccessible +## + +UIA_ItemContainerPatternId = 10019 # Constant c_int +UIA_VirtualizedItemPatternId = 10020 # Constant c_int +UIA_SynchronizedInputPatternId = 10021 # Constant c_int +UIA_ObjectModelPatternId = 10022 # Constant c_int +class IUIAutomationAnnotationPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{9A175B21-339E-41B1-8E8B-623F6B681098}') + _idlflags_ = [] +IUIAutomationAnnotationPattern._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentAnnotationTypeId', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAnnotationTypeName', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentAuthor', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentDateTime', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentTarget', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAnnotationTypeId', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAnnotationTypeName', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedAuthor', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedDateTime', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedTarget', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'retVal' )), +] +################################################################ +## code template for IUIAutomationAnnotationPattern implementation +##class IUIAutomationAnnotationPattern_Impl(object): +## @property +## def CurrentAnnotationTypeId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAnnotationTypeName(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentAuthor(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentDateTime(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentTarget(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAnnotationTypeId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAnnotationTypeName(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedAuthor(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedDateTime(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedTarget(self): +## '-no docstring-' +## #return retVal +## + +UIA_AnnotationPatternId = 10023 # Constant c_int +UIA_TextPattern2Id = 10024 # Constant c_int +class IUIAutomationAndCondition(IUIAutomationCondition): + _case_insensitive_ = True + _iid_ = GUID('{A7D0AF36-B912-45FE-9855-091DDC174AEC}') + _idlflags_ = [] +IUIAutomationAndCondition._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'ChildCount', + ( ['out', 'retval'], POINTER(c_int), 'ChildCount' )), + COMMETHOD([], HRESULT, 'GetChildrenAsNativeArray', + ( ['out'], POINTER(POINTER(POINTER(IUIAutomationCondition))), 'childArray' ), + ( ['out'], POINTER(c_int), 'childArrayCount' )), + COMMETHOD([], HRESULT, 'GetChildren', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(POINTER(IUIAutomationCondition))), 'childArray' )), +] +################################################################ +## code template for IUIAutomationAndCondition implementation +##class IUIAutomationAndCondition_Impl(object): +## @property +## def ChildCount(self): +## '-no docstring-' +## #return ChildCount +## +## def GetChildrenAsNativeArray(self): +## '-no docstring-' +## #return childArray, childArrayCount +## +## def GetChildren(self): +## '-no docstring-' +## #return childArray +## + +UIA_StylesPatternId = 10025 # Constant c_int +UIA_SpreadsheetPatternId = 10026 # Constant c_int +UIA_SpreadsheetItemPatternId = 10027 # Constant c_int +UIA_TransformPattern2Id = 10028 # Constant c_int +UIA_TextChildPatternId = 10029 # Constant c_int +UIA_DragPatternId = 10030 # Constant c_int +UIA_DropTargetPatternId = 10031 # Constant c_int +UIA_TextEditPatternId = 10032 # Constant c_int +UIA_CustomNavigationPatternId = 10033 # Constant c_int +class IUIAutomationOrCondition(IUIAutomationCondition): + _case_insensitive_ = True + _iid_ = GUID('{8753F032-3DB1-47B5-A1FC-6E34A266C712}') + _idlflags_ = [] +IUIAutomationOrCondition._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'ChildCount', + ( ['out', 'retval'], POINTER(c_int), 'ChildCount' )), + COMMETHOD([], HRESULT, 'GetChildrenAsNativeArray', + ( ['out'], POINTER(POINTER(POINTER(IUIAutomationCondition))), 'childArray' ), + ( ['out'], POINTER(c_int), 'childArrayCount' )), + COMMETHOD([], HRESULT, 'GetChildren', + ( ['out', 'retval'], POINTER(_midlSAFEARRAY(POINTER(IUIAutomationCondition))), 'childArray' )), +] +################################################################ +## code template for IUIAutomationOrCondition implementation +##class IUIAutomationOrCondition_Impl(object): +## @property +## def ChildCount(self): +## '-no docstring-' +## #return ChildCount +## +## def GetChildrenAsNativeArray(self): +## '-no docstring-' +## #return childArray, childArrayCount +## +## def GetChildren(self): +## '-no docstring-' +## #return childArray +## + +UIA_ToolTipClosedEventId = 20001 # Constant c_int +UIA_StructureChangedEventId = 20002 # Constant c_int +UIA_MenuOpenedEventId = 20003 # Constant c_int +UIA_AutomationPropertyChangedEventId = 20004 # Constant c_int +UIA_AutomationFocusChangedEventId = 20005 # Constant c_int +UIA_AsyncContentLoadedEventId = 20006 # Constant c_int +UIA_MenuClosedEventId = 20007 # Constant c_int +UIA_LayoutInvalidatedEventId = 20008 # Constant c_int +UIA_Invoke_InvokedEventId = 20009 # Constant c_int +UIA_SelectionItem_ElementAddedToSelectionEventId = 20010 # Constant c_int +UIA_SelectionItem_ElementRemovedFromSelectionEventId = 20011 # Constant c_int +UIA_SelectionItem_ElementSelectedEventId = 20012 # Constant c_int +UIA_Selection_InvalidatedEventId = 20013 # Constant c_int +UIA_Text_TextSelectionChangedEventId = 20014 # Constant c_int +class IUIAutomationNotCondition(IUIAutomationCondition): + _case_insensitive_ = True + _iid_ = GUID('{F528B657-847B-498C-8896-D52B565407A1}') + _idlflags_ = [] +IUIAutomationNotCondition._methods_ = [ + COMMETHOD([], HRESULT, 'GetChild', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'condition' )), +] +################################################################ +## code template for IUIAutomationNotCondition implementation +##class IUIAutomationNotCondition_Impl(object): +## def GetChild(self): +## '-no docstring-' +## #return condition +## + +UIA_Text_TextChangedEventId = 20015 # Constant c_int +UIA_Window_WindowOpenedEventId = 20016 # Constant c_int +UIA_Window_WindowClosedEventId = 20017 # Constant c_int +UIA_MenuModeStartEventId = 20018 # Constant c_int +UIA_MenuModeEndEventId = 20019 # Constant c_int +UIA_InputReachedTargetEventId = 20020 # Constant c_int +class IUIAutomationStylesPattern(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IUnknown): + _case_insensitive_ = True + _iid_ = GUID('{85B5F0A2-BD79-484A-AD2B-388C9838D5FB}') + _idlflags_ = [] +IUIAutomationStylesPattern._methods_ = [ + COMMETHOD(['propget'], HRESULT, 'CurrentStyleId', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentStyleName', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentFillColor', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentFillPatternStyle', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentShape', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentFillPatternColor', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CurrentExtendedProperties', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCurrentExtendedPropertiesAsArray', + ( ['out'], POINTER(POINTER(ExtendedProperty)), 'propertyArray' ), + ( ['out'], POINTER(c_int), 'propertyCount' )), + COMMETHOD(['propget'], HRESULT, 'CachedStyleId', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedStyleName', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedFillColor', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedFillPatternStyle', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedShape', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedFillPatternColor', + ( ['out', 'retval'], POINTER(c_int), 'retVal' )), + COMMETHOD(['propget'], HRESULT, 'CachedExtendedProperties', + ( ['out', 'retval'], POINTER(BSTR), 'retVal' )), + COMMETHOD([], HRESULT, 'GetCachedExtendedPropertiesAsArray', + ( ['out'], POINTER(POINTER(ExtendedProperty)), 'propertyArray' ), + ( ['out'], POINTER(c_int), 'propertyCount' )), +] +################################################################ +## code template for IUIAutomationStylesPattern implementation +##class IUIAutomationStylesPattern_Impl(object): +## @property +## def CurrentStyleId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentStyleName(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentFillColor(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentFillPatternStyle(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentShape(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentFillPatternColor(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CurrentExtendedProperties(self): +## '-no docstring-' +## #return retVal +## +## def GetCurrentExtendedPropertiesAsArray(self): +## '-no docstring-' +## #return propertyArray, propertyCount +## +## @property +## def CachedStyleId(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedStyleName(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedFillColor(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedFillPatternStyle(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedShape(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedFillPatternColor(self): +## '-no docstring-' +## #return retVal +## +## @property +## def CachedExtendedProperties(self): +## '-no docstring-' +## #return retVal +## +## def GetCachedExtendedPropertiesAsArray(self): +## '-no docstring-' +## #return propertyArray, propertyCount +## + +UIA_InputReachedOtherElementEventId = 20021 # Constant c_int +UIA_InputDiscardedEventId = 20022 # Constant c_int +UIA_SystemAlertEventId = 20023 # Constant c_int +IUIAutomationTreeWalker._methods_ = [ + COMMETHOD([], HRESULT, 'GetParentElement', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'parent' )), + COMMETHOD([], HRESULT, 'GetFirstChildElement', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'first' )), + COMMETHOD([], HRESULT, 'GetLastChildElement', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'last' )), + COMMETHOD([], HRESULT, 'GetNextSiblingElement', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'next' )), + COMMETHOD([], HRESULT, 'GetPreviousSiblingElement', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'previous' )), + COMMETHOD([], HRESULT, 'NormalizeElement', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'normalized' )), + COMMETHOD([], HRESULT, 'GetParentElementBuildCache', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'parent' )), + COMMETHOD([], HRESULT, 'GetFirstChildElementBuildCache', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'first' )), + COMMETHOD([], HRESULT, 'GetLastChildElementBuildCache', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'last' )), + COMMETHOD([], HRESULT, 'GetNextSiblingElementBuildCache', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'next' )), + COMMETHOD([], HRESULT, 'GetPreviousSiblingElementBuildCache', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'previous' )), + COMMETHOD([], HRESULT, 'NormalizeElementBuildCache', + ( ['in'], POINTER(IUIAutomationElement), 'element' ), + ( ['in'], POINTER(IUIAutomationCacheRequest), 'cacheRequest' ), + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationElement)), 'normalized' )), + COMMETHOD(['propget'], HRESULT, 'condition', + ( ['out', 'retval'], POINTER(POINTER(IUIAutomationCondition)), 'condition' )), +] +################################################################ +## code template for IUIAutomationTreeWalker implementation +##class IUIAutomationTreeWalker_Impl(object): +## def GetParentElement(self, element): +## '-no docstring-' +## #return parent +## +## def GetFirstChildElement(self, element): +## '-no docstring-' +## #return first +## +## def GetLastChildElement(self, element): +## '-no docstring-' +## #return last +## +## def GetNextSiblingElement(self, element): +## '-no docstring-' +## #return next +## +## def GetPreviousSiblingElement(self, element): +## '-no docstring-' +## #return previous +## +## def NormalizeElement(self, element): +## '-no docstring-' +## #return normalized +## +## def GetParentElementBuildCache(self, element, cacheRequest): +## '-no docstring-' +## #return parent +## +## def GetFirstChildElementBuildCache(self, element, cacheRequest): +## '-no docstring-' +## #return first +## +## def GetLastChildElementBuildCache(self, element, cacheRequest): +## '-no docstring-' +## #return last +## +## def GetNextSiblingElementBuildCache(self, element, cacheRequest): +## '-no docstring-' +## #return next +## +## def GetPreviousSiblingElementBuildCache(self, element, cacheRequest): +## '-no docstring-' +## #return previous +## +## def NormalizeElementBuildCache(self, element, cacheRequest): +## '-no docstring-' +## #return normalized +## +## @property +## def condition(self): +## '-no docstring-' +## #return condition +## + +UIA_LiveRegionChangedEventId = 20024 # Constant c_int +UIA_HostedFragmentRootsInvalidatedEventId = 20025 # Constant c_int +UIA_Drag_DragStartEventId = 20026 # Constant c_int +UIA_Drag_DragCancelEventId = 20027 # Constant c_int +UIA_Drag_DragCompleteEventId = 20028 # Constant c_int +UIA_DropTarget_DragEnterEventId = 20029 # Constant c_int +UIA_DropTarget_DragLeaveEventId = 20030 # Constant c_int +UIA_DropTarget_DroppedEventId = 20031 # Constant c_int +UIA_TextEdit_TextChangedEventId = 20032 # Constant c_int +UIA_TextEdit_ConversionTargetChangedEventId = 20033 # Constant c_int +UIA_NamePropertyId = 30005 # Constant c_int +UIA_BoundingRectanglePropertyId = 30001 # Constant c_int +__all__ = [ 'StyleId_Heading8', + 'UIA_IsRangeValuePatternAvailablePropertyId', + 'IUIAutomationGridPattern', + 'UIA_IsItemContainerPatternAvailablePropertyId', + 'UIA_GridPatternId', 'UIA_ItemContainerPatternId', + 'IUIAutomationTogglePattern', + 'UIA_IsSelectionPatternAvailablePropertyId', + 'IUIAutomationStylesPattern', + 'UIA_IsRequiredForFormPropertyId', 'IUIAutomationElement4', + 'UIA_IsSelectionItemPatternAvailablePropertyId', + 'UIA_IsPeripheralPropertyId', + 'StructureChangeType_ChildrenInvalidated', + 'IUIAutomationCustomNavigationPattern', + 'ProviderOptions_HasNativeIAccessible', 'StyleId_Normal', + 'AutomationElementMode', 'UIA_SliderControlTypeId', + 'UIA_CustomControlTypeId', + 'UIA_ScrollHorizontalViewSizePropertyId', + 'ZoomUnit_LargeIncrement', 'UIA_NavigationLandmarkTypeId', + 'IUIAutomationElement6', + 'SynchronizedInputType_RightMouseUp', + 'OrientationType_Horizontal', + 'UIA_DropTarget_DroppedEventId', + 'WindowInteractionState_Running', 'TextUnit_Document', + 'UIA_DropTarget_DragLeaveEventId', 'StyleId_Heading7', + 'UIA_ToolTipControlTypeId', 'IUIAutomationValuePattern', + 'UIA_TabsAttributeId', 'UIA_GridItemColumnSpanPropertyId', + 'AutomationElementMode_Full', + 'AnnotationType_DataValidationError', 'ZoomUnit', + 'TextUnit_Format', 'UIA_LayoutInvalidatedEventId', + 'IUIAutomationSpreadsheetItemPattern', + 'UIA_FontSizeAttributeId', + 'SynchronizedInputType_LeftMouseDown', + 'ZoomUnit_SmallDecrement', + 'WindowInteractionState_ReadyForUserInteraction', + 'UIA_ObjectModelPatternId', 'DockPosition', + 'DockPosition_Top', + 'UIA_AnnotationAnnotationTypeNamePropertyId', + 'UIA_BoundingRectanglePropertyId', 'UIA_TextControlTypeId', + 'UIA_IsValuePatternAvailablePropertyId', + 'UIA_AnnotationDateTimePropertyId', + 'UIA_StylesFillPatternStylePropertyId', + 'UIA_ToolTipClosedEventId', 'UIA_SearchLandmarkTypeId', + 'StructureChangeType_ChildAdded', + 'WindowVisualState_Normal', + 'NavigateDirection_PreviousSibling', + 'UIA_AutomationPropertyChangedEventId', + 'UIA_SpreadsheetPatternId', 'UIA_IsReadOnlyAttributeId', + 'UIA_AcceleratorKeyPropertyId', + 'UIA_ProgressBarControlTypeId', 'StyleId_Emphasis', + 'UIA_IsStylesPatternAvailablePropertyId', + 'UIA_MarginLeadingAttributeId', + 'UIA_StrikethroughColorAttributeId', + 'UIA_InputReachedOtherElementEventId', + 'TextPatternRangeEndpoint', 'StyleId_Heading5', + 'AnnotationType_InsertionChange', + 'UIA_DropTargetPatternId', + 'UIA_AnnotationObjectsPropertyId', + 'IUIAutomationRangeValuePattern', + 'UIA_ValueIsReadOnlyPropertyId', 'TextUnit_Page', + 'UIA_BulletStyleAttributeId', + 'UIA_IsMultipleViewPatternAvailablePropertyId', + 'UIA_GridItemContainingGridPropertyId', + 'WindowInteractionState_BlockedByModalWindow', + 'UIA_LevelPropertyId', 'UIA_FontNameAttributeId', + 'IUIAutomationCacheRequest', 'ZoomUnit_NoAmount', + 'UIA_InvokePatternId', 'UIA_DragGrabbedItemsPropertyId', + 'IUIAutomationTableItemPattern', 'UIA_SummaryChangeId', + 'ZoomUnit_SmallIncrement', 'ExpandCollapseState', + 'UIA_AnnotationPatternId', + 'UIA_IsCustomNavigationPatternAvailablePropertyId', + 'UIA_SelectionItem_ElementAddedToSelectionEventId', + 'UIA_LabeledByPropertyId', 'UIA_AutomationIdPropertyId', + 'UIA_Transform2CanZoomPropertyId', + 'UIA_Transform2ZoomLevelPropertyId', + 'UIA_SeparatorControlTypeId', + 'UIA_LocalizedLandmarkTypePropertyId', + 'UIA_TableItemRowHeaderItemsPropertyId', + 'UIA_DocumentControlTypeId', + 'UIA_Drag_DragCompleteEventId', + 'UIA_WindowWindowVisualStatePropertyId', + 'UIA_RuntimeIdPropertyId', 'UIA_LiveSettingPropertyId', + 'UIA_IsTextEditPatternAvailablePropertyId', + 'UIA_WindowControlTypeId', 'UIA_CultureAttributeId', + 'UIA_IsSubscriptAttributeId', + 'IUIAutomationObjectModelPattern', 'IUIAutomation3', + 'UIA_TreeItemControlTypeId', 'UIA_StylesStyleIdPropertyId', + 'UIA_ListControlTypeId', 'AnnotationType_FormulaError', + 'IUIAutomationElement3', 'IUIAutomationTextRange', + 'IUIAutomationTransformPattern2', 'UIA_FormLandmarkTypeId', + 'UIA_TreeControlTypeId', + 'UIA_IsTableItemPatternAvailablePropertyId', + 'StructureChangeType_ChildrenBulkRemoved', + 'WindowVisualState_Maximized', + 'UIA_IsTextChildPatternAvailablePropertyId', + 'UIA_ToggleToggleStatePropertyId', + 'TextEditChangeType_CompositionFinalized', + 'UIA_LocalizedControlTypePropertyId', + 'AnnotationType_GrammarError', + 'UIA_TextFlowDirectionsAttributeId', + 'UIA_HyperlinkControlTypeId', 'IUIAutomationDragPattern', + 'UIA_OptimizeForVisualContentPropertyId', + 'UIA_Window_WindowClosedEventId', + 'UIA_ItemStatusPropertyId', + 'IUIAutomationChangesEventHandler', + 'RowOrColumnMajor_Indeterminate', + 'TextEditChangeType_None', + 'UIA_WindowCanMinimizePropertyId', + 'UIA_TableRowHeadersPropertyId', + 'UIA_IsOffscreenPropertyId', 'TreeScope_Ancestors', + 'UIA_IsDropTargetPatternAvailablePropertyId', + 'UIA_RangeValuePatternId', 'IUIAutomationTreeWalker', + 'DockPosition_None', 'UIA_TransformCanMovePropertyId', + 'UIA_TabItemControlTypeId', 'PropertyConditionFlags_None', + 'UIA_SelectionItemPatternId', 'UIA_MenuBarControlTypeId', + 'UIA_IsSpreadsheetItemPatternAvailablePropertyId', + 'UIA_Transform2ZoomMaximumPropertyId', + 'UIA_DataGridControlTypeId', + 'AnnotationType_EditingLockedChange', + 'UIA_OutlineStylesAttributeId', + 'UIA_MarginBottomAttributeId', 'IUIAutomation', + 'UIA_LegacyIAccessibleDescriptionPropertyId', + 'UIA_GridItemRowPropertyId', + 'UIA_MultipleViewSupportedViewsPropertyId', + 'UIA_CalendarControlTypeId', 'WindowVisualState', + 'UIA_LegacyIAccessiblePatternId', + 'WindowInteractionState_NotResponding', + 'IUIAutomationElement5', + 'UIA_LegacyIAccessibleRolePropertyId', + 'UIA_IsVirtualizedItemPatternAvailablePropertyId', + 'TextEditChangeType_AutoComplete', 'AnnotationType_Footer', + 'UIA_CulturePropertyId', + 'UIA_LegacyIAccessibleStatePropertyId', 'StyleId_Heading4', + 'UIA_TableItemColumnHeaderItemsPropertyId', + 'StyleId_Heading9', 'UIA_CapStyleAttributeId', + 'SupportedTextSelection_Multiple', + 'ProviderOptions_ProviderOwnsSetFocus', + 'UIA_TransformCanResizePropertyId', + 'UIA_ButtonControlTypeId', 'IUIAutomationBoolCondition', + 'OrientationType_None', + 'UIA_LegacyIAccessibleDefaultActionPropertyId', + 'ExtendedProperty', 'IUIAutomationAnnotationPattern', + 'UIA_ProcessIdPropertyId', + 'UIA_LegacyIAccessibleValuePropertyId', + 'IUIAutomationFocusChangedEventHandler', + 'UIA_CustomLandmarkTypeId', 'UIA_ValuePatternId', + 'ProviderOptions_ClientSideProvider', + 'AnnotationType_Unknown', 'UIA_OrientationPropertyId', + 'UIA_SpreadsheetItemAnnotationTypesPropertyId', + 'UIA_MenuModeStartEventId', 'UIA_MainLandmarkTypeId', + 'UIA_GridItemPatternId', 'UIA_RangeValueValuePropertyId', + 'SupportedTextSelection', 'UIA_Window_WindowOpenedEventId', + 'UIA_DropTargetDropTargetEffectsPropertyId', + 'UIA_MenuModeEndEventId', 'IUIAutomationTextPattern2', + 'UIA_IsKeyboardFocusablePropertyId', + 'UIA_IsContentElementPropertyId', + 'UIA_ToolBarControlTypeId', + 'UIA_StylesFillColorPropertyId', 'IUIAutomationCondition', + 'UIA_IsItalicAttributeId', 'UIA_NamePropertyId', + 'UIA_IsHiddenAttributeId', 'IAccessible', + 'UIA_TableItemPatternId', 'TreeScope_Element', + 'IUIAutomationSelectionItemPattern', + 'UIA_ClassNamePropertyId', 'SynchronizedInputType', + 'UIA_SelectionSelectionPropertyId', + 'UIA_Text_TextSelectionChangedEventId', + 'NavigateDirection_LastChild', + 'UIA_UnderlineColorAttributeId', 'TextUnit_Paragraph', + 'TextEditChangeType_Composition', + 'UIA_VirtualizedItemPatternId', + 'SupportedTextSelection_None', 'UIA_ToolTipOpenedEventId', + 'TreeScope', 'UIA_WindowIsModalPropertyId', + 'TextEditChangeType', + 'UIA_IsGridItemPatternAvailablePropertyId', + 'RowOrColumnMajor_ColumnMajor', + 'UIA_WindowCanMaximizePropertyId', 'LiveSetting', + 'SynchronizedInputType_KeyDown', + 'AutomationElementMode_None', 'TextUnit_Character', + 'UIA_PaneControlTypeId', 'UIA_SizeOfSetPropertyId', + 'ScrollAmount_LargeDecrement', + 'UIA_IsSynchronizedInputPatternAvailablePropertyId', + 'UIA_RangeValueMaximumPropertyId', 'Assertive', + 'UIA_SelectionPatternId', + 'UIA_IsWindowPatternAvailablePropertyId', + 'UIA_DockPatternId', 'IUIAutomationTextEditPattern', + 'UIA_IsObjectModelPatternAvailablePropertyId', + 'UIA_LinkAttributeId', 'UIA_ValueValuePropertyId', + 'UIA_EditControlTypeId', + 'UIA_LegacyIAccessibleHelpPropertyId', + 'UIA_TransformPatternId', 'UIA_ClickablePointPropertyId', + 'UIA_AnnotationAuthorPropertyId', + 'ProviderOptions_RefuseNonClientSupport', + 'UIA_AsyncContentLoadedEventId', + 'UIA_OverlineStyleAttributeId', + 'UIA_SelectionItemIsSelectedPropertyId', + 'AnnotationType_Author', + 'UIA_IsTextPatternAvailablePropertyId', + 'PropertyConditionFlags_IgnoreCase', + 'WindowVisualState_Minimized', + 'ProviderOptions_OverrideProvider', + 'UIA_SelectionItemSelectionContainerPropertyId', + 'UIA_WindowIsTopmostPropertyId', + 'UIA_MultipleViewPatternId', + 'UIA_ExpandCollapseExpandCollapseStatePropertyId', + 'UIA_IndentationFirstLineAttributeId', 'IUIAutomation2', + 'IUIAutomationDropTargetPattern', + 'UIA_SplitButtonControlTypeId', 'UIA_HeaderControlTypeId', + 'UIA_IsTransformPattern2AvailablePropertyId', + 'UIA_NativeWindowHandlePropertyId', + 'UIA_SemanticZoomControlTypeId', + 'UIA_StylesExtendedPropertiesPropertyId', + 'UIA_GridRowCountPropertyId', 'UIA_ScrollPatternId', + 'UIA_SpinnerControlTypeId', 'IUIAutomationElementArray', + 'UIA_LandmarkTypePropertyId', + 'UIA_IsSuperscriptAttributeId', + 'UIA_Text_TextChangedEventId', 'IUIAutomationOrCondition', + 'UIA_IsControlElementPropertyId', + 'IUIAutomationEventHandler', 'UIA_ImageControlTypeId', + 'UIA_TogglePatternId', 'DockPosition_Right', + 'IUIAutomationInvokePattern', + 'NavigateDirection_NextSibling', 'AnnotationType_Endnote', + 'UIA_MarginTrailingAttributeId', + 'IUIAutomationTextChildPattern', + 'UIA_IsScrollItemPatternAvailablePropertyId', + 'UIA_StylesPatternId', + 'UIA_IsDockPatternAvailablePropertyId', + 'UIA_ListItemControlTypeId', 'IUIAutomationTextRange2', + 'IUIAutomationGridItemPattern', 'ScrollAmount', + 'UIA_GroupControlTypeId', 'StyleId_Heading2', + 'UIA_ScrollHorizontalScrollPercentPropertyId', + 'UIA_IsGridPatternAvailablePropertyId', + 'UIA_TextPatternId', + 'StructureChangeType_ChildrenBulkAdded', + 'IUIAutomationAndCondition', + 'UIA_AnnotationTargetPropertyId', + 'UIA_StylesFillPatternColorPropertyId', + 'AnnotationType_ConflictingChange', + 'UIA_RangeValueSmallChangePropertyId', + 'IUIAutomationScrollItemPattern', + 'UIA_TransformCanRotatePropertyId', + 'UIA_SpreadsheetItemFormulaPropertyId', + 'IUIAutomationLegacyIAccessiblePattern', + 'StructureChangeType', 'IUIAutomationProxyFactory', + 'UIA_DropTarget_DragEnterEventId', + 'AnnotationType_ExternalChange', + 'UIA_IsInvokePatternAvailablePropertyId', + 'UIA_IsLegacyIAccessiblePatternAvailablePropertyId', + 'UIA_WindowPatternId', 'UIA_AppBarControlTypeId', + 'UIA_HasKeyboardFocusPropertyId', 'IUIAutomationElement2', + 'UIA_MarginTopAttributeId', 'RowOrColumnMajor_RowMajor', + 'UIA_ScrollItemPatternId', + 'UIA_IsScrollPatternAvailablePropertyId', + 'AnnotationType_CircularReferenceError', + 'StyleId_BulletedList', + 'UIA_SpreadsheetItemAnnotationObjectsPropertyId', + 'ScrollAmount_NoAmount', 'UIA_TransformPattern2Id', + 'NavigateDirection', 'UiaChangeInfo', + 'IUIAutomationSpreadsheetPattern', + 'UIA_AriaRolePropertyId', 'TextEditChangeType_AutoCorrect', + 'IUIAutomationScrollPattern', + 'UIA_TextEdit_TextChangedEventId', + 'UIA_SelectionCanSelectMultiplePropertyId', + 'UIA_SpreadsheetItemPatternId', + 'UIA_StructureChangedEventId', + 'UIA_SelectionItem_ElementRemovedFromSelectionEventId', + 'UIA_DataItemControlTypeId', + 'UIA_AnnotationTypesAttributeId', 'RowOrColumnMajor', + 'UIA_ProviderDescriptionPropertyId', + 'TextPatternRangeEndpoint_End', + 'IUIAutomationExpandCollapsePattern', + 'UIA_FlowsFromPropertyId', 'SupportedTextSelection_Single', + 'ProviderOptions_NonClientAreaProvider', + 'StyleId_Heading3', 'UIA_StyleIdAttributeId', + 'UIA_StylesShapePropertyId', 'TreeScope_Parent', + 'UIA_TextChildPatternId', + 'IUIAutomationStructureChangedEventHandler', + 'UIA_IsEnabledPropertyId', + 'UIA_IsTextPattern2AvailablePropertyId', + 'WindowInteractionState', 'UIA_ItemTypePropertyId', + 'UIA_AnnotationTypesPropertyId', + 'ScrollAmount_LargeIncrement', + 'UIA_BackgroundColorAttributeId', + 'UIA_MultipleViewCurrentViewPropertyId', + 'IUIAutomationTablePattern', + 'UIA_AnimationStyleAttributeId', + 'UIA_FontWeightAttributeId', 'UIA_ControlTypePropertyId', + 'UIA_IsDataValidForFormPropertyId', + 'IRawElementProviderSimple', + 'UIA_IsSpreadsheetPatternAvailablePropertyId', + 'IUIAutomationPropertyChangedEventHandler', + 'UIA_SystemAlertEventId', 'UIA_TextEditPatternId', + 'AnnotationType_AdvancedProofingIssue', + 'UIA_WindowWindowInteractionStatePropertyId', + 'UIA_DockDockPositionPropertyId', 'TreeScope_Children', + 'UIA_RadioButtonControlTypeId', + 'UIA_IsDragPatternAvailablePropertyId', + 'UIA_CheckBoxControlTypeId', 'ToggleState', + 'DockPosition_Bottom', 'UIA_AutomationFocusChangedEventId', + 'IUIAutomationTextRangeArray', 'UIA_TablePatternId', + 'UIA_Selection_InvalidatedEventId', + 'UIA_DropTargetDropTargetEffectPropertyId', + 'StructureChangeType_ChildrenReordered', + 'ProviderOptions_UseComThreading', + 'UIA_TextEdit_ConversionTargetChangedEventId', + 'UIA_IsAnnotationPatternAvailablePropertyId', + 'PropertyConditionFlags', + 'UIA_AnnotationAnnotationTypeIdPropertyId', + 'IUIAutomationNotCondition', 'UIA_InputDiscardedEventId', + 'UIA_Transform2ZoomMinimumPropertyId', + 'AnnotationType_DeletionChange', + 'UIA_AriaPropertiesPropertyId', + 'IUIAutomationProxyFactoryEntry', + 'UIA_Drag_DragCancelEventId', + 'AnnotationType_UnsyncedChange', + 'IUIAutomationWindowPattern', + 'UIA_LegacyIAccessibleKeyboardShortcutPropertyId', + 'UIA_IsTablePatternAvailablePropertyId', + 'UIA_HeaderItemControlTypeId', 'UIA_Invoke_InvokedEventId', + 'StyleId_Quote', + 'UIA_SelectionIsSelectionRequiredPropertyId', + 'UIA_InputReachedTargetEventId', + 'IUIAutomationProxyFactoryMapping', 'Polite', + 'UIA_GridColumnCountPropertyId', + 'SynchronizedInputType_KeyUp', 'UIA_HelpTextPropertyId', + 'ExpandCollapseState_PartiallyExpanded', + 'UIA_ExpandCollapsePatternId', + 'UIA_ForegroundColorAttributeId', 'UIA_TextPattern2Id', + 'UIA_ScrollHorizontallyScrollablePropertyId', + 'ProviderOptions_UseClientCoordinates', + 'UIA_SynchronizedInputPatternId', + 'UIA_ScrollBarControlTypeId', + 'UIA_CustomNavigationPatternId', 'UIA_MenuControlTypeId', + 'IUIAutomationVirtualizedItemPattern', + 'UIA_RangeValueMinimumPropertyId', + 'OrientationType_Vertical', + 'UIA_GridItemRowSpanPropertyId', + 'UIA_HorizontalTextAlignmentAttributeId', 'ToggleState_On', + 'UIA_RangeValueLargeChangePropertyId', 'IUIAutomation4', + 'UIA_ScrollVerticallyScrollablePropertyId', + 'ToggleState_Indeterminate', + 'StructureChangeType_ChildRemoved', + 'UIA_StatusBarControlTypeId', + 'UIA_FullDescriptionPropertyId', + 'ExpandCollapseState_Expanded', + 'IUIAutomationTextEditTextChangedEventHandler', + 'UIA_MenuOpenedEventId', 'UIA_ControllerForPropertyId', + 'UIA_StylesStyleNamePropertyId', + 'IUIAutomationItemContainerPattern', + 'AnnotationType_Footnote', + 'IUIAutomationMultipleViewPattern', + 'UIA_ScrollVerticalScrollPercentPropertyId', + 'UIA_IndentationLeadingAttributeId', + 'UIA_LiveRegionChangedEventId', + 'UIA_FrameworkIdPropertyId', 'UIA_Drag_DragStartEventId', + 'StyleId_NumberedList', 'UIA_AnnotationObjectsAttributeId', + 'TreeScope_Descendants', 'UIA_TabControlTypeId', + 'UIA_IsTogglePatternAvailablePropertyId', + 'ZoomUnit_LargeDecrement', 'UIA_OverlineColorAttributeId', + 'UIA_GridItemColumnPropertyId', + 'UIA_IndentationTrailingAttributeId', + 'UIA_LegacyIAccessibleSelectionPropertyId', + 'UIA_IsPasswordPropertyId', + 'UIA_DragDropEffectsPropertyId', 'UIA_DragPatternId', + 'IUIAutomationPropertyCondition', + 'UIA_LegacyIAccessibleChildIdPropertyId', + 'UIA_UnderlineStyleAttributeId', 'StyleId_Custom', + 'DockPosition_Left', 'UIA_MenuItemControlTypeId', + 'UIA_FlowsToPropertyId', + 'IUIAutomationSynchronizedInputPattern', 'ProviderOptions', + 'AnnotationType_Header', + 'SynchronizedInputType_RightMouseDown', + 'UIA_DragIsGrabbedPropertyId', + 'ExpandCollapseState_Collapsed', + 'ProviderOptions_ServerSideProvider', + 'SynchronizedInputType_LeftMouseUp', + 'IUIAutomationTextPattern', 'UIA_DragDropEffectPropertyId', + 'UIA_TitleBarControlTypeId', 'CUIAutomation8', + 'UIA_IsActiveAttributeId', 'UIA_CaretPositionAttributeId', + 'IUIAutomationTransformPattern', + 'UIA_IsExpandCollapsePatternAvailablePropertyId', + 'CUIAutomation', 'IUIAutomationDockPattern', + 'AnnotationType_MoveChange', 'AnnotationType_Highlighted', + 'WindowInteractionState_Closing', + 'IUIAutomationSelectionPattern', + 'ExpandCollapseState_LeafNode', 'StyleId_Title', + 'DockPosition_Fill', 'UIA_DescribedByPropertyId', + 'AnnotationType_TrackChanges', 'TreeScope_Subtree', + 'UIA_TableRowOrColumnMajorPropertyId', + 'UIA_LegacyIAccessibleNamePropertyId', + 'UIA_TableColumnHeadersPropertyId', + 'UIA_MenuClosedEventId', 'StyleId_Heading1', + 'ScrollAmount_SmallDecrement', 'ToggleState_Off', + 'NavigateDirection_FirstChild', + 'UIA_ScrollVerticalViewSizePropertyId', + 'UIA_ThumbControlTypeId', 'TextPatternRangeEndpoint_Start', + 'UIA_PositionInSetPropertyId', + 'AnnotationType_FormatChange', + 'UIA_StrikethroughStyleAttributeId', + 'UIA_SelectionItem_ElementSelectedEventId', 'Off', + 'UIA_StyleNameAttributeId', 'UIA_CaretBidiModeAttributeId', + 'UIA_HostedFragmentRootsInvalidatedEventId', + 'UIA_IsTransformPatternAvailablePropertyId', + 'UIA_RangeValueIsReadOnlyPropertyId', 'TextUnit_Word', + 'AnnotationType_SpellingError', + 'UIA_SelectionActiveEndAttributeId', + 'IUIAutomationElement', 'TextUnit', + 'NavigateDirection_Parent', 'ScrollAmount_SmallIncrement', + 'AnnotationType_Comment', 'UIA_AccessKeyPropertyId', + 'OrientationType', 'UIA_TableControlTypeId', + 'StyleId_Heading6', 'TextUnit_Line', 'StyleId_Subtitle', + 'UIA_ComboBoxControlTypeId'] +from comtypes import _check_version; _check_version('') diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/__init__.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/__init__.py new file mode 100644 index 00000000..40bf6c8d --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/__init__.py @@ -0,0 +1 @@ +# comtypes.gen package, directory for generated files. diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/stdole.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/stdole.py new file mode 100644 index 00000000..09d50d33 --- /dev/null +++ b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/gen/stdole.py @@ -0,0 +1,3 @@ +from comtypes.gen import _00020430_0000_0000_C000_000000000046_0_2_0 +globals().update(_00020430_0000_0000_C000_000000000046_0_2_0.__dict__) +__name__ = 'comtypes.gen.stdole' \ No newline at end of file