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

Beiträge von BugFix

  • Programme nacheinander ausführen

    • BugFix
    • 1. November 2006 um 11:08
    Zitat

    Eben nicht. Ich hab mir mal die Werte ausgeben lassen.


    Das ist auch richtig ;) , es ist ja der Wert des Handles, nicht der Status. Denn bekommst du erst mit GUICtrlRead( )

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("AForm1", 633, 454, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "AForm1Close")
    $Checkbox1 = GUICtrlCreateCheckbox("ACheckbox1", 144, 216, 97, 17)
    GUICtrlSetOnEvent(-1, "ACheckbox1Click")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

    Func ACheckbox1Click()
    MsgBox(0, '$Checkbox1', '$Checkbox1 = ' & $Checkbox1 & @LF & 'GUICtrlRead($Checkbox1) = '& GUICtrlRead($Checkbox1) )
    EndFunc

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


    Func AForm1Close()
    Exit
    EndFunc

    [/autoit]
  • Routen erstellen

    • BugFix
    • 1. November 2006 um 10:57

    Danke erstmal,
    dann ist die Geschichte ja doch wesentlich unkomplizierter als ich dachte.
    PeerToPeer PC sind Win2K und ich glaub noch 1 Win98.
    Der neue wird auch Win2K haben.

    Damit der neue PC auf die PeerToPeer PC zugreifen darf, muß er doch denselben Usernamen führen bzw. in seiner Userverwaltung muß ein User mit diesem Namen und Paßwort existieren - richtig ?

  • Programme nacheinander ausführen

    • BugFix
    • 1. November 2006 um 10:45

    Hier mal (hoffentlich) etwas angepaßt an deine Struktur.
    Dein Code verrät nicht allzuviel. Was ich sehe, du arbeitest im OnEvent-Mode und wertest unnütze Ereignisse aus. Eine aktivierte Box wird automatisch 1 ;)

    [autoit]

    ; mal als Bsp.
    ; $Box1 für $prog1
    ; $Box2 für $prog2
    ; $Box3 für $prog3

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

    Dim $ar_Install[3]
    $ar_Install[0] = $prog1
    $ar_Install[1] = $prog2
    $ar_Install[2] = $prog3
    $j = 0
    For $i = $Box1 To $Box3
    If GUICtrlRead($i) = 1 Then
    Run($ar_Install[$j])
    Do
    Sleep(1000)
    Until Not ProcessExists($ar_Install[$j])
    EndIf
    $j += 1
    Next

    [/autoit]
  • Programme nacheinander ausführen

    • BugFix
    • 1. November 2006 um 10:03

    Ablauf ist ja in einer Schleife
    Vermute die Installprogs, die aufgerufen werden sind in einem Array.
    Nicht getestet, aber sollte funktionieren:

    [autoit]

    For $i = 1 To UBound($ar_Install)-1 ; oder ähnlich
    Run($ar_Install[$i])
    Do
    Sleep(1000)
    Until Not ProcessExists($ar_Install[$i])
    Next

    [/autoit]
  • Routen erstellen

    • BugFix
    • 1. November 2006 um 09:42

    Hi,
    ich habe folgende Situation:

    1. Ein PeerToPeer Netz mit 4 PC; IP: 10.10.10.x / Subnet: 255.255.255.0
    Das sind Rechner, die Daten von med. Untersuchungen mit entsprechender Diagnostiksoftware aufzeichnen.

    2. Hausnetz mit -zig Rechnern (Client-Server Struktur); Netzdaten liegen mir noch nicht vor - aber ich denke mal, für das Bsp.ist das sekundär und kann jederzeit angepaßt werden
    Über dieses Netz besteht Zugang zu den zentralen Verwaltungsdaten (Aufnahmekartei etc..)

    3. Neu hinzukommen soll:
    PC, der im Hausnetz eingebunden ist UND gleichzeitig Daten von den Rechnern des PeerToPeer Netzes abrufen kann.


    Mein Ansatz:
    Der Rechner unter 3. bekommt 2 NIC. Eine im Adreßbereich des PeerToPeer Netzes, die andere im Adreßbereich des Hausnetzes.

    Jetzt stellen sich folgende Fragen:
    - Ist es günstiger diesen PC primär als Client im Hausnetz zu führen und eine Zugriffsmöglichkeit auf das PeerToPeer Netz zu konfigurieren oder umgekehrt ?

    - Wie muß diese Konfiguration in beiden Fällen aussehen?

    Momentan habe ich nur die Info, dass dieser PC
    - Daten aus dem PeerToPeer Netz abruft
    - diese auswertet
    - die Ergebnisse auf Datenbanken des Hausnetzes ablegt

    Ich gehe aber davon aus, dass früher oder später verlangt wird, dass die PC des PeerToPeer Netzes auf eben jene DB Zugriff erhalten (wär zumindest sinnvoll um Duplizität zu vermeiden).

    Die Infos, die ich bisher zu diesem Thema gefunden hab, beschreiben eigtl. immer nut, wie die Routingtabelle aussehen soll.
    Ich muß aber erst mal wissen, welche Routen überhaupt erstellt werden müssen.

    Ich hoffe, ich konnte mein Problem verständlich erklären.

  • Neue 3.2.0.0-Hilfe übersetzen

    • BugFix
    • 31. Oktober 2006 um 16:08

    SVN-Repository ist effektiv.
    Hat den Vorteil, dass man schnell mal eben was bearbeiten kann. Ohne dass wer anders auf einen wartet.
    Ich quäle mich grad durch die Übersetzung der Call-Tipps. Wobei es hauptsächlich ein Kopieren ist. Wozu was übersetzen, was schon gemacht wurde :)

  • Daemon Tools Script?

    • BugFix
    • 31. Oktober 2006 um 15:59

    Im Allgemeinen popt da ein Fenster auf ungefähr so: "Zur endgültigen Installation ist ein Neustart erforderlich. Soll jetzt neu gestartet werden?" Schaltflächen: "Jetzt neu starten" und "Später neu starten"
    Das Fenster hat sicher nen Titel.
    Also: WinWaitActive("FensterTitel") und dann ControlSend() auf "später neu starten".
    FensterTitel und Control-Name kannst du mit AutoIt Window Info feststellen.

    Sollte dort nicht die Möglichkeit bestehn, den Neustart abzuwählen, mußt du diese Installation einfach als letzte ausführen.

  • GUI erstellen

    • BugFix
    • 30. Oktober 2006 um 21:21

    Ich unterstütze Drako ein wenig bei der Umsetzung. Ich denke mal, das fertige Produkt wird er euch nicht vorenthalten.
    Habt noch etwas Geduld. ;)

  • Programmversionen installierter Programme

    • BugFix
    • 30. Oktober 2006 um 14:30

    Letztlich geht es darum die Versionen abzugleichen mit Versionen einer Installroutine in einem Script und bei Bedarf, dann die neuere Version zu installieren.

    Da es allgemeingültig sein soll, kann ich den Ordner Programme eh vergessen. Ich installiere dorthin ausschließlich Systemkomponenten. Programme liegen bei mir auf einer eigenen Partition.
    Und ich muß davon ausgehen, dass nicht nur ich eine andere Ordnung wähle.

    Ich hatte schon überlegt, alle Partitionen rekursiv nach EXE zu durchsuchen und die Version zu checken.
    Hat aber auch 2 Nachteile. Zum einen dauert es ewig und zum anderen müssen die gefundenen EXE-dateien nicht zwangsweise installiert sein, sondern können irgendwelche Downloads sein.

    Also bleibt eigtl. nur die Registry.

    Ich werd mir nun doch die Mühe machen und bei allen Programmen, die zur Installation zur Verfügung stehen, nachsehen wo sie sich in der Registry eingraben. Dann kann ich ganz gezielt abfragen.

  • Programmversionen installierter Programme

    • BugFix
    • 30. Oktober 2006 um 13:19

    Hi,
    ich wollte mal eben die Programmversionen aller installierten Programme ermitteln und habe festgestellt, dass sich da kein Softwarehersteller an feste Regeln hält.
    Bei einem Großteil wird die Versionsnummer im Schlüssel "HKLM\ Software\ Microsoft\ Windows\ CurrentVersion\ Uninstall\ SOFTWARENAME\ DisplayVersion" hinterlegt. Das ist prima.
    Bei den anderen (Autoit gehört auch dazu :( ) ist teilweise die Versionsnummer im Namen enthalten oder in einem anderen Registryschlüssel, der von Programm zu Programm variiert, hinterlegt.
    Es gibt aber auch Spezialisten, die die Versionsnr. gar nicht in der Registry hinterlegen - da hilft dann nur Pfad suchen und mit FileGetVersion( ) nachsehen.

    Hat evtl. jemand eine zündende Idee, wie man da eine automatisierte Abfrage hinbekommt?

    Hier könnt ihr mal selber schauen, wieviel Progs sich sauber eintragen und wieviele nicht (unbenommen derer, die gar nicht im Uninstall-Schlüssel stehen):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GuiListView.au3>
    #include <array.au3>

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

    Dim $RegKey = "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\"
    Dim $Wert, $Fehler=0, $i=0, $str
    Dim $ar_SubKeys[1], $ar_Progs[1], $ar_Progs_oVer[1]
    $ar_SubKeys[0] = 0
    $ar_Progs[0] = 0
    $ar_Progs_oVer[0] = 0

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

    ; == GUI generated with Koda ==
    $Form1 = GUICreate("AForm1", 622, 670, -1, -1)
    $List1 = GUICtrlCreateListView("Programm|Version", 24, 30, 577, 300, $LVSCW_AUTOSIZE)
    _GUICtrlListViewSetColumnWidth(-1, 0, 320)
    _GUICtrlListViewSetColumnWidth(-1, 1, 230)
    $List2 = GUICtrlCreateList("", 24, 360, 577, 300)
    GUICtrlCreateLabel("Programme mit Reg-Key 'DisplayVersion'", 200, 10)
    GUICtrlCreateLabel("Programme ohne Reg-Key 'DisplayVersion'", 200, 340)
    GUISetState(@SW_SHOW)

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

    _ReadInstalledProg()

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

    ; Progs mit Key "DisplayVersion"
    For $i = 1 To $ar_Progs[0]
    $var = StringSplit($ar_Progs[$i], "\")
    _GUICtrlListViewInsertItem($List1, -1, $var[1] & "|" & $var[2])
    Next

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

    ; Progs ohne Key "DisplayVersion"
    For $i = 1 To $ar_Progs_oVer[0]
    GUICtrlSetData($List2, $ar_Progs_oVer[$i])
    Next

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

    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case Else
    ;;;;;;;
    EndSelect
    WEnd
    Exit

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

    Func _ReadInstalledProg()
    Do
    $i+=1
    $Wert=RegEnumKey($RegKey, $i)
    $Fehler=@Error
    If $Fehler=0 Then
    _ArrayAdd($ar_SubKeys, $Wert)
    $ar_SubKeys[0] += 1
    EndIf
    Until $Fehler<>0
    For $i = 1 To $ar_SubKeys[0]
    $valName = RegRead($RegKey & $ar_SubKeys[$i], "DisplayName")
    $valVer = RegRead($RegKey & $ar_SubKeys[$i], "DisplayVersion")
    If $valName <> "" Then
    Select
    Case $valVer = ""
    $str = $valName
    _ArrayAdd($ar_Progs_oVer, $str)
    $ar_Progs_oVer[0] += 1
    Case Else
    $str = $valName & "\" & $valVer
    _ArrayAdd($ar_Progs, $str)
    $ar_Progs[0] += 1
    EndSelect
    EndIf
    Next
    EndFunc

    [/autoit]
  • GUI erstellen

    • BugFix
    • 29. Oktober 2006 um 20:42
    Zitat

    ob die programme die zur auswahl stehen, schon installiert sind, und wenn ja hat es die checkbox blockiert, erschien dann nur in grau.


    Wenn die Programme mit Installationsroutine installiert wurden hinterlassen sie im Allgemeinen einen Registry-Eintrag. Das läßt sich also problemlos auswerten und zu deinem gewünschten Deaktivieren der entsprechenden Checkbox verwenden.

    Zitat

    noch ne checkbox die alle anderen checkboxen ausfüllt wenn man einfach wünscht alles zu installieren


    Das dürfte die einfachste aller Übungen sein.

    Zitat

    Leider steht nicht über dem Progress Balken welche anwendung Installiert wird


    Dafür werden wir mal einfach noch eine Statusbar einfügen.

    Zitat

    Es gibt keine Pausen zwischen den installationen....Er öffnet alle install scripte auf einmal


    Nacheinander - klar. Aber auf einmal? Möchtest du nach jeder Installation eine Pause von festgelegter Dauer oder soll der Nutzer den Start der nächsten Installation bestätigen?

    Sag, wie du es haben möchtest - ich helf dir gern weiter. Falls du ICQ od. Yahoo od. MSN hast, kannst ja mal per PN deine Nr. geben. Dann lassen sich Kleinigkeiten schneller klären.

  • 'Fenster' - Auflistung in Menüleiste

    • BugFix
    • 28. Oktober 2006 um 23:22

    Freut mich, wenn's gefällt.
    Ich hatte eigentlich vermutet, dass dieses Problem entweder in einer Autoit-Funktion oder zumindest im engl. Forum bereits behandelt wurde.
    Also entweder war ich wirklich der erste, der das durchführen wollte (kann ich mir eigentlich nicht vorstellen) oder es hat einfach noch nie jemand reingestellt.

    Die Suchfunktion im engl. Forum ist allerdings ziemlich unnütz. Nur eine sehr geringe Trefferquote. Ich hab als Bsp. " 'menu bar item window' " in die Suche eingegeben. Ergebnis: 54 Seiten (limitiert auf 1000 Treffer) und nur 1 !! Beitrag zu diesem Thema - nämlich meiner. :schild4:
    Das Problem besteht eigentlich bei jeder Suche dort. :(

  • GUI erstellen

    • BugFix
    • 28. Oktober 2006 um 22:58
    Zitat

    das dieses MSG fenster aufgeht blockiert etwas den durchlauf


    Das war ja auch nur für den Testbetrieb ohne die Installationen zu starten (sonst kannst du ja nicht nachvollziehen ob die richtigen Schritte ausgeführt werden). Für die finale Version sollst du natürlich die MsgBox rausschmeißen.

  • ich kapier das einfach nicht

    • BugFix
    • 28. Oktober 2006 um 11:12

    Ich weiß, es wird dir kein Trost sein - aber auf meinem Rechner funktioniert keine deiner Varianten. ?(
    Dann hab ich's mal am Laptop probiert. Hier funktionierte die Version _IsPressed mit BlockInput() teilweise. Also Endlosschleife mit ständigem Wechsel zwischen den TrayTip's ( 4 to 2 ; 2 to 4 ; 4 to 2 ...).
    Im Moment kA warum.

    EDIT:
    Versuchs mal so:

    [autoit]

    While 1
    While _IsPressed("46") = 0 ; Warten auf "F" gedrückt
    Sleep(150)
    WEnd
    _fixieren()
    WEnd

    [/autoit]

    Kann es bei mir nicht testen - mein PC läßt kein TrayTip zu (wieso auch immer).

    EDIT 2:
    Hab jetzt noch mal am Laptop getestet und komme auch zu dem Schluß: Es ist ein Bug.
    MIt BlockInput wirds eine Endlosschleife. Das ist echt nicht erklärbar.
    Meine letzte getestete Variante war diese:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

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

    $fixieren = 4
    ;HotKeySet("f", "_fixieren")

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

    While 1
    While _IsPressed("46") = 0 ; Warten auf "F" gedrückt
    Sleep(150)
    WEnd
    _fixieren()
    WEnd

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

    Func _fixieren()
    ;~ BlockInput(1)
    Switch $fixieren
    Case 4
    $fixieren = 2
    TrayTip("Info", "4 to " & $fixieren, 5, 1)
    Sleep(1500)
    TrayTip("","",1)
    Case 2
    $fixieren = 4
    TrayTip("Info", "2 to " & $fixieren, 5, 1)
    Sleep(1500)
    TrayTip("","",1)
    EndSwitch
    ;~ BlockInput(0)
    EndFunc ;==>_fixieren

    [/autoit]


    Wobei ich nicht verstehe, wozu das BlockInput dienen soll. So, wie ich es jetzt gemacht habe, kann eine Eingabe von "F" erst wieder geprüft werden, wenn die Funktion _fixieren beendet ist. Ein Doppelaufruf ist also ausgeschlossen (ich glaube, das war dein Hintergedanke dabei).

  • GUI erstellen

    • BugFix
    • 28. Oktober 2006 um 00:27

    Hi,
    also ich hab das mal etwas abgeändert. Du hattest für jede Checkbox ein Event erzeugt. Damit wäre im Moment des Anklickens sofort die Installation gestartet.
    Ich weise deine Checkboxen jetzt einem Array zu und gleichzeitig ordne ich die Installationspfade der entsprechenden Checkbox im Array zu.
    Die Progressbar fülle ich in Abhängigkeit von der Anzahl der zu installierenden Programme. Bsp.: Bei 10 Programmen (100% / 10 = 10%) erfolgt nach jedem installierten Programm ein Schritt von 10%.
    Also viel Spaß und berichte ob alles geklappt hat.

    EDIT:
    War wohl etwas spät (oder früh? :D ), hab grad noch 'nen Fehler bei der Progressbar entdeckt und geändert. Die Codezeile für die Installation kommentiere ich mal aus und setze eine MsgBox ein, damit du es auch testen kannst.
    #2
    Seh grad, du wolltest während der Installation die Eingabe blockieren. Ich setze das mal - aber auskommentiert, sonst kannst du die MsgBox nicht schließen :D )

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #NoTrayIcon
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=f:\progs\proginstall.kxf
    Global $Form1 = GUICreate("Programme Installieren", 562, 274, -1, -1)

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

    Dim $ar_CheckBox[24][2], $counter = 0, $progressStep, $bar = 0

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

    GUISetFont(8, 400, 0, "Microsoft Sans Serif")
    GUISetBkColor(0xD8E4F8)
    GUISetOnEvent($GUI_EVENT_CLOSE, "AForm1Close")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "AForm1Minimize")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "AForm1Maximize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "AForm1Restore")
    Global $RUN = GUICtrlCreateButton("AlleProgsInstallieren", 144, 240, 110, 33, 0)
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetOnEvent(-1, "AButton1Click")
    GUICtrlSetState(-1, $GUI_FOCUS)
    Global $EXIT = GUICtrlCreateButton("Abbrechen", 320, 240, 110, 33, 0)
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetOnEvent(-1, "EXITClick")
    Global $Progress1 = GUICtrlCreateProgress(72, 192, 393, 25)
    GUICtrlSetData(-1, 00)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetBkColor(-1, 0x3D95FF)
    Global $Group1 = GUICtrlCreateGroup("Programme", 0, 0, 561, 177)
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)

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

    $ar_CheckBox[0][0] = GUICtrlCreateCheckbox("Adobe Reader", 8, 16, 97, 17) ; $ar_CheckBox[i] [0] = Handle
    $ar_CheckBox[0][1] = "AdobeReader.exe" ; [1] = Installpfad
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[1][0] = GUICtrlCreateCheckbox("OpenOffice 2.0", 8, 40, 97, 17)
    $ar_CheckBox[1][1] = "OpenOfficeInstallGer.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[2][0] = GUICtrlCreateCheckbox("Opera", 8, 64, 97, 17)
    $ar_CheckBox[2][1] = "Opera.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[3][0] = GUICtrlCreateCheckbox("Mozilla Firefox 2", 8, 88, 97, 17)
    $ar_CheckBox[3][1] = "Firefox2Install.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[4][0] = GUICtrlCreateCheckbox("FlashPlayer", 8, 112, 97, 17)
    $ar_CheckBox[4][1] = "flashplayer.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[5][0] = GUICtrlCreateCheckbox("Ahead Nero 7.5", 8, 136, 97, 17)
    $ar_CheckBox[5][1] = "Nero.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[6][0] = GUICtrlCreateCheckbox("VLC Player", 144, 16, 97, 17)
    $ar_CheckBox[6][1] = "VLC Player 0.8.5.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[7][0] = GUICtrlCreateCheckbox("QuickTime Player", 144, 40, 113, 17)
    $ar_CheckBox[7][1] = "QuickTime.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[8][0] = GUICtrlCreateCheckbox("RealPlayer", 144, 64, 97, 17)
    $ar_CheckBox[8][1] = "RealPlayer.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[9][0] = GUICtrlCreateCheckbox("WinMedia Player", 144, 88, 105, 17)
    $ar_CheckBox[9][1] = "WinMedia11.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[10][0] = GUICtrlCreateCheckbox("NetFramework 2.0", 144, 112, 113, 17)
    $ar_CheckBox[10][1] = "Net2.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[11][0] = GUICtrlCreateCheckbox("GoBack", 144, 136, 113, 17)
    $ar_CheckBox[11][1] = "GoBack.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[12][0] = GUICtrlCreateCheckbox("ICQ 5.1", 288, 16, 97, 17)
    $ar_CheckBox[12][1] = "ICQ.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[13][0] = GUICtrlCreateCheckbox("AOL Messenger", 288, 40, 97, 17)
    $ar_CheckBox[13][1] = "AOL Messenger.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[14][0] = GUICtrlCreateCheckbox("YAHOO Messenger", 288, 64, 113, 17)
    $ar_CheckBox[14][1] = "Yahoo.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[15][0] = GUICtrlCreateCheckbox("WinLive Messenger", 288, 88, 113, 17)
    $ar_CheckBox[15][1] = "MSN.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[16][0] = GUICtrlCreateCheckbox("Skype", 288, 112, 97, 17)
    $ar_CheckBox[16][1] = "Skypeinstall.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[17][0] = GUICtrlCreateCheckbox("Trillian 3.1", 288, 136, 97, 17)
    $ar_CheckBox[17][1] = "Trillianinstall.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[18][0] = GUICtrlCreateCheckbox("LimeWire 4.12.0", 440, 16, 97, 17)
    $ar_CheckBox[18][1] = "LimeWireScript.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[19][0] = GUICtrlCreateCheckbox("Usenext", 440, 40, 97, 17)
    $ar_CheckBox[19][1] = "Usenext.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[20][0] = GUICtrlCreateCheckbox("WinRar", 440, 64, 97, 17)
    $ar_CheckBox[20][1] = "WinRAR.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[21][0] = GUICtrlCreateCheckbox("TeamSpeak", 440, 88, 97, 17)
    $ar_CheckBox[21][1] = "TeamSpeakInstall.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[22][0] = GUICtrlCreateCheckbox("TS Overlay", 440, 112, 97, 17)
    $ar_CheckBox[22][1] = "TSO.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    $ar_CheckBox[23][0] = GUICtrlCreateCheckbox("InterCafe Client", 440, 136, 97, 17)
    $ar_CheckBox[23][1] = "Intercafe.exe"
    GUICtrlSetFont(-1, 8, 400, 0, "Microsoft Sans Serif")
    GUICtrlSetBkColor(-1, 0xD8E4F8)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

    Func AButton1Click()
    ; BlockInput(1) ; Tastatur und Maus blockiert
    GUICtrlSetData($Progress1, 2) ; damit der Nutzer sieht, es geht los
    For $i = 0 To UBound($ar_CheckBox)-1
    If GUICtrlRead($ar_CheckBox[$i][0]) = 1 Then $counter += 1 ; feststellen wieviele markiert
    Next
    $progressStep = 100/$counter ; wieviele Schritte (z.B. 3 Programme = 3 Schritte a' 33 %)
    For $i = 0 To UBound($ar_CheckBox)-1
    If GUICtrlRead($ar_CheckBox[$i][0]) = 1 Then
    MsgBox(0, '', "Installation " & $ar_CheckBox[$i][1])
    ; Run($ar_CheckBox[$i][1])
    $bar += $progressStep
    GUICtrlSetData($Progress1, $bar)
    EndIf
    Next
    GUICtrlSetData($Progress1, 100)
    Sleep(1000)
    ; BlockInput(0) ; Tastatur und Maus wieder frei
    Exit
    EndFunc

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

    Func AForm1Close()
    Exit
    EndFunc

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


    Func AForm1Maximize()

    EndFunc

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


    Func AForm1Minimize()

    EndFunc

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


    Func AForm1Restore()

    EndFunc

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


    Func EXITClick()
    Exit
    EndFunc

    [/autoit]
  • 'Fenster' - Auflistung in Menüleiste

    • BugFix
    • 27. Oktober 2006 um 21:33

    Alle gängigen Windowsprogramme haben den Menüpunkt "Fenster" in der Menüleiste um zwischen den geöffneten Fenstern zu switchen.
    Habe es bisher in der Form nicht als fertige Funktion bei Autoit entdeckt. Da ich es gerade benötigte, habe ich eine entsprechende Lösung erstellt.
    Vielleicht könnt ihr es auch mal brauchen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Dim $ItemKundenExist = 0, $ItemArtikelExist = 0, $ItemSerienExist = 0
    Dim $stat_Kunden, $stat_Artikel, $stat_Serien
    Dim $itemKunden, $itemArtikel, $itemSerien

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

    $MainGUI = GUICreate("Main", Default, Default, Default, Default, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_MAXIMIZE))
    $menu0 = GUICtrlCreateMenu("Datei")
    $m0_item1 = GUICtrlCreateMenuItem("Beenden", $menu0)
    $menu1 = GUICtrlCreateMenu("Stammdaten")
    $m1_item1 = GUICtrlCreateMenuItem("Kunden Strg+K", $menu1)
    $m1_item2 = GUICtrlCreateMenuItem("Artikel Strg+A", $menu1)
    $m1_item3 = GUICtrlCreateMenuItem("Seriennummern Strg+S", $menu1)
    $menu2 = GUICtrlCreateMenu("Fenster")
    $menu3 = GUICtrlCreateMenu("?")
    $m2_item1 = GUICtrlCreateMenuItem("Hilfe", $menu3)
    $m2_item2 = GUICtrlCreateMenuItem("Über", $menu3)

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

    $KundenGUI = GUICreate("Kunden", 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
    $ArtikelGUI = GUICreate("Artikel", 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
    $SerienGUI = GUICreate("Serien-Nr", 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)

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

    GUISetState(@SW_SHOW,$MainGUI)
    HotKeySet("^k", "_StrgK")
    HotKeySet("^a", "_StrgA")
    HotKeySet("^s", "_StrgS")

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

    While 1
    _SetEntryFensterMenu()
    $msg = GuiGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE
    Select
    Case $msg[1] = $MainGUI
    ExitLoop
    Case $msg[1] = $KundenGUI
    GUISetState(@SW_HIDE,$KundenGUI)
    Case $msg[1] = $ArtikelGUI
    GUISetState(@SW_HIDE,$ArtikelGUI)
    Case $msg[1] = $SerienGUI
    GUISetState(@SW_HIDE,$SerienGUI)
    EndSelect
    Case $msg[1] = $MainGUI
    Select
    Case $msg[0] = $m0_item1
    ExitLoop
    Case $msg[0] = $m1_item1
    GUISetState(@SW_SHOW,$KundenGUI)
    Case $msg[0] = $m1_item2
    GUISetState(@SW_SHOW,$ArtikelGUI)
    Case $msg[0] = $m1_item3
    GUISetState(@SW_SHOW,$SerienGUI)
    Case $msg[0] = $itemKunden
    WinActivate("Kunden")
    Case $msg[0] = $itemArtikel
    WinActivate("Artikel")
    Case $msg[0] = $itemSerien
    WinActivate("Serien")
    Case $msg[0] = $m2_item1
    ;~ Hilfe
    Case $msg[0] = $m2_item2
    ;~ Über
    EndSelect
    EndSelect
    WEnd

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

    Func _StrgK()
    GUISetState(@SW_SHOW,$KundenGUI)
    EndFunc

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

    Func _StrgA()
    GUISetState(@SW_SHOW,$ArtikelGUI)
    EndFunc

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

    Func _StrgS()
    GUISetState(@SW_SHOW,$SerienGUI)
    EndFunc

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

    Func _SetEntryFensterMenu()
    $stat_Kunden = WinGetState("Kunden")
    If $stat_Kunden = 7 Or $stat_Kunden = 15 Then
    If $ItemKundenExist = 0 Then
    $itemKunden = GUICtrlCreateMenuItem("Kunden", $menu2)
    $ItemKundenExist = 1
    EndIf
    Else
    If $ItemKundenExist = 1 Then
    GUICtrlDelete($itemKunden)
    $ItemKundenExist = 0
    EndIf
    EndIf
    $stat_Artikel = WinGetState("Artikel")
    If $stat_Artikel = 7 Or $stat_Artikel = 15 Then
    If $ItemArtikelExist = 0 Then
    $itemArtikel = GUICtrlCreateMenuItem("Artikel", $menu2)
    $ItemArtikelExist = 1
    EndIf
    Else
    If $ItemArtikelExist = 1 Then
    GUICtrlDelete($itemArtikel)
    $ItemArtikelExist = 0
    EndIf
    EndIf
    $stat_Serien = WinGetState("Serien")
    If $stat_Serien = 7 Or $stat_Serien = 15 Then
    If $ItemSerienExist = 0 Then
    $itemSerien = GUICtrlCreateMenuItem("Serien", $menu2)
    $ItemSerienExist = 1
    EndIf
    Else
    If $ItemSerienExist = 1 Then
    GUICtrlDelete($itemSerien)
    $ItemSerienExist = 0
    EndIf
    EndIf
    EndFunc

    [/autoit]

    Edit 24.11.2008:
    Habe eine erweiterte Version erstellt.

    Edit 29.09.2011
    Ich habe mich nach langer Zeit mal wieder an dieses Skript gemacht und aus diesem doch recht umständlich in andere Skripte zu integrierenden Bsp. eine UDF erstellt.
    Etwas aufwändig, da ich die WM-Messages "belauschen" muß :D. Letztlich klappt es, wie gewünscht. Nur das automatische Aktivieren des zuletzt genutzten Fensters habe ich noch nicht gemanagt bekommen. Da kommen sich einige Messages in die Quere ;).
    Zur Benutzung:
    - Includieren der "MenuWindows.au3"
    - Das "Fenster"-Menü erstellen mit: _GUICtrlWindowsList_MenuCreate().
    - Registrieren der Fenster, die in diesem Menü verwaltet werden sollen mit: _GUICtrlWindowsList_Register.
    - Bei Bedarf kann man auch wieder die Registrierung mit: _GUICtrlWindowsList_UnRegister aufheben.

    Ich habe jedoch in völlig undifferenzierten Zeiträumen den Fall, dass beim Aktivieren oder Schließen eines registrierten Fensters das Hauptfenster "einfriert". Da es jedoch ohne Systematik geschieht, konnte ich den Fehler bisher nicht eingrenzen. Vielleicht kann jemand von euch das nachvollziehen und hat eine zündende Idee. :rolleyes:

    MenuWindows (v0.2)
    [autoit]

    #Region - TimeStamp
    ; 2011-09-29 19:08:13 v 0.2
    #EndRegion - TimeStamp

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

    ;===============================================================================
    ; Script Name......: MenuWindows
    ; Description......: Erstellen eines Menüs "Fenster" um im Main-Window aktivierte Fenster zu verwalten
    ; AutoIt version...: 3.3.6.1
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;
    ; Funktionen
    ; _GUICtrlWindowsList_MenuCreate Erstellen des Menüs "Fenster" und Registrierung des Main-Windows
    ; _GUICtrlWindowsList_Register Registrieren der Fenster, die im Menü Fenster verwaltet werden sollen
    ; Bis zu 20 Fenster können in einem Aufruf registriert werden
    ; _GUICtrlWindowsList_UnRegister Fenster von der Registration entfernen
    ;===============================================================================

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

    #include-once
    #include <Array.au3>
    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #include <MenuConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    OnAutoItExitRegister('__GUICtrlWindowsList_ShutDown')

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

    Global Const $MAXNUMBER_WINDOWS = 256 ; == inkl. Hauptfenster (Main immer an Index 0)
    Global $Buffer_Empty = ''
    For $i = 1 To 256
    $Buffer_Empty &= ' '
    Next
    Global $DefMenuTitle = 'Windows'
    If StringInStr("0407 0807 0c07 1007 1407", @OSLang) Then $DefMenuTitle = 'Fenster'

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

    Global $hProc_MnuWnd = DllCallbackRegister('__WinProc', 'ptr', 'hwnd;uint;wparam;lparam')
    Global $aWndCollection[$MAXNUMBER_WINDOWS][3] ; <== [[hWnd, $hHook, Mnu-ID]]
    Global $hWnd_Main, $hHook_Main, $ID_MainMenu

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

    ;===============================================================================
    ; Function Name....: _GUICtrlWindowsList_MenuCreate
    ; Description......: Erstellen des Menüs "Fenster" und Registrierung des Main-Windows
    ; Parameter(s).....: $hGui Handle des Fensters,in dem das Menü erstellt wird
    ; optional $sTitle Menütitel, Standard: 'Fenster'
    ; Return Value(s)..: ID des erstellten Menüs
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _GUICtrlWindowsList_MenuCreate($hGui, $sTitle='') ; == Menü "Fenster" erstellen und Main-Window registrieren
    Switch $sTitle
    Case Default, -1, ''
    $sTitle = $DefMenuTitle
    EndSwitch
    $hHook_Main = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProc_MnuWnd))
    $hWnd_Main = $hGui
    $aWndCollection[0][0] = $hWnd_Main
    $aWndCollection[0][1] = $hHook_Main
    $ID_MainMenu = GUICtrlCreateMenu($sTitle)
    Return $ID_MainMenu
    EndFunc ;==>_GUICtrlWindowsList_MenuCreate

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

    ;===============================================================================
    ; Function Name....: _GUICtrlWindowsList_Register
    ; Description......: Registrieren der Fenster, die im Menü Fenster verwaltet werden sollen
    ; Parameter(s).....: $hGui_1 Fensterhandle das registriert werden soll
    ; optional $hGui_2 ..20 weitere Fensterhandle (bis zu 20 gesamt pro Aufruf)
    ; Requirement(s)...: Ein mit _GUICtrlWindowsList_MenuCreate() erstelltes Menü
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _GUICtrlWindowsList_Register($hGui_1, $hGui_2=0, $hGui_3=0, $hGui_4=0, $hGui_5=0, $hGui_6=0, $hGui_7=0, $hGui_8=0, $hGui_9=0, $hGui_10=0, _
    $hGui_11=0, $hGui_12=0, $hGui_13=0, $hGui_14=0, $hGui_15=0, $hGui_16=0, $hGui_17=0, $hGui_18=0, $hGui_19=0, $hGui_20=0)
    Local $aParam[2], $tmpHwnd
    For $i = 1 To 20
    $tmpHwnd = Eval('hGui_' & $i)
    If $tmpHwnd = 0 Then ExitLoop
    $aParam[0] = $tmpHwnd
    $aParam[1] = _WinAPI_SetWindowLong($tmpHwnd, $GWL_WNDPROC, DllCallbackGetPtr($hProc_MnuWnd))
    __GUICtrlWindowsList_Manage('add', $aParam)
    Next
    EndFunc ;==>_GUICtrlWindowsList_Register

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

    ;===============================================================================
    ; Function Name....: _GUICtrlWindowsList_UnRegister
    ; Description......: Fenster von der Registration entfernen
    ; Parameter(s).....: $hGui_1 erstes Fensterhandle das entfernt werden soll
    ; optional $hGui_2 ..20 weitere Fensterhandle (bis zu 20 gesamt pro Aufruf)
    ; Requirement(s)...: Ein mit _GUICtrlWindowsList_MenuCreate() erstelltes Menü
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _GUICtrlWindowsList_UnRegister($hGui_1, $hGui_2=0, $hGui_3=0, $hGui_4=0, $hGui_5=0, $hGui_6=0, $hGui_7=0, $hGui_8=0, $hGui_9=0, $hGui_10=0, _
    $hGui_11=0, $hGui_12=0, $hGui_13=0, $hGui_14=0, $hGui_15=0, $hGui_16=0, $hGui_17=0, $hGui_18=0, $hGui_19=0, $hGui_20=0)
    Local $aParam[2], $tmpHwnd
    For $i = 1 To 20
    $tmpHwnd = Eval('hGui_' & $i)
    If $tmpHwnd = 0 Then ExitLoop
    $aParam[0] = $tmpHwnd
    $aParam[1] = _WinAPI_SetWindowLong($tmpHwnd, $GWL_WNDPROC, DllCallbackGetPtr($hProc_MnuWnd))
    __GUICtrlWindowsList_Manage('del', $aParam)
    Next
    EndFunc ;==>_GUICtrlWindowsList_UnRegister

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

    #region - Helperfunktionen
    ;===============================================================================
    ; Function Name....: __GUICtrlWindowsList_ShutDown
    ; Description......: für alle Fenster __GUICtrlWindowsList_Clear() aufrufen
    ;===============================================================================
    Func __GUICtrlWindowsList_ShutDown()
    For $i = __GUICtrlWindowsList_Manage('getCount') To 0 Step -1
    __GUICtrlWindowsList_Clear($aWndCollection[$i][0], $aWndCollection[$i][1])
    Next
    EndFunc ;==>__GUICtrlWindowsList_ShutDown

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

    ;===============================================================================
    ; Function Name....: __GUICtrlWindowsList_Clear
    ; Description......: original WinProc für das Fenster wiederherstellen
    ;===============================================================================
    Func __GUICtrlWindowsList_Clear($hGui, $hHook)
    _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hHook)
    EndFunc ;==>__GUICtrlWindowsList_Clear

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

    ;===============================================================================
    ; Function Name....: __GUICtrlWindowsList_Manage
    ; Description......: Verwaltung
    ; - Registrieren /Lösche Registrierung der Fenster
    ; - Item Erstellen /Löschen
    ; - Anzahl registrierter Fenster zurückgeben
    ;===============================================================================
    Func __GUICtrlWindowsList_Manage($sCommand, $vParam='')
    Local Static $iCountWnd = 0
    Switch $sCommand
    Case 'add' ; == neues Fenster zur Menüverwaltung "Fenster" hinzufügen (bei Fensterregistrierung) [Parameterarray: hWnd, hHook]
    If $iCountWnd = $MAXNUMBER_WINDOWS Then Return SetError(1,0,$MAXNUMBER_WINDOWS)
    $iCountWnd += 1
    $aWndCollection[$iCountWnd][0] = $vParam[0] ; hWnd
    $aWndCollection[$iCountWnd][1] = $vParam[1] ; hHook
    $aWndCollection[$iCountWnd][2] = '' ; ID MenüItem

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

    Case 'del' ; == Fenster von Menüverwaltung "Fenster" entfernen [Parameter: Fensterhandle]
    Local $index = _ArraySearch($aWndCollection, $vParam)
    If @error Then Return
    __GUICtrlWindowsList_Clear($vParam, $aWndCollection[$index][1])
    _ArrayDelete($aWndCollection, $index)
    ReDim $aWndCollection[$MAXNUMBER_WINDOWS][3]
    $iCountWnd -= 1

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

    Case 'item_make' ; == Menüeintrag erstellen [Parameter: ArrayIndex]
    $aWndCollection[$vParam][2] = GUICtrlCreateMenuItem(WinGetTitle($aWndCollection[$vParam][0]), $ID_MainMenu, Default, 1)
    Return $aWndCollection[$vParam][2]

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

    Case 'item_del' ; == Menüeintrag entfernen [Parameter: Fensterhandle]
    Local $index = _ArraySearch($aWndCollection, $vParam, 1)
    If @error Then Return
    GUICtrlDelete($aWndCollection[$index][2])
    $aWndCollection[$index][2] = ''

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

    Case 'getCount' ; == Anzahl registrierter Fenster [Parameter: OHNE]
    Return $iCountWnd

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

    EndSwitch
    EndFunc ;==>__GUICtrlWindowsList_Manage

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

    ;===============================================================================
    ; Function Name....: __setChecked
    ; Description......: Menüeintrag für aktives Fenster markieren
    ;===============================================================================
    Func __setChecked($iIndex)
    For $i = 1 To __GUICtrlWindowsList_Manage('getCount')
    If $i = $iIndex Then
    GUICtrlSetState($aWndCollection[$i][2], $GUI_CHECKED)
    Else
    If BitAND(GUICtrlRead($aWndCollection[$i][2]), $GUI_CHECKED) Then GUICtrlSetState($aWndCollection[$i][2], $GUI_UNCHECKED)
    EndIf
    Next
    EndFunc ;==>__setChecked

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

    ;===============================================================================
    ; Function Name....: __WinProc
    ; Description......: Callbackfunktion, Messageverwaltung
    ;===============================================================================
    Func __WinProc($hWnd, $iMsg, $iwParam, $ilParam)
    Local Static $iLastMenuID = -1, $sLastMenuTxt = '', $tMENUITEMINFO = DllStructCreate($tagMENUITEMINFO)
    Local $index = _ArraySearch($aWndCollection, $hWnd)
    Local $currHook = $aWndCollection[$index][1], $menuID, $iLast
    If $index = -1 Then Return _WinAPI_CallWindowProc($currHook, $hWnd, $iMsg, $iwParam, $ilParam) ; == nicht Main oder registriertes Fenster

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

    Switch $iMsg
    Case $WM_ACTIVATE ; == wenn Item nicht existiert ==> Erstellen
    Local $iIndexMatch = -1
    For $i = 1 To __GUICtrlWindowsList_Manage('getCount')
    If $aWndCollection[$i][0] = $hWnd Then
    $iIndexMatch = $i
    ExitLoop
    EndIf
    Next
    If $iIndexMatch = -1 Then Return _WinAPI_CallWindowProc($currHook, $hWnd, $iMsg, $iwParam, $ilParam)
    If $aWndCollection[$iIndexMatch][2] = '' Then ; == MenüItem existiert noch nicht
    $menuID = __GUICtrlWindowsList_Manage('item_make', $iIndexMatch)
    __setChecked($iIndexMatch)
    EndIf

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

    Case $WM_SETFOCUS ; == Fenster hat Fokus ==> Checked setzen
    Local $index = _ArraySearch($aWndCollection, $hWnd, 1)
    If $index <> -1 Then __setChecked($index)

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

    Case $WM_KILLFOCUS ; == Fenster verliert Fokus (wurde geschlossen oder HIDE gesetzt)
    Local $index = _ArraySearch($aWndCollection, $hWnd, 1)
    If $index <> -1 Then
    Local $iState = WinGetState($hWnd)
    If $iState = 5 Then ; == Fenster geschlossen (@SW_HIDE gesetzt)
    __GUICtrlWindowsList_Manage('item_del', $hWnd)
    EndIf
    EndIf

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

    Case $WM_MENUSELECT
    Local $ID_Menu = BitAND($iwParam, 0xFFFF) ; == ID des Menüeintrags
    Local $aRet = DllCall('User32.dll', 'int', 'GetMenu', 'hwnd', $hWnd)
    Local $hWndMenu = $aRet[0] ; == Handle des Menüs
    ; $tMENUITEMINFO: 'Size','Mask','Type','State','ID','SubMenu','BmpChecked','BmpUnchecked','ItemData','ptr TypeData','CCH','BmpItem'
    Local $TypeData = DllStructCreate('char[256]')
    DllStructSetData($TypeData, 1, $Buffer_Empty & Chr(0))
    Local $fMask = BitOR($MIIM_ID,$MIIM_DATA,$MIIM_TYPE,$MIIM_SUBMENU)
    DllStructSetData($tMENUITEMINFO, 1, DllStructGetSize($tMENUITEMINFO)) ; == Size
    DllStructSetData($tMENUITEMINFO, 2, $fMask) ; == Mask
    DllStructSetData($tMENUITEMINFO, 3, $MF_STRING) ; == Type
    DllStructSetData($tMENUITEMINFO, 4, $MFS_DEFAULT) ; == State
    DllStructSetData($tMENUITEMINFO,10, DllStructGetPtr($TypeData)) ; == TypeData
    DllStructSetData($tMENUITEMINFO,11, 256) ; == CCH
    $aRet = DllCall('User32.dll', 'int', 'GetMenuItemInfo', 'hwnd', $hWndMenu, 'uint', $ID_Menu, 'bool', 0, 'ptr', DllStructGetPtr($tMENUITEMINFO))
    If $aRet[0] = 1 Then
    $iLastMenuID = $ID_Menu ; == ID speichern falls Item angeklickt wird (Event: WM_UNINITMENUPOPUP)
    $sLastMenuTxt = DllStructGetData($TypeData, 1)
    EndIf

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

    Case $WM_UNINITMENUPOPUP ; == MenüItem wurde angeklickt
    Local $index = _ArraySearch($aWndCollection, $iLastMenuID, 1, 0, 0, 0, 1, 2)
    If $index <> -1 Then
    WinActivate($aWndCollection[$index][0])
    __setChecked($index)
    EndIf

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

    Case Else
    Return _WinAPI_CallWindowProc($currHook, $hWnd, $iMsg, $iwParam, $ilParam)
    EndSwitch
    Return _WinAPI_CallWindowProc($currHook, $hWnd, $iMsg, $iwParam, $ilParam)
    EndFunc ;==>_WinProc
    #endregion - Helperfunktionen

    [/autoit]

    Und hier ein Bsp.:

    Bsp_MenuWindows
    [autoit]

    #Region - TimeStamp
    ; 2011-09-29 19:08:02 v 0.1
    #EndRegion - TimeStamp

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

    #include-once
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include 'MenuWindows.au3'

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

    Opt('GUIOnEventmode', 1)
    Opt("GUIEventOptions",1)

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

    ; Deklaration der Sub-GUI
    Global $hWnd_Kunden = GUICreate("Kunden" , 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
    Global $hWnd_Artikel = GUICreate("Artikel" , 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
    Global $hWnd_Serien = GUICreate("SerienNr", 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_closeWnd', $hWnd_Kunden)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_closeWnd', $hWnd_Artikel)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_closeWnd', $hWnd_Serien)
    _GUICtrlWindowsList_Register($hWnd_Kunden, $hWnd_Artikel, $hWnd_Serien) ; == Alle Subwindows für das "Fenster"-Menü registrieren

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

    ; Deklaration der Main-GUI
    $MainGUI = GUICreate("Main", -1, -1, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_MAXIMIZE))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_closeMain')
    $menu0 = GUICtrlCreateMenu("Menü")
    $m0_item1 = GUICtrlCreateMenuItem("Ende", $menu0)
    GUICtrlSetOnEvent(-1, '_closeMain')
    $menu1 = GUICtrlCreateMenu("Stammdaten")
    $m1_item1 = GUICtrlCreateMenuItem("Kunden Strg+K", $menu1)
    GUICtrlSetOnEvent(-1, '_StrgK')
    $m1_item2 = GUICtrlCreateMenuItem("Artikel Strg+A", $menu1)
    GUICtrlSetOnEvent(-1, '_StrgA')
    $m1_item3 = GUICtrlCreateMenuItem("SerienNr Strg+S", $menu1)
    GUICtrlSetOnEvent(-1, '_StrgS')
    $menu2 = _GUICtrlWindowsList_MenuCreate($MainGUI) ; == registriert Main-GUI und erstellt Menü: "Fenster"
    $menu3 = GUICtrlCreateMenu("?")
    $m2_item1 = GUICtrlCreateMenuItem("Hilfe", $menu3)
    $m2_item2 = GUICtrlCreateMenuItem("Über", $menu3)
    GUISetState(@SW_SHOW, $MainGUI)

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

    While 1
    Sleep(100)
    WEnd

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

    ; Hauptfenster schließen
    Func _closeMain()
    Exit
    EndFunc

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

    ; Unterfenster schließen
    Func _closeWnd()
    GUISetState(@SW_HIDE, @GUI_WinHandle)
    EndFunc

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

    #region - Shortcut Funktionen
    Func _StrgK()
    _RunShortcuts($hWnd_Kunden)
    EndFunc

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

    Func _StrgA()
    _RunShortcuts($hWnd_Artikel)
    EndFunc

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

    Func _StrgS()
    _RunShortcuts($hWnd_Serien)
    EndFunc
    ; per Shortcut gewähltes Fenster einblenden und aktivieren
    Func _RunShortcuts($hWnd)
    GUISetState(@SW_SHOW, $hWnd)
    WinActivate($hWnd)
    EndFunc
    #endregion - Shortcut Funktionen

    [/autoit]

    Dateien

    MenuWindows[0.2].au3 12,4 kB – 460 Downloads Bsp_MenuWindows[0.1].au3 2,5 kB – 419 Downloads Windows_Entry_Menu.au3 3,44 kB – 604 Downloads
  • Verschobene Dateien zählen

    • BugFix
    • 27. Oktober 2006 um 10:02

    Hi,
    probiers mal hiermit:

    [autoit]

    #include <File.au3>
    $Daten = _FileListToArray("C:\Datensicherung\", "*.txt")
    If Not IsArray($Daten) Or $Daten[0] = 0 Then
    MsgBox(0, '', "Es wurden keine Daten kopiert!")
    Exit
    Else
    FileMove("C:\Datensicherung\*.txt", "C:\Direkt\")
    MsgBox(0, '', "Es wurden " & $Daten[0] & "Dateien kopiert!")
    EndIf

    [/autoit]
  • Fensteranordnung

    • BugFix
    • 26. Oktober 2006 um 18:40

    Oh, na klar. Ist ja ein erweiterter Stil.
    Manchmal hat man eben Tomaten auf den Augen :) :hammer:

    Vielen Dank :kiss: :keks:

  • Fensteranordnung

    • BugFix
    • 26. Oktober 2006 um 18:33

    Danke, hatte ich schon probiert. Leider kein Unterschied ob dieser Style dabei ist oder nicht. :(

    [autoit]

    ; MainGUI:
    $MainGUI = GUICreate("Verwaltung", 1000, 700, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU))

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

    ; SubGUI:
    $KundenGUI = GUICreate("Kunden", 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_EX_TOPMOST))

    [/autoit]
  • USB-Stick formatieren

    • BugFix
    • 26. Oktober 2006 um 18:28

    Gabs den Stick als Gratisbeigabe beim Kauf von 6 Sammeltassen? :rofl:

    Die beste Hardwareerkennung hast du bei Kanotix. Wenn da der Stick auch nicht erkannt wird -> Tonne 8o

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™