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. DOheim

Beiträge von DOheim

  • Doppelklick auf einen GUICtrlCreateLabel

    • DOheim
    • 22. Januar 2014 um 18:25

    Ich möchte, dass das Programm erst auf einen Doppelklick auf das Label "Ja" reagiert.
    Führe ich den Doppelklick langsam aus klappt das auch. Bei einem normal-schnellen Doppelklick funktioniert es nicht.
    Das wird an der Bemerkung in der Hilfe von GUIGetMsg liegen:

    Bemerkungen
    Diese Funktion gibt die CPU automatisch wieder frei, wenn es erforderlich ist, so dass sie ruhig in Dauerschleifen benutzt werden kann, ohne die CPU vollständig auszulasten.

    Hat jemand einen Rat, wie ich hier Abhilfe schaffen könnte?
    Vielen Dank schon mal im Voraus.

    [autoit]

    #include <GUIConstantsEx.au3>
    $winhandle=GUICreate("DESKTOP2",300,100,200,400)
    $ja=GUICtrlCreateLabel("Ja", 20, 20, 30,15 )
    GUISetState()
    $n=0
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $ja Then
    $n+=1
    If $n=2 Then MsgBox(0,"Titel", "Text")
    EndIf
    WEnd
    GUIDelete ( $winhandle )

    [/autoit]
  • Warum Funktioniert _GUICtrlListView_GetItemText nicht?

    • DOheim
    • 18. Januar 2014 um 13:04

    Vielen Dank Alina, Andy und water für Eure Antworten.
    Ich bin ja gespannt, ob Andy etwas herausfindet.
    Es ist ja erstaunlich, dass es bei Alina funktioniert.
    Übrigens bringt
    Protokoll("c: " &$hwnd&" "&$anz)
    tatsächlich die richtige Anzahl an Symbolen auf meinem Desktop.
    Und das Beispiel aus der Hilfe funktioniert auch bei mir.
    Mein AuoIt hat Version 3.3.6.1.
    Siehe:

    Wahrscheinlich müsste ich wieder einmal updaten. Ich hatte vor Kurzem eine neue Version installiert. Aber da kam ein Scite-Editor mit, der mir gar nicht gefallen hatte. Da habe ich zunächst einmal die Windows Wiederherstellung bemüht.

  • Warum Funktioniert _GUICtrlListView_GetItemText nicht?

    • DOheim
    • 17. Januar 2014 um 17:32

    Unter
    Link
    hat "owi dowi spinn" am 11.10.09 einen Spoiler eingestellt. Bei mir (Win 7, 64 Bit) funktioniert das Programm nicht:

    [autoit]

    #Include <Array.au3>
    #include <GuiListView.au3>
    ShowBalloonTip("Papierkorb")
    Sleep(4000)
    Protokoll("Ende")
    Func ShowBalloonTip($LinkName)
    Local $x=-33,$y=-33 ,$wert[200]
    $x=WinActive("Program Manager")
    If Not $x Then $y=WinActivate("Program Manager")
    Protokoll("a: " &$x&" "&$y)
    $hwnd = ControlGetHandle("Program Manager", "", "SysListView321")
    Protokoll("b: " &$hwnd)
    $hwnd = HWnd($hwnd)
    $anz=_GUICtrlListView_GetItemCount($hwnd)
    Protokoll("c: " &$hwnd&" "&$anz)
    WinMinimizeAll()
    Protokoll("d: ")
    For $i = 0 To _GUICtrlListView_GetItemCount($hwnd) - 1
    $wert[$i]=_GUICtrlListView_GetItemText($hwnd, $i)
    Protokoll("e:" &$wert[$i]&":")
    If _GUICtrlListView_GetItemText($hwnd, $i)=$LinkName Then
    $pos = _GUICtrlListView_GetItemPosition($hwnd, $i)
    If IsArray($pos) Then
    ToolTip("Das ist die Verknüpfung",$pos[0] + 24, $pos[1] + 27,"Hier",1,5)
    ExitLoop
    EndIf
    EndIf
    Next
    _ArrayDisplay($wert)
    EndFunc
    Func Protokoll($text)
    If 2=MsgBox(1,"Titel",$text) Then Exit
    EndFunc

    [/autoit]

    Als Werte $wert[$i] liefert _GUICtrlListView_GetItemText nur "Leer".
    Weiß jemand Rat?

  • Mit StringFromASCIIArray ANSI-Zeichensatz erzeugen ?

    • DOheim
    • 3. Dezember 2013 um 10:39

    Du kannst einen ja bezüglich Assembler richtig auf den Geschmack bringen. Wenn mir meine Frau zukünftig genügend Zeit lässt (sie hat es gar nicht gern, wenn ich so viel am PC hocke), muss ich mich wirklich damit beschäftigen.

    Übrigens hatte der erste Rechner, den wir 1964 bekommen haben, den riesigen Hauptspeichen von 1024 Worten zu 18 Bit (=3 Bytes zu 6 Bit). Dafür hat er aber auch nicht so viel Platz gebraucht, ihm hat ein Raum mit 60 qm ausgereicht. Peripherer Speicher war eine Magnettrommel mit 64 K Worten. Ein- und Ausgabe erfolgte über Lochstreifen und Lochkarten. Trotzdem haben wir damit beispielsweise die Nettolohnabrechnung für das Werk mit 6000 Beschäftigten geschafft. Er hieß ZAM 2 Gamma. Es war einer von den beiden nach "Ost-Deutschland" exportierten.

    Du hast für mich ja ganz tolle Programme geschrieben. Unwahrscheinlich wie tief Du in der Materie steckst. Die Möglichkeiten von Strukturen in AutoIt hatte ich bisher nicht erkannt. Ich werde nun zunächst Deine Variante vom 1.12.13 mit DllStructSetData in mein BITMAP-Programm einarbeiten. Dann wird es schon flutschen. Die Assemblervariante werde ich dann in Angriff nehmen, wenn ich mich etwas mit dem Assembler beschäftigt habe. Denn verstehen möchte man ja doch, was man da so macht.
    Jedenfalls habe ich in den letzten Tagen sehr viel von Dir gelernt. Allein schon die Erkenntnis, dass man Assemblercode in ein AutoIt-Programm einbauen kann. Ich kann Dir gar nicht genug danken.

  • Mit StringFromASCIIArray ANSI-Zeichensatz erzeugen ?

    • DOheim
    • 2. Dezember 2013 um 09:37

    Herzlichen Dank!
    Das muss ich mir erst einmal auf der Zunge zergehen lassen.
    Ich habe zwar mein ganzes berufliches Leben nur immer in Assembler auf "Großrechnern" programmiert (seit 1963). Habe sogar den inneren Kern von Betriebsystemen zerlegt und dort Fehler beseitigt und neue Eigenschaften hinzugefügt.
    Aber mich jetzt noch in einen PC-Assembler einzuarbeiten wäre mir - glaube ich - doch etwas aufwändig. Oder?
    Viele Grüße und nochmals vielen Dank
    Dieter

  • Mit StringFromASCIIArray ANSI-Zeichensatz erzeugen ?

    • DOheim
    • 1. Dezember 2013 um 19:17

    Recht vielen Dank, Andy, dass Du Dir so große Mühe mit mir gibst!

    Ich möchte in der Bitmap-Datei alle die verstreut liegenden Pixel, die in einem bestimmten Farbbereich
    .........( z.B.: rot zwischen 123 und 188
    ....................grün zwischen 0 und 20
    ....................blau zwischen 200 und 220 )
    liegen, einzeln heraussuchen und dann durch eine andere Farbe ersetzen.
    Und das dauert mit StringReplace bei einer großen Datei und vielen zu ersetzenden Pixeln eine Ewigkeit.

    Gruß
    Dieter

  • Mit StringFromASCIIArray ANSI-Zeichensatz erzeugen ?

    • DOheim
    • 1. Dezember 2013 um 10:38

    Nein, es funktioniert leider nicht.
    jetzt verstehe ich erst die Erläuterungen in der Hilfe zu StringFromASCIIArray.
    Er hört beim ersten Nullbyte auf zu übertragen. Und bei meiner Bitmap-Datei sind jede Menge Nullbytes enthalten.
    Das ist natürlich eine herbe Enttäuschung für mich.
    Wie meintest Du das:

    Zitat


    Die "Pixel" in einer Bitmap liegen "so schön" nebeneinander, da hättest du sicher kein zusätzliches Array gebraucht.


    StringReplace wäre nicht geeignet, da bei jedem Ersetzen eines Pixels immer der ganze String kopiert wird. Und das dauert.
    Oder hast Du noch etwas anderes im Hinterkopf?
    Vielen Dank für Deine Hilfe.
    Noch etwas anderes: Gibt es eigentlich in diesem Forum die Möglichkeit, sich per E-Mail benachrichtigen zu lassen, wenn ein neuer Beitrag eingegangen ist?

  • Mit StringFromASCIIArray ANSI-Zeichensatz erzeugen ?

    • DOheim
    • 30. November 2013 um 21:32

    Vielen Dank Andy für Deine Antwort!!
    Das ist ja eigenartig, dass es erst ab 1,... funktioniert. Wie bist Du da nur drauf gekommen?
    Die Antwort auf Deine Frage findest Du unter:

    [ gelöst ] Zugriff auf Zeichen im String

    Ich habe eine Bitmap-Datei eingelesen und in ein Array umgewandelt. Dann habe ich eine große Anzahl von Pixeln verändert und das veränderte Array wieder zurückverwandelt und als neue Bitmap-Datei geschrieben. Und das hat nicht richtig geklappt.
    Nochmals vielen Dank.
    Gruß
    Dieter

  • Mit StringFromASCIIArray ANSI-Zeichensatz erzeugen ?

    • DOheim
    • 30. November 2013 um 19:19

    Ich möchte mit der Funktion StringFromASCIIArray einen ANSI-Zeichensatz erzeugen.
    Wenn man nachfolgendes Programm abarbeitet, sieht man in den Zeilen 128 bis 159 der Spalte yyyyy des angezeigten Arrays, dass man mit

    StringFromASCIIArray($arr)

    wahrscheinlich den UTF-16 erhält.
    Aber mit

    StringFromASCIIArray($arr,0, UBound($array) - 1,1)

    kommen nur lauter Nullen (siehe Spalte zzzzzz) .

    [autoit]

    #Include <Array.au3>
    Local $array[300][4]
    Local $arr[300]
    $len=256
    For $i=0 To $len-1
    $arr[$i]=$i
    Next
    $str1=StringFromASCIIArray($arr)
    $str2=StringFromASCIIArray($arr,0, UBound($array) - 1,1)
    For $i=0 To $len-1
    $array[$i][0]=$i
    $array[$i][1]=$arr[$i]
    $array[$i][2]=Asc(StringMid($str1,$i+1,1))
    $array[$i][3]=Asc(StringMid($str2,$i+1,1))
    Next
    _ArrayDisplay($array, "Vergleich", 300 , 0 , "" , "|" , " Pos.|wwwww|xxxxx|yyyyy|zzzzz")

    [/autoit]

    Was habe ich falsch gemacht?

  • Zeichenfolge aus beliebigen Zeichen erzeugen

    • DOheim
    • 29. November 2013 um 15:10

    Recht vielen Dank!!!!!!
    Hat auf Anhieb geklappt.
    Manchmal sieht man den Wald vor lauter Bäumen nicht.
    Gruß
    Dieter

  • Zeichenfolge aus beliebigen Zeichen erzeugen

    • DOheim
    • 29. November 2013 um 14:52

    Ein Zeichen besteht ja aus 8 Bit, in denen die Werte 0 bi 255 (0x00 bis 0xFF)stehen können.

    Wie kann ich z.B. einen 256 Zeichen langen String erzeugen, in welchem die Werte 0 bi 255 stehen?

    So geht es jedenfalls nicht:

    [autoit]

    #Include <Array.au3>
    Dim $string
    For $i=0 To 255
    $string=$string&$i
    Next
    FileOpen("string.txt",2)
    FileWrite ("string.txt",$string)
    FileClose("string.txt")

    [/autoit]

    Da kommt so etwas heraus:

    012345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

    505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394

    9596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126

    127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156

    157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186

    187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216

    217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246

    247248249250251252253254255

  • Zugriff auf Zeichen im String

    • DOheim
    • 27. November 2013 um 13:51

    Nein, das sollte nur zeigen, wie schnell es gehen würde, selbst wenn man alle 6,7 MByte Zeichen einzeln austauscht.
    Dein Hinweis auf die Funktion StringToASCIIArray war sehr wichtig, dadurch bin ich dann auch auf die erst recht wichtige Funktion StringFromASCIIArray aufmerksam geworden.
    Gruß
    Dieter

  • Zugriff auf Zeichen im String

    • DOheim
    • 27. November 2013 um 10:13

    In Kombination Eurer umfangreichen Anregungen habe ich folgendes Programm geschrieben:

    [autoit]


    #include "HilfsFunktionen.au3"
    Global $Protokoll1=2 ; =2, dann wird protokolliert
    ; =0, dann wird nicht protokolliert
    $ProgrammName="Test1" ; für Protokoll
    ;-------------------------------------------------------------------------
    Protokoll("Anfang")
    $datei="d:\arbdat\Alarmanlage 2a.bmp"
    $handl=FileOpen ($datei)
    $feld=FileRead ( $handl)
    $anz=@extended
    FileClose ( $handl)
    Local $a = StringToASCIIArray($feld)
    Protokoll("Anzahl:"&$anz)
    For $i=0 To $anz-2
    $a[$i]=$a[$i+1]
    Next
    Protokoll("AAAA")
    Local $s = StringFromASCIIArray($a)
    Protokoll("BBBB")
    $handl=FileOpen("d:\arbdat\Alarm.bmp",2)
    FileWrite ($handl,$s)
    FileClose ( $handl)
    Protokoll("Ende")

    [/autoit][autoit][/autoit][autoit][/autoit]

    Das Protokoll sieht dann so aus:

    Programmname: Test1
    2013/11/27 09/53/39
    ..........Zeit(sec)
    Test1 0.000306 Anfang
    Test1 2.149016 Anzahl:6714366
    Test1 7.097853 AAAA
    Test1 7.886551 BBBB
    Test1 7.900876 Ende


    Das alles als nur in 8 Sekunden. Ihr könnt Euch vorstellen, dass ich jetzt höchst zufrieden bin.

    Ich danke Euch allen für Eure Mühe mit mir.

  • Zugriff auf Zeichen im String

    • DOheim
    • 25. November 2013 um 12:59

    Erst einmal recht herzlichen Dank!
    Das muss ich mir noch in Ruhe auf der Zunge zergehen lassen.
    Melde mich dann wieder.
    Nochmals Euch vielen Dank!

  • Zugriff auf Zeichen im String

    • DOheim
    • 25. November 2013 um 11:40

    Wenn ich z.B. eine Bitmap-Datei, die aus 20 MByte besteht, bearbeiten möchte und dort Millionen von Zeichen austausche will, dann dauert das ewig.

  • Zugriff auf Zeichen im String

    • DOheim
    • 25. November 2013 um 11:11

    AutoIt ist so eine feine Sprache. Gibt es wirklich keine Möglichkeit, direkt auf ein Zeichen in einem String zuzugreifen?

    So wie bei C++ : string[x].

    Muss man immer über zeitaufwendige Funktionen (StringMid usw.) gehen?

  • An Startmenü anheften

    • DOheim
    • 1. März 2013 um 19:33

    Ich habe es eben manchmal schwer "mit dem Kapieren."

    Eben erst habe ich bemerkt, dass Du ja auch die Zeile

    [autoit]

    $oFolder = $oShell.NameSpace("D:\Arbdat\")

    [/autoit]

    in dem Programm verändert hattest. Ich habe nun ("D:\Arbdat\") in
    ("D:\Arbdat\#Test\") gerändert. 

    Und nun klappt es perfekt! 

    Recht herzlichen Dank!

  • An Startmenü anheften

    • DOheim
    • 1. März 2013 um 10:25

    Vielen Dank für Deine Antwort!
    Dein Vorschlag klappt dann, wenn ich die xxx.exe in das Verzeichnis C:\Windows kopiere.
    Wie könnte man denn das Programm veranlassen, in einem anderen Verzeichnis zu suchen?

  • An Startmenü anheften

    • DOheim
    • 27. Februar 2013 um 17:07

    Unter

    [ gelöst ] Namen einer exe datei gehen

    habe ich dieses Programm gefunden, mit welchem man eine .exe an das Startmenü anheften kann.

    Mit "Explorer.exe" und "Notepad.exe" klppt das auch prima.

    Aber wenn ich mein eigens Programm xxx.exe anheften will kommt:

    The requested action with this object has failed.:
    $oVerbs = $oItem.Verbs
    $oVerbs = $oItem.Verbs^ ERROR
    >Exit code: 1


    Wie muss ich es richtig anstellen?

    [autoit]


    ;$sProgramname = "Explorer.exe"
    ;$sProgramname = "Notepad.exe"
    $sProgramname = "D:\Arbdat\xxx.exe"
    $sKontext = "An Startmenü anheften"
    ;$sKontext = "Vom Startmenü lösen"
    ;$sKontext = "Eigenschaften"
    $oShell = ObjCreate("Shell.Application")
    $oFolder = $oShell.NameSpace(@WindowsDir)
    $oItem = $oFolder.ParseName($sProgramname)
    $oVerbs = $oItem.Verbs
    For $verb In $oVerbs
    $verbname = StringReplace($verb.name, "&", "")
    ;ConsoleWrite($verbname) ; Hier kannst du alle Kontexteinträge in die Konsole schreiben lassen. Nicht nötig fürs Programm
    If $verbname = $sKontext Then
    $verb.DoIt
    EndIf
    Next

    [/autoit]
  • RegEnumKey bringt eigenariges Ergebnis

    • DOheim
    • 12. Februar 2013 um 09:51

    Recht vielen Dank Oscar und Chesstiger für Eure hilfreichen Antworten.
    Ich hatte gar keine Antworten mehr erwartet. Das hilft mir jetzt sehr!
    Zufällig hat Oscar zu gleichen Zeit seine Antwort verfasst wie ich meine.
    Nochmals vielen Dank!

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™