Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Commands as Functions


  • Please log in to reply
21 replies to this topic
Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Ich habe mal versucht so viele Autohotkey Befehle wie möglich zu Funktionen umzuwandeln.
Ich denke mal man kann die Lib ziemlich vielseitig nutzen, aber zum rumspielen ist sie allemal geeignet! wink.png

Änderung:

Befehl Gui mit in die Lib aufgenommen.

Hinweise:
Befehle mit voranstehendem "#" sind nicht enthalten.

Befehle mit einem "InputVar"-Parameter, benötigen nicht den Variablennamen, sondern die direkte Variable.

Befehle die einen Array zurückgeben besitzen ein Extra Item "Errorlevel".



ToDo:

  • Exceptions für Befehle mit einem Rückgabewert hinzufügen.

 

Die Lib besteht aus 3 Teilen:

  • Befehle ohne Rückgabewert (geben ihr Errorlevel zurück)
  • Befehle mit genau einem Rückgabewert (geben einen String zurück)
  • Befehle mit mehreren Rückgabewerten (geben einen Array zurück)

Befehle ohne Rückgabewert:

Spoiler


Befehle mit genau einem Rückgabewert:
Spoiler


Befehle mit mehreren Rückgabewerten:
Spoiler


Diese Liste diente als Grundlage um die meisten der Funktionen automatisch zu generieren, ich veröffentliche sie ebenfalls, weil sie vielleicht für Andere von Nutzen ist.
Die Liste enthält alle Autohotkey Befehle + deren Syntax.
Spoiler

Edited by QaMarath, 31 March 2013 - 10:00 PM.

Find the recent autohotkey version here: ahkscript.org


SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

Wieso sind die Funktionen global? Was bringt das?

 

Am meisten fehlt mir übrigens eine "richtige" Umsetzung von diesen if-Bedingungen:

if var between x and y
if var is type
if var in string
if var contains string 

 

Wäre schön, wenn du das umsetzen könntest...



IsNull
  • Moderators
  • 990 posts
  • Last active: May 15 2014 11:56 AM
  • Joined: 10 May 2007

Super Idee - sollte schon fast in der Standard Installation mitgeliefert werden. Es gibt das schon in einer Ur-Version von Poly: http://www.autohotke...-as-functions/ wink.png

 

Darauf basierend kannst du ja auch Befehle die Pseudo-Arrays zurückgeben noch wrappen, so dass echte Arrays zurückgegeben werden.  Am besten wäre, dabei kompatibel zu AHK v2 zu sein, damit könnte man diese Lib dann als Kompatibilitäts-Layer verwenden happy.png

 

Warum gibst du die output Variablen nicht zurück? So kann man deine Funktionen nicht wirklich ineinander schachteln. ErrorLevel (Fehlerbehandlung) kannst du mit Exceptions lösen. (Bei einem Fehler eine Exception werfen)



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Ohh... Ich wusste gar nicht, das es dass schon gibt. Eigentlich ist ja in Polys Version schon alles drin. Naja, vielleicht kann man das ja noch ein bisschen erweitern.

 

Wie gesagt ich hab das über ein 10 Zeilen Script aus einer Liste aller Commands generieren lassen und deshalb war es einfacher nicht zwischen Befehlen zu unterscheiden, welche einen Wert zurückgeben und Befehlen, welche nur eine Aktion ausführen (wie z.B. MouseClick). Ich werde mal demnächst schauen, ob es Befehle gibt die noch nicht in Polys Lib drinne sind, um das dann zu erweitern. Und dann auch gleich so, das OutputVar zurückgegeben wird, falls vorhanden.

 

@SAPlayer:

Die Funktionen sind global, damit ein Befehl der einen Wert über OutputVar ausgibt, diesen Wert in der globalen, also im gesamten Script gültigen, übergebenen Variable speichert und keine neue funktionseigene Variable erstellt.

 

Die Umsetzung der Special IF's hab ich extra rausgelassen, weil die alle durch ein normales If und eine zusätzliche Standardfunktion nachgebildet werden können.

z.B.

if var contains string

ist genau das gleiche wie:

If(InStr(var, "string"))

 

Und soweit ich weiß, sollen die Special IF's aus genau diesem Grund in AHKv2 entfernt werden. Lieg ich da richtig?


Find the recent autohotkey version here: ahkscript.org


SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

Gut, 2 Typen (contains und in) habe ich noch nie benötigt, da sie leicht mit InStr umschrieben werden können. between ist nicht mehr ganz so leicht (if(var <= min AND var >= max)), allerdings gibt es für type (is) keine andere Möglichkeit.
 
Und meines Wissens sollen in AHK v2 die Special-ifs wie IfInString, IfWinActive usw. entfernt werden.



lasso
  • Members
  • 111 posts
  • Last active: May 19 2013 04:19 PM
  • Joined: 02 Nov 2012
var:= 1234

if(var ~= "^[[:digit:]]+$")

  msgbox %  "var'" var "'  is digit"

...



SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

Aber so kann man auch nicht (oder nicht leicht) feststellen, ob es z.B. integer oder float ist oder auch time ist.



lasso
  • Members
  • 111 posts
  • Last active: May 19 2013 04:19 PM
  • Joined: 02 Nov 2012
integer := "^\s*[+-]?[[:digit:]]+\s*$"
float   := "^\s*[+-]?[[:digit:]]+\.[[:digit:]]+\s*$"
number  := "^[+-]?[[:digit:]]+\.?[[:digit:]]+$"
digit   := "^[[:digit:]]+$"
xdigit  := "^[[:xdigit:]]+$"
alpha   := "^[[:alpha:]]+$"
upper   := "^[[:upper:]]+$"
lower   := "^[[:lower:]]+$"
alnum   := "^[[:alnum:]]+$"
space   := "^[[:space:]]+$"

var:= "ABC"

if(var ~= integer)
  msgbox %  "var'" var "'  is integer"
if(var ~= float)
  msgbox %  "var'" var "'  is float"
if(var ~= upper)
  msgbox %  "var'" var "'  is upper"

wieso nicht das hier hat ca. 1min  gedauert

 

für time hatte ich jetzt kein bock mehr geht aber selbstverfreilich genauso



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Hier bittesehr:

IsBetween(var_name, min, max)
{
      global
      if %var_name% between %min% and %max%
            Return 1
      Return 0
}

IsType(var_name, type)
{
      global
      if %var_name% is %type%
            Return 1
      Return 0
}

Find the recent autohotkey version here: ahkscript.org


SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

Da brauchste aber wirklich kein global mehr^^



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Ich bin mir nicht ganz sicher, eigentlich hast du Recht, denn die Variable mit dem in %var_name% gespeichertem Name wurde ja außerhalb der Funktion "deklariert" (bzw. in Autohotkey einfach nur "befüllt").

Aber man weiß ja nie... Sicher ist Sicher! wink.png

 

Ok, jedenfalls hab ich das ganze überarbeitet und fast alles an Vorschlägen umgesetzt, sogar dein "if var is type" usw...

Siehe oben.


Find the recent autohotkey version here: ahkscript.org


ruespe
  • Members
  • 567 posts
  • Last active: Dec 01 2014 07:59 PM
  • Joined: 17 Jun 2008

1+



fredchf
  • Members
  • 111 posts
  • Last active: Oct 10 2015 02:08 PM
  • Joined: 02 Nov 2012

Hallo! Schöne Idee, allerdings sollten die 'InputVar" nicht von Prozentzeichen umschlossen werden. Es wird ja bereits eine Variable erwartet.wink.png

EDIT: Und SplitPath sollte 'out' zurückgeben...


Edited by fredchf, 27 March 2013 - 05:52 PM.


SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

Ja, da hast du bei SpiltPath einen Fehler gemacht.

Aber ich fände es auch schön, wenn bei Arrays (also out) auch ein out["ErrorLevel"] übergeben wird.

Also:

out["ErrorLevel"] := ErrorLevel


IsNull
  • Moderators
  • 990 posts
  • Last active: May 15 2014 11:56 AM
  • Joined: 10 May 2007

@SAPlayer: Warum eigentlich den ErrorLevel zurückgeben? Das ist ja sowieso eine globale Variable und kann von aussen abgefragt werden.

Ich wäre da ja eher ein Anhänger von Exceptions - ich würde das werfen dieser aber konfigurierbar machen.

 

 

 

global ThrowExceptionOnError := true

MyCommand(in){
  MyCommand, blub, blab, in
  if(ErrorLevel && ThrowExceptionOnError)
  {
     throw new ErrorException(ErrorLevel)
  }
  return { "param1" : blub, "param2" : blab } ;// out object
}