warum einige Webseitenimpressume (impressi? keine ahnung)
Der Plural lautet Impressen -> https://de.wiktionary.org/wiki/Impressum
Klingt irgendwie nach Geburtshilfe
warum einige Webseitenimpressume (impressi? keine ahnung)
Der Plural lautet Impressen -> https://de.wiktionary.org/wiki/Impressum
Klingt irgendwie nach Geburtshilfe
Ich brauchte eine Funktion, die bei der Eingabe über InputBox entscheidet, ob der User eine Zahl (0-99) oder einen Text eingegeben hat.
Da haben wir mal wieder ein XY-Problem. Ein Input-Ctrl im Style ES_NUMBER nimmt dir diese Überprüfung ab und lässt nur Zahlenwerte zu.
Apropos XY-Problem !
HansJ54 : Verwendest Du InputBox oder GUICtrlCreateInput ?
Den Style $ES_NUMBER gibt es bei InputBox nicht - daher auch die Anmerkung von BugFix : "... Input-Ctrl im Style ES_NUMBER ...').
Allerdings wird mit dem Style $ES_NUMBER auch nur geprüft, ob eingegebene Zeichen innerhalb von [0..9] liegen, d.h. eine Eingabe von z.B. 0001 ist zulässig.
In beiden Fällen wäre also eine weitere Prüfung auf den Bereich (0-99) erforderlich.
Gruß Musashi
HansJ54 :
Du kannst Dir auch den folgenden Thread anschauen : funktion-number-von-bugfix
Dort hat BugFix eine erweiterte Version (Spoiler 0.4 im Startpost) erstellt.
Hier zur Sicherheit noch mal der Quelltext :
;-- TIME_STAMP 2018-12-17 22:47:43 v 0.4
; #FUNCTION# ====================================================================================================================
; Name ..........: _Number
; Description ...: Works like "Number()", but avoids to convert a string to number 0!
; Syntax ........: _Number($_Expression, $_Flag)
; Parameters ....: $_Expression - An expression to convert into a number.
; ...............: $_iErrReturn - The numeric return value in error case. Default: 0xDEADBEEF
; ...............: You get also the default value by passing "Default" or empty string instaed.
; ...............: $_Flag - Can be one of the following:
; ...............: $NUMBER_AUTO (0) = (default) the result is auto-sized integer.
; ...............: $NUMBER_32BIT (1) = the result is 32bit integer.
; ...............: $NUMBER_64BIT (2) = the result is 64bit integer.
; ...............: $NUMBER_DOUBLE (3) = the result is double.
; Return values .: Success The converted number, if $_Expression is a number or starts with a (un/signed) number.
; ...............: Failure The Value from "$_iErrReturn", sets @error = 1 $_Expression is a string or starts with a string.
; Author ........: BugFix
; Remarks .......: In contrast to Number(), you get only a number, if $_Expression is a number or starts with it.
; ...............: Because 0 is also a number, Number() give unclear results:
; ...............: Number("foo") returns 0. Number("0") returns also 0. "0" converts to the real number 0, but "foo" also??
; ===============================================================================================================================
Func _Number($_Expression, $_iErrReturn=0xDEADBEEF, $_Flag=0)
If $_iErrReturn = Default Or $_iErrReturn = '' Then $_iErrReturn = 0xDEADBEEF
If StringRegExp($_Expression, '^([-+]\d|\d)') Then
Return Number($_Expression, $_Flag)
ElseIf StringRegExp($_Expression, '^[-+]\s\d') Then
$_Expression = StringRegExpReplace($_Expression, '^([-+])\s(\d)(.*)', '\1\2\3')
Return Number($_Expression, $_Flag)
Else
Return SetError(1, 0, $_iErrReturn)
EndIf
EndFunc ;==>_Number
Alles anzeigen
Gruß Musashi
Wenn KONSTANTEN nicht in den entsprechenden Bibliotheken stecken(gelassen werden), sondern AutoIt diese Versionsweise lustig wechselt, dann weiß ich auch nicht mehr weiter....
[...]
Und frage mich auch nicht, was eure GDIPlus.au3 von meiner unterscheidet. Die "alten" Funktionen und Konstanten da drin sind seit 18 Jahren existent...
Was die Änderung bzw. Verlagerung von Konstanten in andere UDF's angeht, hast Du recht.
Kann es im vorliegenden Fall (_WinAPI_BitBlt ... Konstante : $SRCCOPY) aber ggf. sein, dass $SRCCOPY schon lange in der <WindowsConstants.au3> enthalten ist, und nicht in der <GDIPlus.au3> ?
Hier zwei Beiträge aus dem Jahr 2013 von Dir und name22 , die das zumindest nahelegen.
Da mir die alten Versionen von AutoIt fehlen kann ich aber natürlich nicht prüfen, was wo included wurde. Ich gehe mal davon aus, dass Du kein Skript posten würdest, bei dem eine UDF fehlt .
(im Changelog habe ich auch nichts gefunden, diese Auflistung ist aber nicht selten unvollständig)
Gruß Musashi
Andy : Allerdings funktioniert dein letztes Script bei mir nicht, weil einige Variablen nicht deklariert wurden:
Bei mir wird nur ein Error bzgl. $SRCCOPY angezeigt.
Sobald man #include <WindowsConstants.au3> einbindet, oder Global Const $SRCCOPY = 0x00CC0020 direkt setzt, dann läuft es.
EDIT : (nach Hinweis von Andy )
Das Auskoppeln der Konstante $SRCCOPY aus der bestehenden UDF wurde hier nur als Möglichkeit angegeben, ist aber nicht zu empfehlen !
Allerdings darf man keine Direktive wie #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 setzen, dann gibt es in der Tat diverse Deklarationsmeldungen.
Gruß Musashi
Eine Googlesuche bzgl. Nim liefert i.d.R. ja recht überschaubare Ergebnisse .
Diesen Thread hast Du sicher bereits selbst gefunden, oder ?
Ich beobachte schon seit längeren dass ihr teilweise Anfänger einfach rausgrault. Klar, viele Fälle sind gegen die Forenrichtlinien - das ist soweit auch ok. Aber auch einige false positives. Das weiß ich daher, weil ich diese Anfänger meist dann noch abgreife und ihnen privat Hilfe anbiete. Es stellt sich eher heraus dass diese einfach nicht wissen dass statt dem ImageSearch vielleicht doch ein ControlClick besser wäre (oder gar existiert)
>90% der geschlossenen Threads im (sprachlich bedingt) höher frequentierten englischen Forum stammen von 'Neumitgliedern', die Pixelsearch/ImageSearch zum Erstellen von (Spiele-)Bots verwenden woll(t)en. Danach hat man nie wieder von denen gehört - so groß kann der Wunsch nach dem Erlernen einer neuen Sprache also nicht gewesen sein.
Ich halte daher auch, wie BugFix bereits schrieb, ein "gewisses Maß an Misstrauen" für angebracht.
Auf die wahrscheinliche Existenz geeigneterer Lösungen hat alpines hingewiesen :
ZitatOftmals sägen die User am falschen Ast was die Art von Scripten angeht die sie schreiben wollen.
Was ist denn das eigentliche Problem das du lösen möchtest? Vielleicht gibts ja eine bessere Lösung als die Benutzung von Pixelfunktionen.
und ich habe ein kleines Beispiel zu Thema Timer beigesteuert.
Hier wird also niemand 'einfach rausgegrault'.
Lasse Dich durch die Debatte nicht irritieren und stelle weiterhin Deine Fragen. Falls sich herausstellt, dass es in 'die falsche Richtung' geht, bekommst Du einen entsprechenden Hinweis .
Gruß Musashi
Ich versuche einen Timer in mein Script einzubauen, der anzeigt wie lange es läuft.
Bevor die Fragen von alpines bzgl- Spieleautomation etc. nicht geklärt sind, hier ein vereinfachtes Beispiel :
#include <Date.au3>
#include <Timers.au3>
Opt('MustDeclareVars', 1)
Global $hTimer, $fTimerDiff, $sString
Global $iTimerHours = 0, $iTimerMins = 0, $iTimerSecs = 0, $iTimerMilliSecs = 0
$hTimer = TimerInit() ; starte Timer
; Irgendetwas tun (hier testweise durch Sleep simuliert) ...
Sleep(1550)
; Timer auswerten :
$fTimerDiff = TimerDiff($hTimer)
$iTimerMilliSecs = Int(Mod($fTimerDiff, 1000))
_TicksToTime(Int($fTimerDiff), $iTimerHours, $iTimerMins, $iTimerSecs)
$sString = StringFormat("%02d:%02d:%02d.%03d (Std:Min:Sek.Millisek)", $iTimerHours, $iTimerMins, $iTimerSecs, $iTimerMilliSecs)
ToolTip($sString,0 , 0)
MsgBox(BitOR(4096, 64),"Test", "Laufzeit = " & $sString & @CRLF)
Alles anzeigen
HALLO alpines danke für die schnelle antwort, ich hätte jetzt nicht damit gerechnet das um diese uhrzeit noch jemand schreibt.
Er 'wohnt' quasi im AutoIt-Forumsserver .
Gruß Musashi
Hab ich was falsch gemacht, oder warum meldet ihr euch nicht mehr?
Du hast nichts "falsch" gemacht. Dies ist aber ein Forum, in dem die Leute 'ehrenamtlich' helfen, keine kostenpflichtige 24/7 Hotline . Viele dürften sich das verlängerte Wochenende mit anderen Dingen beschäftigen (wollen), z.B. Familie, Grillen, Bier trinken usw.
Gruß Musashi
Wieso nicht direkt mit StringRegExp?
Simple Antwort : Ich wollte mich nicht von dem Code 'entfernen', den Windi bereits kennt. Darum habe ich diesen 'Zwischenschritt' explizit angegeben.
Wie Bitnugger bereits erklärt hat sorgt $STR_ENTIRESPLIT dafür, dass @CRLF wie ein Zeichen behandelt wird. Lässt du das $STR_ENTIRESPLIT weg, wird bei @CR und bei @LF gesplittet. Da Du, wie er sicher richtig vermutet, in der Variable $strXML gemischte Zeilenumbrüche hast, kannst Du diese wie folgt einheitlich mit @CRLF ersetzen :
...
$strXML = StringRegExpReplace($strXML, "(?m)(\R)+", @CRLF)
$aSource = StringSplit($strXML, @CRLF, $STR_ENTIRESPLIT) ; wandelt quellcode String in Array
...
Gruß Musashi
Nicht meine erste Wahl, aber es folgt Deiner Skriptlogik :
EDIT : Bitnugger war Sekunden schneller und hat es so gelöst, wie auch ich es für sinnvoller halte.
#include <array.au3>
#include <String.au3>
#include <StringConstants.au3>
#include <INet.au3>
Global $strXML = "<countryCode>DE</countryCode>" & @CRLF & _
"<country>Deutschland</country>" & @CRLF & _
"<countryCodeISO3>DEU</countryCodeISO3>" & @CRLF & _
"<freeformAddress>Musterstraße 4, 01234 Muster</freeformAddress>" & @CRLF & _
"<localName>Musterhausen</localName>" & @CRLF & _
"</address>" & @CRLF & _
"<position>" & @CRLF & _
"<lat>49.90707</lat>" & @CRLF & _
"<lon>7.81838</lon>" & @CRLF & _
"</position>" & @CRLF & _
"<viewport>"
Global $aLat[0], $aLon[0], $iStartpos, $iEndpos, $aSource, $aCurUrl1, $aCurUrl1
$aSource = StringSplit($strXML, @CRLF, $STR_ENTIRESPLIT) ; wandelt quellcode String in Array
_ArrayDisplay($aSource) ; kompletter Quellcode
Local $iStartpos = _ArraySearch($aSource, "<position>", 0, 0, 0, 1) ; hier gehts los
Local $iEndpos = _ArraySearch($aSource, '<viewport>', 0, 0, 0, 1) - 1 ; 1 Feld vor dem Treffer ist das letzte das uns interessiert
ConsoleWrite($iStartpos & " bis " & $iEndpos & @CRLF)
For $i = $iStartpos To $iEndpos
$aCurUrl1 = _StringBetween($aSource[$i], '<lat>', "</lat") ; für jedes Array Feld des Bereiches der uns interessiert nehmen wir den Teil des Strings de wir suchen
If Not @error Then ; wenn die Suche fehlerhaft war machen wir mit dem nächsten Feld weiter
ConsoleWrite("> >>>" & $i & " : ArrayAdd LAT : " & $aCurUrl1[0] & @CRLF)
_ArrayAdd($aLat, $aCurUrl1[0]) ; suche war erfolgreich also speichern wir den Teilstring in unser Ergebnis Array
EndIf
$aCurUrl2 = _StringBetween($aSource[$i], '<lon>', "</lon")
If Not @error Then ; wenn die Suche fehlerhaft war machen wir mit dem nächsten Feld weiter
ConsoleWrite("> >>>" & $i & " : ArrayAdd LON : " & $aCurUrl2[0] & @CRLF)
_ArrayAdd($aLon, $aCurUrl2[0]) ; suche war erfolgreich also speichern wir den Teilstring in unser Ergebnis Array
EndIf
Next
_ArrayDisplay($aLat, "LAT")
_ArrayDisplay($aLon, "LON")
Alles anzeigen
$curUrl= _StringBetween($temp[$i] ,'<lat>',"</lat") ; für jedes Array Feld des Bereiches der uns interessiert nehmen wir den Teil des Strings de wir suchen
$curUrl= _StringBetween($temp[$i] ,'<lon>',"</lon")
Du speicherst beide Ergebnisse immer noch in derselben Variable !
Könntest Du bitte mal eine XML-Datei posten, die mehrere Blöcke mit <lat>49.90707</lat> und <lon>7.81838</lon> enthält (sensible Daten ersetzen).
Gruß Musashi
Mein Script:
Hallo Windi ,
Tipp : Verwende zum posten (d)eines Skriptes das Code-Icon </> aus dem Beitragsheader :
Das Skript ist so auch nicht vollständig, da z.B. #include <Array.au3> fehlt.
Gruß Musashi
[...] es ist eh egal, was ich bei Run angebe, es wird ignoriert.
Ja, selbst eine Show.exe, die nur aus MsgBox(0, "Test", "3 Sekungen warten", 3) besteht, ignoriert z.B. Run(..., @SW_HIDE).
Sieht so aus, als ob die Flags für DOS-Fenster gelten, das von Run angezeigt wird.
Ob das nur für "DOS-Fenster" gilt, bin ich mir nicht ganz sicher.
Beispiel :
Die angehängte ZIP in ein Testverzeichnis kopieren und entpacken.
Zusätzlich eine Datei dort 'reinkopieren, die ca. 100 MB groß ist (damit man auch etwas sieht).
Sowohl die 7zG.exe = standalone 7Zip-Modul mit GUI als auch die 7za.exe = standalone 7Zip-Modul ohne GUI reagieren auf die @SW_*-Flags. Einfach etwas herumspielen.
Liegt möglicherweise aber an der Programmierung der 7zG.exe .
Gruß Musashi
Interessant. In der Hilfe steht aber nix von @SW_SHOWMINIMIZED. Sollten wir die Hilfe aktualisieren?
In der Hilfe zu Run (show_flag) steht auch nichts über @SW_SHOWMAXIMIZED, wohl aber im Hilfebeispiel
Example()
Func Example()
; Startet den Editor mit einem maximierten Fenster.
Local $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
, als auch in der Makroreferenz :
@SW_SHOWMAXIMIZED Aktiviert das Fenster und zeigt es maximiert an.
@SW_SHOWMINIMIZED Aktiviert das Fenster und zeigt es minimiert an.
EDIT water : Das mit dem Beispiel hast Du ja gerade selbst geschrieben .
In der Referenz gibt es zudem noch weitere @SW_* Makros, die in der Hilfe nicht erwähnt werden.
Tweaky : Das wäre wahrscheinlich ein Punkt, den man in der Hilfe aktualisieren könnte
Gruß Musashi
Bei StringReplace($sText, "//", Chr(5)) wird Chr(5) als Fehler gemeldet. Im Beispiel oben wird $sChr5 = Chr(5) erst einer Variablen zugewiesen. Wo ist das Problem Chr(5) direkt in StringReplace zu nutzen?
Ich sehe da kein Problem :
Global $sString = "Z1 E1//Z1 E2//Z1 E3"
ConsoleWrite($sString & @CRLF)
ConsoleWrite("! >>> // mit Chr(5) ersetzen : " & @CRLF)
ConsoleWrite(StringReplace($sString, "//", Chr(5)) & @CRLF)
EDIT HansJ54 :
Es ist für Einsteiger häufig leichter nachvollziehbar (und auch keine Schande ), wenn man Funktionsketten wie :
StringReplace(StringRegExpReplace(StringStripWS(StringReplace($sString, '""', $sChr5), 3), '^"(.+)"$', '\1'), $sChr5, '"') in Einzelschritte auflöst.
Gruß Musashi
OK, Entschuldigung hab gedacht alles neue kommt ins Testforum, gelobe Besserung und bedenke das hohe Alter. Muss ich das jetzt verschieben oder neu machen.
Es gibt nicht den geringsten Grund sich zu entschuldigen, Du hast ja nichts Verbotenes gemacht .
Ich wollte Dich mit meinem Beitrag #2 nur freundlich darauf hinweisen, dass das Testforum nicht unbedingt der geeigneteste Bereich für Deine Fragen ist.
Verschieben (oder neu machen) musst Du auch nichts. Das hat BugFix bereits getan, wie Du an folgender Kennzeichnung sehen kannst :
Gruß Musashi
Hallo Windi !
Warum verwendest Du immer das Testforum ?
Es handelt sich bei Deiner Frage doch um eine ganz normale Bitte um Hilfe. Poste daher zukünftig besser in das Forum (den Bereich) Hilfe & Unterstützung. So bleibt der Thread langfristig erhalten und die Antworten sind auch für Gäste sichtbar .
Bei Fragen, die nichts mit AutoIt direkt zu tun haben, wähle das Forum Off-Topic oder Talk.
BugFix oder Oscar : Könnte einer von Euch diesen Thread bitte noch mal verschieben ?
Gruß Musashi
Hallo BigNutter,
Du meinst sicher Bitnugger (man sollte schon, als ein Gebot der Höflichkeit, auf die richtige Anrede achten, insbesondere wenn man sich die Mühe macht, so ausführlich zu antworten ).
Gruß Musashi