{ "info": { "author": "Spencer Young", "author_email": "spencer.young@spyoung.com", "bugtrack_url": null, "classifiers": [ "Environment :: Win32 (MS Windows)", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: Microsoft :: Windows", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Topic :: Desktop Environment" ], "description": "# ahk\n\nA Python wrapper around AHK.\n\n[![Build](https://ci.appveyor.com/api/projects/status/2c53x6gglw9nxgj1/branch/master?svg=true)](https://ci.appveyor.com/project/spyoungtech/ahk/branch/master) \n[![version](https://img.shields.io/pypi/v/ahk.svg?colorB=blue)](https://pypi.org/project/ahk/) \n[![pyversion](https://img.shields.io/pypi/pyversions/ahk.svg?)](https://pypi.org/project/ahk/) \n[![Coverage](https://coveralls.io/repos/github/spyoungtech/ahk/badge.svg?branch=master)](https://coveralls.io/github/spyoungtech/ahk?branch=master) \n\n\n# Installation\n\n```\npip install ahk\n```\nRequires Python 3.6+\n\nSee also [Non-Python dependencies](#deps) \n\n\n# Usage\n\n```python\nfrom ahk import AHK\n\nahk = AHK()\n\nahk.mouse_move(x=100, y=100, blocking=True) # Blocks until mouse finishes moving (the default)\nahk.mouse_move(x=150, y=150, speed=10, blocking=True) # Moves the mouse to x, y taking 'speed' seconds to move\nprint(ahk.mouse_position) # (150, 150)\n```\n\n![ahk](https://raw.githubusercontent.com/spyoungtech/ahk/master/docs/_static/ahk.gif)\n\n\n# Examples\n\nNon-exhaustive examples of some of the functions available with this package. Full documentation coming soon!\n\n\n## Mouse\n\n\n```python\nfrom ahk import AHK\n\nahk = AHK()\n\nahk.mouse_position # Returns a tuple of mouse coordinates (x, y)\nahk.mouse_move(100, 100, speed=10, relative=True) # Moves the mouse reletave to the current position\nahk.mouse_position = (100, 100) # Moves the mouse instantly to absolute screen position\nahk.click() # Click the primary mouse button\nahk.double_click() # Clicks the primary mouse button twice\nahk.click(200, 200) # Moves the mouse to a particular position and clicks\nahk.right_click() # Clicks the secondary mouse button\nahk.mouse_drag(100, 100, relative=True) # Holds down primary button and moves the mouse\n```\n\n## Keyboard\n\n```python\nfrom ahk import AHK\n\nahk = AHK()\n\nahk.type('hello, world!') # Send keys, as if typed (performs ahk string escapes)\nahk.send_input('Hello`, World{!}') # Like AHK SendInput, must escape strings yourself!\nahk.key_state('Control') # Return True or False based on whether Control key is pressed down\nahk.key_state('CapsLock', mode='T') # Check toggle state of a key (like for NumLock, CapsLock, etc)\nahk.key_press('a') # Press and release a key\nahk.key_down('Control') # Press down (but do not release) Control key\nahk.key_up('Control') # Release the key\nahk.key_wait('a', timeout=3) # Wait up to 3 seconds for the \"a\" key to be pressed. NOTE: This throws \n # a TimeoutError if the key isn't pressed within the timeout window\n```\n\n## Windows\n\nYou can do stuff with windows, too.\n\n\nGetting windows\n\n```python\nfrom ahk import AHK\nfrom ahk.window import Window\n\nahk = AHK()\n\nwin = ahk.active_window # Get the active window\nwin = ahk.win_get(title='Untitled - Notepad') # by title\nwin = list(ahk.windows()) # list of all windows\nwin = Window(ahk, ahk_id='0xabc123') # by ahk_id\nwin = Window.from_mouse_position(ahk) # the window under the mouse cursor\nwin = Window.from_pid('20366') # by process ID\n```\n\nWorking with windows\n```python\nfrom ahk import AHK\n\nahk = AHK()\n\nahk.run_script('Run Notepad') # Open notepad\nwin = ahk.find_window(title=b'Untitled - Notepad') # Find the opened window\nwin.send('hello') # Send keys directly to the window (does not need focus!)\nwin.move(x=200, y=300, width=500, height=800)\nwin.activate() # Give the window focus\nwin.disable() # Make the window non-interactable\nwin.enable() # Enable it again\nwin.to_top() # Move the window on top of other windows\nwin.to_bottom() # Move the window to the bottom of the other windows\nwin.always_on_top = True # Make the window always on top\nwin.close() # Close the window\n\nfor window in ahk.windows():\n print(window.title)\n\n # Some more attributes\n print(window.text)\n print(window.rect) # (x, y, width, height)\n print(window.id) # ahk_id\n print(window.pid)\n print(window.process)\n```\n\n## Screen\n\n```python\nfrom ahk import AHK\n\nahk = AHK()\n\nahk.image_search('C:\\\\path\\\\to\\\\image.jpg') # Find an image on screen\n\n# Find an image within a boundary on screen\nahk.image_search('C:\\\\path\\\\to\\\\image.jpg', upper_bound=(100, 100), # upper-left corner of search area\n lower_bound=(400, 400)) # lower-right corner of search area\nahk.pixel_get_color(100, 100) # Get color of pixel located at coords (100, 100)\nahk.pixel_search('0x9d6346') # Get coords of the first pixel with specified color\n```\n\n## Sound\n\n```python\nfrom ahk import AHK\n\nahk = AHK()\n\nahk.sound_play('C:\\\\path\\\\to\\\\sound.wav') # Play an audio file\nahk.sound_beep(frequency=440, duration=1000) # Play a beep for 1 second (duration in microseconds)\nahk.get_volume(device_number=1) # Get volume of a device\nahk.set_volume(50, device_number=1) # Set volume of a device\nahk.sound_get(device_number=1, component_type='MASTER', control_type='VOLUME') # Get sound device property\nahk.sound_set(50, device_number=1, component_type='MASTER', control_type='VOLUME') # Set sound device property\n```\n\n## non-blocking modes\n\nFor some functions, you can also opt for a non-blocking interface, so you can do other stuff while AHK scripts run.\n\n```python\nimport time\n\nfrom ahk import AHK\n\nahk = AHK()\n\nahk.mouse_position = (200, 200) # Moves the mouse instantly to the start position\nstart = time.time()\nahk.mouse_move(x=100, y=100, speed=30, blocking=False)\nwhile True: # report mouse position while it moves\n t = round(time.time() - start, 4)\n position = ahk.mouse_position\n print(t, position)\n if position == (100, 100):\n break\n```\n\nYou should see an output something like\n\n```\n0.032 (187, 187)\n0.094 (173, 173)\n0.137 (164, 164)\n...\n0.788 (100, 103)\n0.831 (100, 101)\n0.873 (100, 100)\n```\n\n\n## Run arbitrary AutoHotkey scripts\n\n```python\nfrom ahk import AHK\n\nahk = AHK()\n\nahk_script = 'Run Notepad'\nahk.run_script(ahk_script, blocking=False)\n```\n\n\n### Communicating data from ahk to Python\n\nIf you're writing your own ahk scripts to use with this library, you can use `FileAppend` with the `*` parameter to get data from your ahk script into Python.\n\nSuppose you have a script like so\n\n```autohotkey\n#Persistent\ndata := \"Hello Data!\"\nFileAppend, %data%, * ; send data var to stdout\nExitApp\n```\n\n```py\nresult = ahk.run_script(my_script)\nprint(result) # Hello Data!\n```\n\nIf your autohotkey returns something that can't be decoded, add the keyword argument `decode=False` in which case you'll get back a `CompletedProcess` object where stdout (and stderr) will be bytes and you can handle it however you choose.\n\n```py\nresult = ahk.run_script(my_script, decode=False)\nprint(result.stdout) # b'Hello Data!'\n```\n\n\n## Experimental features\n\nExperimental features are things that are minimally functional, (even more) likely to have breaking changes, even \nfor minor releases. \n\nGithub issues are provided for convenience to collect feedback on these features.\n\n\n### Hotkeys\n\n[GH-9]\n\nHotkeys now have a primitive implementation. You give it a hotkey (a string the same as in an ahk script, without the `::`) \nand the body of an AHK script to execute as a response to the hotkey.\n\n\n\n```python\nfrom ahk import AHK, Hotkey\n\nahk = AHK()\n\nkey_combo = '#n' # Define an AutoHotkey key combonation\nscript = 'Run Notepad' # Define an ahk script\nhotkey = Hotkey(ahk, key_combo, script) # Create Hotkey\nhotkey.start() # Start listening for hotkey\n```\nAt this point, the hotkey is active. \nIf you press ![Windows Key][winlogo] + n, the script `Run Notepad` will execute.\n\nThere is no need to add `return` to the provided script, as it is provided by the template.\n\nTo stop the hotkey call the `stop()` method.\n\n```python\nhotkey.stop()\n```\n\nSee also the [relevant AHK documentation](https://www.autohotkey.com/docs/Hotkeys.htm)\n\n### ActionChain\n\n[GH-25]\n\n`ActionChain`s let you define a set of actions to be performed in order at a later time.\n\nThey work just like the `AHK` class, except the actions are deferred until the `perform` method is called.\n\nAn additional method `sleep` is provided to allow for waiting between actions.\n\n```python\nfrom ahk import ActionChain\n\nac = ActionChain()\n\n# An Action Chain doesn't perform the actions until perform() is called on the chain\n\nac.mouse_move(100, 100, speed=10) # nothing yet\nac.sleep(1) # still nothing happening\nac.mouse_move(500, 500, speed=10) # not yet\nac.perform() # *now* each of the actions run in order\n```\n\nJust like anywhere else, scripts running simultaneously may conflict with one another, so using blocking interfaces is \ngenerally recommended. Currently, there is limited support for interacting with windows in actionchains, you may want to use `win_set`)\n\n\n### find_window/find_windows methods\n\n[GH-26]\n\nRight now, these are implemented by iterating over all window handles and filtering with Python. \nThey may be optimized in the future.\n\n`AHK.find_windows` returns a generator filtering results based on attributes provided as keyword arguments. \n`AHK.find_window` is similar, but returns the first matching window instead of all matching windows.\n\nThere are couple convenience functions, but not sure if these will stay around or maybe we'll add more, depending on feedback.\n\n* find_windows_by_title\n* find_window_by_title\n* find_windows_by_text\n* find_window_by_text\n\n## Errors and Debugging\n\nYou can enable debug logging, which will output script text before execution, and some other potentially useful \ndebugging information.\n\n```python\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\n```\n(See the [logging module documentation](https://docs.python.org/3/library/logging.html) for more information)\n\nAlso note that, for now, errors with running AHK scripts will often pass silently. In the future, better error handling \nwill be added.\n\n\n\n## Non-Python dependencies\n\nTo use this package, you need the [AutoHotkey executable](https://www.autohotkey.com/download/). \n\nIt's expected to be on PATH by default. You can also use the `AHK_PATH` environment variable to specify the executable location.\n\nAlternatively, you may provide the path in code\n\n```python\nfrom ahk import AHK\n\nahk = AHK(executable_path='C:\\\\path\\\\to\\\\AutoHotkey.exe')\n```\n\n\n# Contributing\n\nAll contributions are welcomed and appreciated.\n\nPlease feel free to open a GitHub issue or PR for feedback, ideas, feature requests or questions.\n\nThere's still some work to be done in the way of implementation. The ideal interfaces are still yet to be determined and \n*your* help would be invaluable.\n\n\nThe vision is to provide access to the most useful features of the AutoHotkey API in a Pythonic way.\n\n\n[winlogo]: http://i.stack.imgur.com/Rfuw7.png\n[GH-9]: https://github.com/spyoungtech/ahk/issues/9\n[GH-25]: https://github.com/spyoungtech/ahk/issues/25\n[GH-26]: https://github.com/spyoungtech/ahk/issues/26\n\n# Similar projects\n\nThese are some similar projects that are commonly used for automation with Python.\n\n* [Pyautogui](https://pyautogui.readthedocs.io) - Al Sweigart's creation for cross-platform automation\n* [Pywinauto](https://pywinauto.readthedocs.io) - Automation on Windows platforms with Python.\n* [keyboard](https://github.com/boppreh/keyboard) - Pure Python cross-platform keyboard hooks/control and hotkeys!\n* [mouse](https://github.com/boppreh/mouse) - From the creators of `keyboard`, Pure Python *mouse* control!\n* [pynput](https://github.com/moses-palmer/pynput) - Keyboard and mouse control\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/spyoungtech/ahk", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "ahk", "package_url": "https://pypi.org/project/ahk/", "platform": "", "project_url": "https://pypi.org/project/ahk/", "project_urls": { "Homepage": "https://github.com/spyoungtech/ahk" }, "release_url": "https://pypi.org/project/ahk/0.6.2/", "requires_dist": [ "jinja2" ], "requires_python": "", "summary": "A Python wrapper for AHK", "version": "0.6.2" }, "last_serial": 5679355, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "9f1d8585fc9cdaae857183bdf634d48d", "sha256": "2a7a3c0baae01e34b4a120f2b200fd1efc577601a4eb675c0a9087ca9ae8262a" }, "downloads": -1, "filename": "ahk-0.0.1.tar.gz", "has_sig": false, "md5_digest": "9f1d8585fc9cdaae857183bdf634d48d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1958, "upload_time": "2018-11-22T06:29:19", "url": "https://files.pythonhosted.org/packages/33/98/671f91e66a67744b773c05a21e500c8417339d6987ad4af20b5b8a79d920/ahk-0.0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "56f41dee260884d5b05c2d3342f3a695", "sha256": "0fd61c2aec0c72060ddc2473315b4c96cd4d82c39141c598c92b35dc60a765d5" }, "downloads": -1, "filename": "ahk-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "56f41dee260884d5b05c2d3342f3a695", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6514, "upload_time": "2018-11-27T09:40:36", "url": "https://files.pythonhosted.org/packages/3d/a7/a5b0028e8fe6b85fa4209183783d25a59757bfe10f828ca77cc5da70b8e8/ahk-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bdf100f892c7c3afe5f50c59ac86f122", "sha256": "5bba3d3cbb5b943fff110d4f7c76d5ab8aef75d466ed5f0f08821f36a500933b" }, "downloads": -1, "filename": "ahk-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bdf100f892c7c3afe5f50c59ac86f122", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5221, "upload_time": "2018-11-27T09:40:38", "url": "https://files.pythonhosted.org/packages/b4/b0/35601db18a3ec0c028af7e1a8900708302bab661fdb05d93a1ece42492d3/ahk-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "a7fdd40c7703ad42a5cd43cad30410d4", "sha256": "3ea557c26f0d69b537bf969d7a1029dd2827cbaf92617ef2fc18591c04b25914" }, "downloads": -1, "filename": "ahk-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a7fdd40c7703ad42a5cd43cad30410d4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6715, "upload_time": "2018-12-12T08:28:08", "url": "https://files.pythonhosted.org/packages/28/77/56194166fff7fe6a50b21dac856c67f37cd6d74760df1f6bd36ef2e9fbbc/ahk-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c716a2186dece0e3cd11e11456154a9", "sha256": "432d4278bb3a20be96ddca5e879fae57404a51233d88fe4dacfb8f6488a5e4a7" }, "downloads": -1, "filename": "ahk-0.2.0.tar.gz", "has_sig": false, "md5_digest": "7c716a2186dece0e3cd11e11456154a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5766, "upload_time": "2018-12-12T08:28:10", "url": "https://files.pythonhosted.org/packages/92/32/e5e2d0988b23f749caea939bccc99489830b6e36744aad560205c7c22442/ahk-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "c12bc17519007438c63a06e85844f545", "sha256": "e8a9ccd20809f8f0c24a1d83ae6ae70b8a0546c0ee1982b7b9b22d24889467b6" }, "downloads": -1, "filename": "ahk-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c12bc17519007438c63a06e85844f545", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6549, "upload_time": "2018-12-13T03:45:17", "url": "https://files.pythonhosted.org/packages/69/18/f1aea47a5ef1b4830c9da3b0fb025386538b444345790cf082c1494a211f/ahk-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3660c0df4f7873f992bb6df62a5d0302", "sha256": "9d6a15046e0449b3935a75ec50df26eb65b1519430f3318ab5b326f5bb9d5662" }, "downloads": -1, "filename": "ahk-0.2.1.tar.gz", "has_sig": false, "md5_digest": "3660c0df4f7873f992bb6df62a5d0302", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5500, "upload_time": "2018-12-13T03:45:19", "url": "https://files.pythonhosted.org/packages/e6/83/3286baa1f9861cc1fd3448d8a45b0fdf2ed70a36791d02aee601c2031286/ahk-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "c7bfb0be1267d1b3c22a94d8e2c69c2b", "sha256": "67e8aff152f1ff5c7155fa9465919364821e9a20014bf09823a7e390bdb0f5ba" }, "downloads": -1, "filename": "ahk-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c7bfb0be1267d1b3c22a94d8e2c69c2b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7598, "upload_time": "2018-12-13T07:20:20", "url": "https://files.pythonhosted.org/packages/fb/22/e6f4813aee913453866efffd4f6954e017373706ad0159169ddd1c322bd9/ahk-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ab5d63bd0f5492dfdaa1b34a8b2539e", "sha256": "57dde1a46ef9a72d42b49e3f4e461ee2a9d48d53c726b8c0ced3ba87522e407b" }, "downloads": -1, "filename": "ahk-0.2.2.tar.gz", "has_sig": false, "md5_digest": "8ab5d63bd0f5492dfdaa1b34a8b2539e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6138, "upload_time": "2018-12-13T07:20:21", "url": "https://files.pythonhosted.org/packages/73/a5/da50ce28f9f52a427161f25c765db43e46012924adec7a8f4e74f7b098dc/ahk-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "de3f415836ede6f04eedfe14bbef327c", "sha256": "8eb974f81db95662cd17625f61f5cf2541d03c9a8b297867c9c9dff51052278e" }, "downloads": -1, "filename": "ahk-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "de3f415836ede6f04eedfe14bbef327c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10595, "upload_time": "2018-12-13T13:03:02", "url": "https://files.pythonhosted.org/packages/57/da/abc92b8acd5d70f76f3756e993d5fa1e56f6b45ee6ed5e92450080a7bbfe/ahk-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5432b8bab84aa097d86992a89922b890", "sha256": "a641ab72a3f3424c35171e3b384a15c517c29214dbe15d38b3745ca505162f62" }, "downloads": -1, "filename": "ahk-0.3.0.tar.gz", "has_sig": false, "md5_digest": "5432b8bab84aa097d86992a89922b890", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8248, "upload_time": "2018-12-13T13:03:04", "url": "https://files.pythonhosted.org/packages/36/80/5b08a1f74388e247e5b488267efd6238269a4a3b567462d5879173ba8a93/ahk-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "a88cafbd37573339489fd1bca50b1fa9", "sha256": "961a42a06ea720fc928e644a74b1bf39c085f82d5f3c709e522a7361ed93f5f4" }, "downloads": -1, "filename": "ahk-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a88cafbd37573339489fd1bca50b1fa9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12131, "upload_time": "2018-12-16T02:09:25", "url": "https://files.pythonhosted.org/packages/35/45/75f8b7917c0da153b2c354befcad61877221fdde1566d097a25538086f35/ahk-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f800b22716ec8917056a3b4ab76f79d5", "sha256": "f835fafc8c8041b01b15573947106a22be24e4b0c81e91de47f5b37c016ae5ce" }, "downloads": -1, "filename": "ahk-0.3.1.tar.gz", "has_sig": false, "md5_digest": "f800b22716ec8917056a3b4ab76f79d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9639, "upload_time": "2018-12-16T02:09:27", "url": "https://files.pythonhosted.org/packages/a2/0a/82d78a23ae27d1be35bb9f644373050e193611ad226c8f6104ac4a59745a/ahk-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "8186738aa4500ee6b6a69318f81593c4", "sha256": "9009e70559bcbfadb5caec06eb9aca20fbd5c054cde31ddbd3e9e4bf8b1a6102" }, "downloads": -1, "filename": "ahk-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8186738aa4500ee6b6a69318f81593c4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16041, "upload_time": "2018-12-18T08:58:57", "url": "https://files.pythonhosted.org/packages/f8/54/ab0f3868e5eb830a1d16012f78752c4a341e52f16c443ea4499932437871/ahk-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cdaacbc1a5838204bd3bf941fd0f310a", "sha256": "50e26d960bf6899fa0ef6feb675bc6141fd0abd15128cfe704268c1b645bbe5e" }, "downloads": -1, "filename": "ahk-0.4.0.tar.gz", "has_sig": false, "md5_digest": "cdaacbc1a5838204bd3bf941fd0f310a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12139, "upload_time": "2018-12-18T08:58:58", "url": "https://files.pythonhosted.org/packages/41/37/b478f5860f6cd624b85146e1d525f5cc9f2f8a61d19c9c4cc1de4faf3db4/ahk-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "c826cfa902cab6470d7eb89c5286ff79", "sha256": "3b798f9be42751b0e2ceae74b2f3c999bce14860d94791b33f072d4fef987233" }, "downloads": -1, "filename": "ahk-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c826cfa902cab6470d7eb89c5286ff79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16036, "upload_time": "2018-12-19T06:22:53", "url": "https://files.pythonhosted.org/packages/df/08/5a66e3f3393880d4be88c607a3e4d0435dfe76b2c54c443eef2343cc20bc/ahk-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9da332e6d4a746a1ce6d6f89277c69c0", "sha256": "0780fb2e9547af9e6a346d0f76c77317eaa5ae80db83f3ad92d5a7773d83b5a6" }, "downloads": -1, "filename": "ahk-0.4.1.tar.gz", "has_sig": false, "md5_digest": "9da332e6d4a746a1ce6d6f89277c69c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12135, "upload_time": "2018-12-19T06:22:54", "url": "https://files.pythonhosted.org/packages/e5/dd/6e04a6164a87b31c8cf851bdefe591a2dd5d2485abb850e3d739191cb56c/ahk-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "1693b5ed3e4b1cce7462028124887e61", "sha256": "9021ca1d0b6ac72bc6a96f8938f24cab22eca876a8ba44017ceb89b1079d4de1" }, "downloads": -1, "filename": "ahk-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1693b5ed3e4b1cce7462028124887e61", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18251, "upload_time": "2018-12-19T06:27:40", "url": "https://files.pythonhosted.org/packages/7e/b5/8431624ac633b6ea45b6fca1d900320245be67d8cb0b74e4c84d93492630/ahk-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e19c70e03c35a4ee372329125480bdbe", "sha256": "08e036d5fa140c7ec612f1d142281375e129c7ec9161b9008859cb6e0316b4a8" }, "downloads": -1, "filename": "ahk-0.4.2.tar.gz", "has_sig": false, "md5_digest": "e19c70e03c35a4ee372329125480bdbe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15017, "upload_time": "2018-12-19T06:27:41", "url": "https://files.pythonhosted.org/packages/cb/d3/9c66da447952f287aabca209bcc1d367804a4694aed47aba02572f2ecd88/ahk-0.4.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "bd5350a4e3d0cc5098969a8126b9affe", "sha256": "0901c34f7808dea3210bddd684c63f2c9cdf9155d73172dc500a226e81ca9c8f" }, "downloads": -1, "filename": "ahk-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bd5350a4e3d0cc5098969a8126b9affe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21682, "upload_time": "2019-01-19T06:12:54", "url": "https://files.pythonhosted.org/packages/62/71/d68a008efeca2131a1a6e20f186fac57a32ad4a3cd592cfe93378c59c32f/ahk-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d9801f769cbcddb8ab48fb69a5700eaa", "sha256": "cc1315eb2aa88854b332092686bcccc6cc9432c2174d587d3afd34c9bad05722" }, "downloads": -1, "filename": "ahk-0.5.0.tar.gz", "has_sig": false, "md5_digest": "d9801f769cbcddb8ab48fb69a5700eaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17988, "upload_time": "2019-01-19T06:12:55", "url": "https://files.pythonhosted.org/packages/a5/47/ce7580ce254cfe2c0a61e096e4bb559bd8456c00dabb200dc1ffbfa43f67/ahk-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "b83a6fd76b53011a3f56fd33def9ca9a", "sha256": "aefea5a48a07159345eb0251eeb304dc0d2d392df28900392ee2ab74b0331bc5" }, "downloads": -1, "filename": "ahk-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b83a6fd76b53011a3f56fd33def9ca9a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28979, "upload_time": "2019-03-06T04:49:37", "url": "https://files.pythonhosted.org/packages/76/ba/45411fde29d5481f9b9a75bcf4f69908fd0d2283e88f884d1d69ab25a04e/ahk-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d9b4fb7a0c9df5440c4d4bf55fc178c", "sha256": "fdde06d890f2287b8d25b3d93357507d5d16830eb1feb18f1020bb365717b9ea" }, "downloads": -1, "filename": "ahk-0.6.0.tar.gz", "has_sig": false, "md5_digest": "3d9b4fb7a0c9df5440c4d4bf55fc178c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23199, "upload_time": "2019-03-06T04:49:39", "url": "https://files.pythonhosted.org/packages/20/b8/86dd83633df6879d480a0a3e0a174b6d6c141d61681103ae06607958fb76/ahk-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "bbe1c44bb6de17e0e2685c2bc6d78c2b", "sha256": "d0913f38b240a1bd92476fbf562ba01f3292bcd06ab0235a107e955f65bfc0df" }, "downloads": -1, "filename": "ahk-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "bbe1c44bb6de17e0e2685c2bc6d78c2b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31826, "upload_time": "2019-03-30T19:00:54", "url": "https://files.pythonhosted.org/packages/d4/79/8acbe269384fc7a8ea135c2886211addd50f3e7d749f68bb3e16b413af43/ahk-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c1dd534082d19963cc424d0a90e3bc51", "sha256": "9caff89f240c10dd1d7a4f67171f28aadb68eff478f40c1187cc488840112f19" }, "downloads": -1, "filename": "ahk-0.6.1.tar.gz", "has_sig": false, "md5_digest": "c1dd534082d19963cc424d0a90e3bc51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24760, "upload_time": "2019-03-30T19:00:56", "url": "https://files.pythonhosted.org/packages/72/0d/8c99713ff8786526f03d0da1a499a04987240bb9490ddf3d8bd1c6b34bf9/ahk-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "489eefd2594fe41cb0ed212a56c60e21", "sha256": "fd6a3a20c75daebb59039a78107bfa26e3032d9ff88d31fac608d3691d94de18" }, "downloads": -1, "filename": "ahk-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "489eefd2594fe41cb0ed212a56c60e21", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33112, "upload_time": "2019-08-14T21:26:29", "url": "https://files.pythonhosted.org/packages/93/e6/99f0e26eedb27ce158b0197818e0fb2810cb631371eb5bec86d624ed2610/ahk-0.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2cd991172e26e89e121341422eadd601", "sha256": "b20f95fad6c93be4348af70f460065ec1babeadd5a83d7771ff3b9eab88cfa9d" }, "downloads": -1, "filename": "ahk-0.6.2.tar.gz", "has_sig": false, "md5_digest": "2cd991172e26e89e121341422eadd601", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26298, "upload_time": "2019-08-14T21:26:31", "url": "https://files.pythonhosted.org/packages/57/7a/aa5b5bd34dc5d3ef3c671db45e95c068412ed6666c45431475ac3ff7deab/ahk-0.6.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "489eefd2594fe41cb0ed212a56c60e21", "sha256": "fd6a3a20c75daebb59039a78107bfa26e3032d9ff88d31fac608d3691d94de18" }, "downloads": -1, "filename": "ahk-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "489eefd2594fe41cb0ed212a56c60e21", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33112, "upload_time": "2019-08-14T21:26:29", "url": "https://files.pythonhosted.org/packages/93/e6/99f0e26eedb27ce158b0197818e0fb2810cb631371eb5bec86d624ed2610/ahk-0.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2cd991172e26e89e121341422eadd601", "sha256": "b20f95fad6c93be4348af70f460065ec1babeadd5a83d7771ff3b9eab88cfa9d" }, "downloads": -1, "filename": "ahk-0.6.2.tar.gz", "has_sig": false, "md5_digest": "2cd991172e26e89e121341422eadd601", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26298, "upload_time": "2019-08-14T21:26:31", "url": "https://files.pythonhosted.org/packages/57/7a/aa5b5bd34dc5d3ef3c671db45e95c068412ed6666c45431475ac3ff7deab/ahk-0.6.2.tar.gz" } ] }