1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Kanashius

Beiträge von Kanashius

  • SQL DELETE Befehl funktioniert nicht

    • Kanashius
    • 17. Oktober 2018 um 12:27

    Ich glaube, in diesem Fall liegt der Fehler im Befehl.

    DELETE FROM [DATABASE].[dbo].[TABLE] WHERE IPnode = COMPUTERNAME123;

    SELECT * FROM [DATABASE].[dbo].[TABLE] WHERE IPnode = 'COMPUTERNAME123';

    Beim Select hast du mit den ' einen String genutzt. Das solltest du beim Löschen auch machen ;)

    Aber generell ja, beschränk dich auf eine UDF ;)

  • Windows 7 Lockscreen

    • Kanashius
    • 27. August 2018 um 13:36

    Ich hab mal gesucht und das folgende gefunden:

    1. https://www.techrepublic.com/blog/windows-a…s-logon-screen/

    Dies zeigt beim wechseln des Benutzers eine Nachricht an, leider funktioniert dies nicht beim Sperrbildschirm und es muss vorm Benutzerwechsel gesetzt sein...

    2. Die andere, bessere Möglichkeit wäre GINA. Das ist eine dll, die sich um das darstellen des Windowslogins kümmert. Dazu müsstest du allerdings eine .dll erstellen (z.B. in C/C++), diese muss die originale ersetzen. Teilweise können auch Hooks angelegt werden. Das ganze ist auf jedenfall recht kompliziert.

    Hier ein paar Links dazu:

    Hier sieht man ganz schön den Aufbau:

    https://www.paralint.com/projects/aucun/index.html

    Details:

    https://docs.microsoft.com/en-us/windows/…p/secauthn/gina

    https://docs.microsoft.com/en-us/windows/…mizing-winlogon

    https://msdn.microsoft.com/en-us/library/…3(v=vs.85).aspx

    Ich hab mir das jetzt auch nur grob angeschaut, das wäre auf jedenfall eine kompliziertere Aufgabe, ich glaub es gibt auch recht wenig dazu zu finden, also viel ausprobieren ;).

    Mfg Kanashius

  • Ladebalken mit Funktion laufen lassen

    • Kanashius
    • 22. August 2018 um 16:07

    Um eine vernünftige Fortschrittsanzeige zu erstellen musst du das kopieren in Teile zerlegen.

    Statt mit DirCopy zu kopieren also alle Dateien auflisten (_FileListToArrayRec) und einzeln kopieren. Den Fortschritt nach der Anzahl bisher kopierten Dateien berechnen (Round($akt,$max,2)*100).

    Wenn es noch genauer sein soll, kannst du noch die Dateigröße auslesen und mit einbeziehen.

    Mit DirCopy ist die Fortschrittsanzeige also nicht vernünftig möglich.

    MfG Kanashius

  • Script geht Nicht

    • Kanashius
    • 3. Juli 2018 um 11:56

    Ich nehme mal an, das Datum steht im ersten Eintrag... Deine Schleife muss bei 0 beginnen:

    AutoIt
    #include <File.au3>
    #include <Date.au3>
    #include <StringConstants.au3>
    #include <Array.au3>
    $sFile = "tmp.txt"
    $sDate = @MDAY & "." & @MON & "." & @YEAR
    $sDatei = FileRead($sFile)
    $arStrings = StringSplit($sDatei, ",", $STR_NOCOUNT)
    _ArrayDisplay($arStrings)
    For $i = 0 To UBound($arStrings)-1
        $equal = StringCompare($sDate, $arStrings[$i], 1)
        MsgBox(48,"",$sDate&" == "&$arStrings[$i]&" => "&$equal)
        if $equal == 0 then
            MsgBox(0, "found", "found")
        EndIf
    Next
    Alles anzeigen

    Als Tipp: bau dir die beiden Hilfsfunktionen ein um zu sehen, was in dem Array steht und was genau verglichen wird. Die MSGBOX kannst du dabei auch durch ein ConsoleWrite ersetzen, falls es viele Ausgaben sind, damit nicht jedesmal ok gedrückt werden muss. In diesem Fall macht das == auch keinen Sinn, denn == vergleicht zwei Strings miteinander, während = für Zahlen genutzt wird.

    MfG Kanashius

    EDIT: Ich seh grad, dass du schon einen anderen Thread aufgemacht hast. Da das Thema das gleiche ist, antworte doch nächstes Mal auch bitte in dem gleichen Thread. Es wird nicht für jede weiterführende Frage ein neuer Thread zum gleichen Thema aufgemacht. Außerdem Hilfeanfragen in dem Forum Hilfe und Unterstützung posten. Das Forum Scripte ist für FERTIGE Scripte gedacht, die man mit der Community teilen möchte.

  • Pixelsearch / alternative für Bilder

    • Kanashius
    • 24. Juni 2018 um 01:31

    Da mir die Dauer von über einer Stunde sehr grausam erscheint und ich grad lust hatte etwas zu programmieren, hab ich mal eine Programm geschrieben, was deutlich schneller ist.

    Ich hab das ganze in Java implementiert, einfach weil es schneller ist und ich Java im Moment viel öfter benutze.

    Die Dauer für ein 10MB jpg-file ist < 3 Sekunden.

    Das ganze läuft über die Kommandozeile (kann also mit runwait,... gestartet werden und benötigt keine Benutzereingaben).

    Ein Fenster implementiere ich vielleicht noch (momentan ist es noch leer)

    Die Ausgabe besteht aus einer Bit-Datei, die einfach für jeden Pixel 0 oder 1 in eine Textdatei schreibt, je nachdem ob dort ein Treffer war, oder nicht.

    Außerdem kann noch eine Datei mit allen Bereichen ausgegeben werden. In der steht dann in jeder Zeile ein Bereich und dort alle Pixelkoordinaten, die zu dem Bereich gehören.

    Bei der gesuchten Farbe können beliebige RGB-Werte angegeben werden (auch eine gewisse Range, also Rot von 0 bis 50,...). Außerdem kann auch der Alphawert berücksichtigt werden.

    Beim suchen des Bereiches kann definiert werden, ob die Moore- oder VonNeumann-Nachbarschaft verwendet werden soll.

    Zwei Beispiele zum ausführen mit der enthaltenen 7x5 Pixel testdatei:

    java -jar ImageAnalyser.jar -nogui -path test.png -scanColor 0,0,0 -scanArea true -outBits bits.txt -outArea area.txt -scanNeighborhood neumann

    java -jar ImageAnalyser.jar -nogui -path test.png -scanColor 0,60,0,60,0,60 -scanArea true -outBits bits.txt -outArea area.txt -scanNeighborhood neumann

    Die gesamte Hilfe:

    Spoiler anzeigen

    Manpage/Help of ImageAnalyser:

    -man

    -help

    Displays this manpage/helpfile

    -nogui silent mode (starts the programm without gui)

    -path <path>

    REQUIRED to start an analysis!

    Specifies the path of the image to open at startup

    -scanColor <r,g,b>|<a,r,g,b>|<rFrom,rTo,gFrom,gTo,bFrom,bTo>|<aFrom,aTo,rFrom,rTo,gFrom,gTo,bFrom,bTo>

    REQUIRED to start an analysis!

    Specifies the color to filter. This is are colorvalues between 0 and 255, seperated by a ","!

    Possible is the exact value Red,Green,Blue / Alpha,Red,Green,Blue or the Ranges.

    Examples:

    Scan white: -scancolor 255,255,255

    Scan white with half the opacity: -scancolor 127,255,255,255

    Scan black to darkgrey: -scancolor 0,50,0,50,0,50

    Scan black to darkgrey with opacity 127 to 255: -scancolor 127,255,0,50,0,50,0,50

    -scanNeighborhood <moore>|<neumann>

    Default: neumann

    Specifies the neighborhood to search if scanArea is true.

    Moore are all 8 neighbors, Neumann just 4 (top,left,bottom,right)

    -scanArea <true>|<false>

    Specifies if the search should scan an area or just single bits.

    -outBits <path>

    Specifies the path of the bitoutput.

    This file lists 0 if the Bit is in the given range, 1 otherwise.

    There will be one line of 0 or 1 for every Pixelline.

    -outArea <path>

    Specifies the path of the arealist output

    This file lists all areas. Each area is written in one line.

    An area contains all bits of the area separated by spaces. The coordinates are seperated with a ",".

    Du solltest aber nicht nach sehr großen verbundenen Bereichen suchen, dann tritt ein Stackoverflow-Error auf. Da muss ich die nächsten Tage (nach der Klausur am Dienstag vllt.) mal dran gehen, dass ich die Rekursion rausbekomme und stattdessen Schleifen o.ä. benutze.

    Der Sourcecode ist ebenfalls enthalten, falls sich jemand dafür interessiert ;)

    MfG Kanashius.

    Dateien

    ImageAnalyser.zip 20,04 kB – 744 Downloads
  • Firebird SQL - Problem Belegdatum

    • Kanashius
    • 20. Juni 2018 um 00:48

    Bei Group By nimmt er die Tabelle und gruppiert die Daten nach der angegebenen Spalte. Haben mehrere Zeilen in der gegebenen Spalte den gleichen Wert, wird in den anderen Spalten ein zufälliger von den Werten genommen (Oder der Max-Wert, Min-Wert oder Count, also die Anzahl des Auftretens, wenn das angegeben wird). Mit Having wird einfach nur eine Bedingung mitgegeben. Alle die diese nicht erfüllen werden rausgeworfen. Where funktioniert dabei immernoch. Where wird vor dem GroupBy ausgeführt, Having danach (kann also schon mit dem Ergebnis arbeiten).

    Firebird SQL scheint da aber besondere Regeln zu haben...

  • _IsPressed mit ß

    • Kanashius
    • 20. Juni 2018 um 00:28

    Das hängt vermutlich mit deiner Tastatur zusammen. Diese können selten mehr als 3-4 Tasten gleichzeitig erkennen und dabei kommt es manchmal auch auf die Tastenkombination an.

    Das ist dann also je nach Tastatur unterschiedlich.

    Ich würde auch mit Hooks arbeiten, da dann nicht permanent in einer Schleife die Funktion durchläuft sondern von Windows das Keyboard-event getriggered wird, sobald eine Taste gedrückt wird. -> CPU-Auslastung.

  • Firebird SQL - Problem Belegdatum

    • Kanashius
    • 19. Juni 2018 um 17:51

    Da verschachtelt nicht geht, wie wäre es damit?

    SELECT adressnr,max(date) as maxDate FROM belege b JOIN kunden k ON b.kundenID=k.kundenID GROUP BY adressnr HAVING date<='2011-10-10'

  • Firebird SQL - Problem Belegdatum

    • Kanashius
    • 19. Juni 2018 um 00:03

    Ich kenn jetzt Firebird-SQL nicht, aber generell würde ich es so probieren:

    SELECT * FROM (SELECT adressnr,max(date) as maxDate FROM belege GROUP BY adressnr) g WHERE g.maxDate<='2011-10-10'

    (Bei max muss eventuell erst zu einem zahlenwert gecastet werden, das hängt von der art der speicherung ab)

    MfG Kanashius

  • Mouserecorder Script starten per Autoit3

    • Kanashius
    • 6. Juni 2018 um 22:44

    Ich würde dir empfehlen dir die _IE-Funktionen anzuschauen, oder falls auf der Seite kein Javascript läuft, reicht sogar ein InetGet in verbindung mit BinaryToString.

    Das kann dann auch komplett im Hintergrund ablaufen => sicherer und für dich unsichtbar/unbemerkt.

    Was dein Ursprüngliches Problem angeht kann ich dir da so grad auch nicht weiterhelfen, da ich das Programm auch garnicht kenne und nicht weiß, wann es was macht.

    MfG Kanashius.

  • Alexaeinbindung?!

    • Kanashius
    • 28. Mai 2018 um 15:21

    Möglich sollte es sein, da die API meines wissens nach auf HTTP basiert.

    Ne vorhandene UDF ist mir aber nicht bekannt, müsstest du vermutlich selber schreiben :)

  • Variablen aus ini einlesen und vorhandene überschreiben

    • Kanashius
    • 20. Mai 2018 um 21:40

    Zu 1.: Der Unterstrich wird verwendet um zu signalisieren, dass das eine eigene Methode ist und sie nicht zu den Standard-AutoIt Funktionen gehört. In UDFs wirst du diese Schreibweise immer finden, diese fangen ja auch alle mit Unterstrich an.

    zu 2.: Ja, einfach am Zeilenende ein leerzeichen gefolgt von einem Unterstrich!, so:

    AutoIt
    _functionCall($param, _
    $param2, _
    $param3, _
    )

    MfG Kanashius.

  • Steuerung zurück zu GUI

    • Kanashius
    • 17. Mai 2018 um 15:36

    GuiSetState mit Focus, bzw. in diesem Fall eher den Fokus auf das Control legen, also GuiCtrlSetState auf die Radiobox mit der Variable für Fokus.

  • Firefox sauber schließen

    • Kanashius
    • 14. Mai 2018 um 13:26

    Und die eckigen Klammern bedeuten nur, dass der Parameter optional ist, also weggelassen werden kann. Du solltest beim Aufruf die Klammern weglassen oder den gesamten Block, wenn du dort nichts angeben willst ;)

  • Schaltungen mittels KV-Tabelle automatisch lösen (Benötige Hilfe)

    • Kanashius
    • 9. Mai 2018 um 23:44

    Ich denke, mit dem probieren aller Möglichkeiten hast du den falschen Ansatz gewählt.

    Meine erste Idee wäre, die Daten in ein Array zu schreiben. Dann ein zweites Array anzulegen in dem gespeichert wird, ob das Feld schon verwendet wurde. Wenn nicht arbeitest du das Feld ab (Funktionsaufruf). Beim abarbeiten gehst du die gesamte Von-Neumann-Nachbarschaft des Feldes durch und fügst alle (1er/dontcare) Felder zu einer Liste (und markierst sie als abgearbeitet). Am Ende analysiserst du die hinzugefügten Felder, indem du die Vielfachen von 2 ausprobierst. Das machst du sowohl in der Breite, als auch in der Höhe. Wenn du dabei immer die größten Felder nimmst kannst du sie verknüpfen.

    Wie genau die Umsetzung aussehen könnte müsste ich mir dann aber genauer überlegen :)

    Nebenbei: Ich hab grad diese Seite gefunden. Der Quellcode ist in JavaScript, also, falls du inspiration suchst: http://www.mathematik.uni-marburg.de/~thormae/lectu…de/karnaughmap/

    MfG Kanashius.

  • sftp durch winscp.com in autoit ersetzen

    • Kanashius
    • 7. Mai 2018 um 20:38

    Du hast das Leerzeichen zwischen winscp.com" und /privatkey vergessen.

    Bei solchen Problemen hilft es, den String in eine Variable zu speichern und diese ausgeben zu lassen (consolewrite).

  • Wie verknüpfe ich die LocalAppData-Variable mi einem Pfad unterhalb davon?

    • Kanashius
    • 2. Mai 2018 um 17:45

    Das Makro heißt zumindest bei mir: @LocalAppDataDir. also müsste deine Zeile so lauten:

    DirRemove(@LocalAppDataDir & "\TslGame\Saved\Crashes\.",1)

    Du solltest normal auch den Fehler error: undefined macro sehen...

  • Programm als Admin ausführen mit eingeschränkten Rechten

    • Kanashius
    • 2. Mai 2018 um 00:06

    Naja, wenn du das Programm als System-Dienst installierst und startest, bzw. einen Systemdienst erstellst, der dann das Programm startet, sollte es mit Administratorrechten laufen können.

  • Während Whileschleife keine Buttons mehr drückbar

    • Kanashius
    • 29. April 2018 um 13:34

    Ich hab dein Script aus dem ersten Post mal so überarbeitet, dass es deutlich ansehnlicher und übersichtlicher ist.

    Zu den Änderungen:

    1. Variablen passend benennen, damit man weiß, was sie bedeuten. Bei $label1 weiß keiner was sich dahinter verbirgt. Dabei auch gerne am Anfang der Variable den Typ nennen. So zum Beispiel i für eine Zahl, b für ein Bool,...

    2. Die Hauptschleife so übersichtlich halten wie möglich. Daher alles in Funktionen auslagern, sodass deine Hauptschleife schlank bleibt und du auf einen blick siehst, was beim Klick auf den Button passiert.

    3. Alles was redundant ist (sich wiederholt) ebenfalls in Funktionen auslagern. Da hab ich hier zum Beispiel das _setCompanyMoney definiert. Dadurch wird beim ändern des Geldes jedesmal auch das Label aktualisiert. Änderst du irgendwann mal das Label musst du es nicht überall im Code ändern, sondern nur an dieser einen Stelle.

    4. Das Fenster am Anfang vollständig erstellt und die Controls nur ein/ausblenden. Da du ein Spiel programmierst solltest du den Overhead des ständigen neuerstellens vermeiden, da das, wenn dein Spiel größer wird, ausbremsen kann!

    5. Ich hab das hier jetzt nicht umgesetzt, aber schau dir auf jedenfall Arrays an. Gerade beim erstellen von Fenstern sind diese eine sehr größe Hilfe. Auch sonst wirst du vermutlich irgendwann nichtmehr drumrumkommen

    Der Code:

    AutoIt
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ColorConstants.au3>
    #include <GUIConstantsEx.au3>
    $hMainGui = GUICreate("Firmenmanager Simulator", 615, 438, 192, 124)
    $iLabelCompanyMoney = GUICtrlCreateLabel("Aktueller Firmenkontostand " & "0.00" & " €", 72, 60, 188, 41)
    $iLabelCompanyPrice = GUICtrlCreateLabel("Eine Firma kostet 1000.00€", 72, 20, 188, 41)
    $iLabelCompanyNameInfo = GUICtrlCreateLabel(" Ihre Firma heißt nun ", 472, 20, 170, 20)
    $iLabelCompanyBoughtInfo = GUICtrlCreateLabel("Sie haben erfolgreich eine Frima gekauft gekauft!", 72, 140, 188, 41)
    $iLabelCompanyEmployee = GUICtrlCreateLabel("Aktuelle Mitarbeiter " & 0, 72, 140, 188, 41)
    $iLabelCompanyName = GUICtrlCreateLabel(" Firmenname ", 472, 20, 170, 20)
    $iButtonEarnMoney = GUICtrlCreateButton("Geld verdienen", 352, 60, 201, 33)
    $iButtonBuyCompany = GUICtrlCreateButton("Eine Firma kaufen", 352, 140, 201, 33)
    $iButtonEmployee = GUICtrlCreateButton("Mitarbeiter", 352, 180, 201, 33)
    $iEnd = GUICtrlCreateButton("Beenden", 352, 340, 201, 33)
    GUICtrlSetState($iLabelCompanyNameInfo,$GUI_HIDE)
    GUICtrlSetState($iLabelCompanyName,$GUI_HIDE)
    GUICtrlSetState($iLabelCompanyBoughtInfo,$GUI_HIDE)
    GUICtrlSetState($iLabelCompanyEmployee,$GUI_HIDE)
    GUICtrlSetState($iButtonEmployee,$GUI_HIDE)
    GUISetState(@SW_SHOW)
    
    
    Global $iCompanyMoney = 0,$iEmployeeCount = 0,$bCompanyEarnsMoney=false,$iTimerCompanyEarnsMoney
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $iButtonEarnMoney
                _setCompanyMoney($iCompanyMoney+550.91)
            Case $iButtonBuyCompany
                _buyCompany()
            Case $iButtonEmployee
                _buyEmployies()
            Case $iEnd
               Exit
        EndSwitch
        If $iTimerCompanyEarnsMoney and TimerDiff($iTimerCompanyEarnsMoney)>2000 Then
            _setCompanyMoney($iCompanyMoney+500)
            $iTimerCompanyEarnsMoney=TimerInit()
        EndIf
    WEnd4. 
    
    Func _setCompanyMoney($iMoney)
        $iCompanyMoney=$iMoney
        GUICtrlSetData($iLabelCompanyMoney,"Aktueller Firmenkontostand " & $iCompanyMoney & " €")
    EndFunc
    
    Func _setEmployeeCount($iCount)
        $iEmployeeCount=$iCount
        GUICtrlSetData($iLabelCompanyEmployee,"Aktuelle Mitarbeiter " & $iEmployeeCount)
    EndFunc
    
    Func _buyCompany()
        If $iCompanyMoney<1000 Then return -1 ;If there is not enough money, skip here
        _setCompanyMoney($iCompanyMoney-999.91)
        GUICtrlSetState($iLabelCompanyBoughtInfo,$GUI_SHOW)
        GUICtrlSetState($iLabelCompanyEmployee,$GUI_SHOW)
        GUICtrlSetState($iLabelCompanyNameInfo,$GUI_SHOW)
        GUICtrlSetState($iLabelCompanyName,$GUI_SHOW)
        GUICtrlSetState($iButtonEmployee,$GUI_SHOW)
        $Firmenname = InputBox ("Name der Firma", "Geben Sie den Namen ihrer Frima ein","")
        GUICtrlSetData($iLabelCompanyName," Firmenname " & $Firmenname)
    EndFunc
    
    Func _buyEmployies()
        If  $iCompanyMoney > 500 Then
            _setCompanyMoney($iCompanyMoney - 500)
            _setEmployeeCount($iEmployeeCount + 10)
        ElseIf $iCompanyMoney < 500 Then
            MsgBox (0, "Kein Kapital", "Sie besitzen nicht genügend Geld um sich einen Mitarbeiter zu kaufen")
        EndIf
        If NOT $iTimerCompanyEarnsMoney Then $iTimerCompanyEarnsMoney=TimerInit()
    EndFunc
    Alles anzeigen

    MfG Kanashius

  • Schnelle Frage übers Pattern

    • Kanashius
    • 19. April 2018 um 14:10

    Du kannst einen Zeilenumbruch matchen, z.b.:

    "Test:\r\n(d+)" um im folgenden 123 zu bekommen:

    Test:

    123

    Das Irgendetwas bei dir muss dann natürich bekannt sein. Dort geht z.B. "Test:\r\n[a-zA-Z0-9]{5}(d+)" um zu zeigen, dass dort 5 Zeichen/Zahlen stehen können.

    Genau kann mans dir natürlich nur sagen, wenn man Beispieldaten hat.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™