Commits

Ed Blake committed 5ca12f5

Fixed a couple typos, added MsgBox support to Script and a couple methods to Control.

  • Participants
  • Parent commits c333ba2

Comments (0)

Files changed (3)

+# Enable importing ahk from the repo directory
+from ahk import *
 try:
     _ahk = ctypes.cdll.AutoHotkey #load AutoHotKey dll
 except (WindowsError, OSError):
-    print "Warning: Can't load AutoHotKey.dll, all ahk functions will fail."
+    # Try loading the dll from the module directory
+    path = os.path.dirname(__file__)
+    dllpath = os.path.join(path, 'AutoHotKey.dll')
+    try:
+        _ahk = ctypes.cdll.LoadLibrary(os.path.abspath(dllpath))
+    except (WindowsError, OSError):
+        print "Warning: Can't load AutoHotKey.dll, all ahk functions will fail."
 
 __version__ = "0.1.0"
 
         cmd = "WinActivate"
         if bottom:
             cmd = "WinActivateBottom"
-        execute('{0} := {1}("{2}", "{3}", "{4}", "{5}")'.format(
-            self._tmpname, cmd, title, text, extitle, extext))
+        if ''.join((title, text, extitle, extext)):
+            cmd = '{0}, "{1}", "{2}", "{3}", "{4}"'.format(
+                cmd, title, text, extitle, extext)
+        #print cmd
+        execute(cmd)
 
     def winActive(self, title="", text="", extitle="", extext=""):
         """Convenience wrapper for ahk IfWinActive command.
             return False
         return True
 
+    def message(self, text="Alert", title="Alert", options=0, timeout=None):
+        """Convenience wrapper to the ahk msgbox function.
+
+        Displays a message box with buttons.
+        See `AHK docs <http://www.autohotkey.com/docs/commands/MsgBox.htm>`_
+        for more details.
+
+        :param text: The body text of the msgbox.
+        :type text: str (default='Alert')
+        :param title: The title text of the msgbox.
+        :type title: str (default='Alert')
+        :param options: Button flags bit-field.
+        :type options: int (default=0)
+        :param timeout: Optional timeout, dialog is closed after timeout.
+        :type timeout: int or None (default=None)
+        """
+        cmd = 'MsgBox {0}, {1}, {2}'.format(options, title, text)
+        if timeout:
+            cmd += ', {0}'.format(timeout)
+        execute(cmd)
+
+    def msgResult(self, name='OK'):
+        """Convenience wrapper to the ahk ifMsgBox function.
+
+        Get the clicked status of a button on the last MsgBox.
+        See `AHK docs <http://www.autohotkey.com/docs/commands/ifMsgBox.htm>`_
+        for more details.
+
+        :param name: The name of the button to check.
+        :type name: str (default='OK')
+        :returns: True if button was pressed, None if timeout, False otherwise.
+        """
+        set(self._tmpname, '0')
+        template = 'ifMsgBox, {0}\n\t{1} := 1\nifMsgBox, Timeout\n\t{1} := -1'
+        execute(template.format(name, self._tmpname))
+        result = int(get(self._tmpname))
+        if result == 1:
+            return True
+        elif result == -1:
+            return None
+        return False
+
     def __getattr__(self, name):
         """Override attribute lookup to add ahk variable access."""
         #NOTE __getattr__ is only called on attrs that aren't found normally
         See `AHK docs <http://www.autohotkey.com/docs/commands/ControlSend.htm>`_
         for more details.
 
-        :param control: The class, HWND, or text of the control to click.
+        :param control: The class, HWND, or text of the control to send to.
         :type control: str
         :param keys: Keystrokes in the same format as ahk.Script.send.
         :type keys: str
         cmd = cmd + ", {0}, {1}, {2}, {3}, {4}" 
         execute(cmd.format(control, keys, title, text, extitle, extext))
 
+    def setText(self, control="", value=""):
+        """Set the text content of a control.
+
+        See `AHK docs <http://www.autohotkey.com/docs/commands/ControlSetText.htm>`_
+        for more details.
+
+        :param control: The class, HWND, or text of the control to be changed.
+        :type control: str
+        :param value: New text to substitute into the control.
+        :type value: str
+        """
+        if self.hwnd:
+            title = "ahk_id {0}".format(self.hwnd)
+            text, extitle, extext = "", "", ""
+        else:
+            title, text, extitle, extext = self.params
+
+        execute("ControlSetText, {0}, {1}, {2}, {3}, {4}, {5}".format(
+            control, value, title, text, extitle, extext))
+
+    def choose(self, control="", value=""):
+        """Pick an item from a listbox or combobox.
+
+        See `AHK docs <http://www.autohotkey.com/docs/commands/Control.htm>`_
+        for more details.
+
+        :param control: The class, HWND, or text of the control to be changed.
+        :type control: str
+        :param value: Partial text of choice or choice index (starting from 1).
+        :type value: str or int (default="")
+        """
+        if self.hwnd:
+            title = "ahk_id {0}".format(self.hwnd)
+            text, extitle, extext = "", "", ""
+        else:
+            title, text, extitle, extext = self.params
+
+        cmd = "ChooseString"
+        if type(value) not in (str, unicode):
+            cmd = "Choose"
+        execute("Control, {0}, {1}, {2}, {3}, {4}, {5}, {6}".format(  
+            cmd, value, control, title, text, extitle, extext))
+
 # Wrapper functions ------------------------------------------------------------
 
 def start(filename=None, script="", options="", params=""):
+@ECHO OFF
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=sphinx-build
+)
+set BUILDDIR=_build
+set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
+set I18NSPHINXOPTS=%SPHINXOPTS% .
+if NOT "%PAPER%" == "" (
+	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
+	set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
+)
+
+if "%1" == "" goto help
+
+if "%1" == "help" (
+	:help
+	echo.Please use `make ^<target^>` where ^<target^> is one of
+	echo.  html       to make standalone HTML files
+	echo.  dirhtml    to make HTML files named index.html in directories
+	echo.  singlehtml to make a single large HTML file
+	echo.  pickle     to make pickle files
+	echo.  json       to make JSON files
+	echo.  htmlhelp   to make HTML files and a HTML help project
+	echo.  qthelp     to make HTML files and a qthelp project
+	echo.  devhelp    to make HTML files and a Devhelp project
+	echo.  epub       to make an epub
+	echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
+	echo.  text       to make text files
+	echo.  man        to make manual pages
+	echo.  texinfo    to make Texinfo files
+	echo.  gettext    to make PO message catalogs
+	echo.  changes    to make an overview over all changed/added/deprecated items
+	echo.  linkcheck  to check all external links for integrity
+	echo.  doctest    to run all doctests embedded in the documentation if enabled
+	goto end
+)
+
+if "%1" == "clean" (
+	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
+	del /q /s %BUILDDIR%\*
+	goto end
+)
+
+if "%1" == "html" (
+	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
+	goto end
+)
+
+if "%1" == "dirhtml" (
+	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
+	goto end
+)
+
+if "%1" == "singlehtml" (
+	%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
+	goto end
+)
+
+if "%1" == "pickle" (
+	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can process the pickle files.
+	goto end
+)
+
+if "%1" == "json" (
+	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can process the JSON files.
+	goto end
+)
+
+if "%1" == "htmlhelp" (
+	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can run HTML Help Workshop with the ^
+.hhp project file in %BUILDDIR%/htmlhelp.
+	goto end
+)
+
+if "%1" == "qthelp" (
+	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can run "qcollectiongenerator" with the ^
+.qhcp project file in %BUILDDIR%/qthelp, like this:
+	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\pyahk.qhcp
+	echo.To view the help file:
+	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\pyahk.ghc
+	goto end
+)
+
+if "%1" == "devhelp" (
+	%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished.
+	goto end
+)
+
+if "%1" == "epub" (
+	%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The epub file is in %BUILDDIR%/epub.
+	goto end
+)
+
+if "%1" == "latex" (
+	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
+	goto end
+)
+
+if "%1" == "text" (
+	%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The text files are in %BUILDDIR%/text.
+	goto end
+)
+
+if "%1" == "man" (
+	%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The manual pages are in %BUILDDIR%/man.
+	goto end
+)
+
+if "%1" == "texinfo" (
+	%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
+	goto end
+)
+
+if "%1" == "gettext" (
+	%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
+	goto end
+)
+
+if "%1" == "changes" (
+	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.The overview file is in %BUILDDIR%/changes.
+	goto end
+)
+
+if "%1" == "linkcheck" (
+	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Link check complete; look for any errors in the above output ^
+or in %BUILDDIR%/linkcheck/output.txt.
+	goto end
+)
+
+if "%1" == "doctest" (
+	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Testing of doctests in the sources finished, look at the ^
+results in %BUILDDIR%/doctest/output.txt.
+	goto end
+)
+
+:end