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

Beiträge von lionking

  • PDF Titel auslesen

    • lionking
    • 14. Oktober 2010 um 08:15

    Hallo!

    Ich würde gerne aus PDF-Dateien den Titel (unter Eigenschaften der PDF-Datei im Reader) auslesen, damit ich die Datei anschließend umbenennen kann. Dabei bin ich auf Quick PDF Library Lite gestossen. Leider kenne ich micht mit DLLs und deren Umgang nicht aus.

    Wie müsste ich denn auf die Funktion zugreifen, um die PDF-Eigenschaften auszulesen?
    Vielleicht kann mir ja hier jemand einen Tipp geben, da ich mit der Hilfe alleine nicht zurecht komme.

    http://www.quickpdflibrary.com/help/quickpdf/GetInformation.php

    Das hier war mein Versuch, aber da bekomme ich eine Fehlermeldung:

    [autoit]

    $result = DllCall("C:\Program Files (x86)\Quick PDF Library\Lite\QuickPDFLite0719.dll", "str", "GetInformation(C:\temp\test.pdf)", "2)

    [/autoit]

    Danke.

  • Systemweiter Hotkey

    • lionking
    • 24. September 2010 um 13:47

    Hallo!

    Folgender Fall:

    Ich muss zum verbinden von NW-Laufwerken immer wieder meinen Benutzernamen eingeben. Diese Eingabe wollte ich jetzt über einen Hotkey automatisieren.
    Dazu habe ich einfach das Script aus der Hilfe genommen und den zu sendenden Text angepasst. Leider funktioniert das nicht. Entweder wird der Text gar nicht eingetragen (Hotkey scheint also gar nicht zu funktionieren) oder es werden vorne einige Zeichen abgeschnitten. Der Backslash wird grundsätzlich nicht mit ausgegeben.

    Ich möchte also eigentlich nur den Curser in das Eingabefeld stellen und dann den Hotkey drücken, um das Feld zu befüllen.

    Kann mir da jemand weiterhelfen?

    Danke.

    [autoit]

    ; Press Esc to terminate script, Pause/Break to "pause"

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

    Global $Paused
    HotKeySet("{PAUSE}", "TogglePause")
    HotKeySet("{ESC}", "Terminate")
    HotKeySet("+!d", "ShowMessage") ;Shift-Alt-d

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

    ;;;; Body of program would go here ;;;;
    While 1
    Sleep(100)
    WEnd
    ;;;;;;;;

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

    Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    sleep(100)
    ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
    EndFunc

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

    Func Terminate()
    Exit 0
    EndFunc

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

    Func ShowMessage()
    Send(@ComputerName &"\username")
    EndFunc

    [/autoit]

    getestet unter Win7/x64

  • DLLCall - Wie csp2GetPacket aufrufen?

    • lionking
    • 10. März 2010 um 11:40

    Ich habe jetzt mal den Puffer wie in dem Beispiel angegeben mal mit eingefügt, leider ohne Erfolg.
    Stattdessen stürzt AutoIT ab :(
    Ist sonst noch was zu beachten, um die Daten aus dem DLLStruct zurück zu bekommen?
    Vielleicht hilft ja der C-Code, der oben in der Doku steht, dem Problem auf die Spur zu kommen.

  • DLLCall - Wie csp2GetPacket aufrufen?

    • lionking
    • 9. März 2010 um 22:22

    Hallo!

    Ich möchte mit Hilfe von AutoIT einen Barcode-Scanner auslesen. Dieser Hat einen internen Speicher, der die Codes speichert. Über die "Csp2.dll" kann man Befehle an den Scanner schicken. Einen einfachen DLLCall, der nur die Anzahl der gelesenen Barcodes zurückgibt, habe ich schon hinbekommen.

    Wie aber spreche ich diese DLL-Funktion an:

    Zitat

    Get Packet
    NoMangle long DLL_IMPORT_EXPORT csp2GetPacket ( char szBarData[],
    long nBarcodeNumber,
    long nMaxLength )
    The csp2GetPacket() function copies the packet data to the users allocated memory
    space from the DLL. The user will need to interpret the packet structure to obtain
    barcode information and timestamp. Please refer to Symbol Document CS1504 Data
    Upload Format for a description of the packet formats. The function will only copy up to
    the nMaxLength characters. If the barcode is longer it will be truncated. The user must
    specify which barcode they want (refer to csp2ReadData()) and the maximum length of
    the allocated space they have reserved.
    Where:
    szBarData is a character array the user has allocated to hold the barcode
    data. This is not a null terminated string. The amount of data actually returned
    in the array is the return value of the function call. Note that this data may be
    non-ASCII values.
    nBarcodeNumber is which barcode stored in the szCspBcString[ ] will be
    returned. Please note that this number is a zero-based index. For example if
    csp2ReadData() returned the number 5. Then the barcode indexes would be 0,
    1, 2, 3, and 4.
    nMaxLength is the length of the allocated space. If nMaxLength is set to
    DETERMINE_SIZE, the function will return the length of the packet without
    copying any data. Note, if the user specifies the space is bigger than was
    actually allocated, unpredictable results will occur.
    Returned Status:
    length of packet – (Not the number of bytes written)
    BAD_PARAM if the user requested a packet that does not exist.
    Note: The value returned by this function will reflect the value of the parameter in the
    device at the time of the last call to the csp2ReadData() function. In order to receive an
    accurate current parameter value, be sure that the call to csp2ReadData() function is
    current.
    Example:
    long nBarcodes;
    long nLen;
    long i;
    char aByteBuffer[100];
    // Open the com port
    CS1504 32-bit DLL for Visual C/C++
    21
    if (csp2Init(COM1) == STATUS_OK) {
    // Read the data from CSP Device
    nBarcodes = csp2ReadData();
    if (nBarcodes > 0) {
    for (i=0; i<nBarcodes; i++) {
    // Barcodes available
    nLen = csp2GetPacket(aByteBuffer, i, sizeof(aByteBuffer));
    // Check to if we received the entire barcode
    if (nLen <= sizeof(aByteBuffer)) {
    // We have the entire bar code.
    // Process Barcode
    }
    else {
    // We need to supply a larger buffer
    ASSERT(0);
    }
    }
    }
    }

    Alles anzeigen

    Das habe ich mir mit Unterstützung der Hilfe mal gestrickt, ist aber wohl völlig falsch:

    [autoit]

    $wert = DllStructCreate("char,long,long")
    DllCall($dll,"long","csp2GetPacket","ptr",DllStructGEtPtr($wert))
    $1 = DllStructGetData($wert,1)
    $2 = DllStructGetData($wert,2)
    $wert = 0
    MsgBox (0, "Packet", $1 & $2)

    [/autoit]

    Kann mir hier bitte jemand helfen?

  • Software installiern bei Logon

    • lionking
    • 15. April 2009 um 10:47

    Ich denke, ich habe zwei Fehler gemacht.

    Zum einen Vergleiche ich mit 1 statt mit 0 und zum anderen setzte ich in der Schleife $x immer wieder auf 0. Wenn jetzt also auf dem Rechner breits die Installation gelaufen war, der Rechner aber nicht an letzter Stelle der ini stand, wurde $x immer wieder auf 0 gesetzt, was zur Folge hatte, dass nochmals installiert wurde.

    Hier nun die abgeänderte Fassung:

    [autoit]

    $var1 = IniReadSection("install.ini", "Computer")
    $var2 = IniReadSection("install.ini", "Options")
    If @error Then
    Exit
    Else
    For $a = 1 To $var2[0][0]
    If $var2[$a][0] == "Pfad" Then
    $p=$var2[$a][1]
    EndIf
    If $var2[$a][0] == "Command" Then
    $c=$var2[$a][1]
    EndIf
    Next

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

    $x = 0
    For $i = 1 To $var1[0][0]
    If $var1[$i][1] == @ComputerName Then
    $x=$x+1
    EndIf
    Next

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

    if $x == 0 Then
    RunAsWait("admin", @ComputerName, "password", 0, @ComSpec & ' /c ' & $p & $c, "", @SW_HIDE)
    IniWrite("install.ini", "Computer", @ComputerName, @ComputerName)
    EndIf
    Exit
    EndIf

    [/autoit]
  • Software installiern bei Logon

    • lionking
    • 15. April 2009 um 08:20

    Hallo!

    Um Software automatisch verteilen zu können, habe ich folgendes Programm geschrieben, dass auf den Rechnern nach der Anmeldung ausgeführt wird.
    Die Logon-Scripts werden über Samba per Batch aufgerufen.

    So sollte es laufen:
    Das Programm liest aus einer ini-Datei das Laufwerk und den Behfehlsaufruf aus.
    Danach findet ein Abgleich des Rechnernamens statt. Steht der Rechnername bereits in der ini-Datei, soll keine Installation erfolgen. Fehlt der Rechnername, soll die angegebene Software installiert werden und danach der Rechnername in die ini-Datei eingetragen werden.

    Alles läuft über das Netzwerk, sprich alle Daten liegen auf Servern, die benötigte Freigabe ist als Laufwerk verbunden.

    [autoit]

    $var1 = IniReadSection("install.ini", "Computer")
    $var2 = IniReadSection("install.ini", "Options")
    If @error Then
    Exit
    Else
    For $a = 1 To $var2[0][0]
    If $var2[$a][0] == "Pfad" Then
    $p=$var2[$a][1]
    EndIf
    If $var2[$a][0] == "Command" Then
    $c=$var2[$a][1]
    EndIf
    Next

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

    For $i = 1 To $var1[0][0]
    $x=0
    If $var1[$i][1] == @ComputerName Then
    $x=$x+1
    EndIf
    Next

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

    if $x <>1 Then
    RunAsWait("admin", @ComputerName, "password", 0, @ComSpec & ' /c ' & $p & $c, "", @SW_HIDE)
    IniWrite("install.ini", "Computer", @ComputerName, @ComputerName)
    EndIf
    Exit
    EndIf

    [/autoit]

    Problem ist nun, dass der Abgleich der Rechnernamen anscheinend nicht richtig funktioniert. Jedenfalls konnte ich beobachten, dass das Programm die Software installiert, obwohl der Rechnername bereits in der ini vorhanden war.

    Hier noch der Aufbau der ini-Datei:

    Code
    ;Einstellungen zur Installierenden Software.
    ;Der Insatllationsbefehl wird aus Pfad und Command zusammengesetzt, daher immer z.B. den abschließenden \ mit angeben.
    [Options]
    Pfad=
    Command=msiexec.exe /i \\server\adobe_reader\adobe910\AcroRead.msi TRANSFORMS=" \\server\adobe_reader\adobe910\adobe.mst" /qn
    
    
    ;Auf diesen Rechnern wurde das Script bereits ausgeführt
    [Computer]
    Computer1=Computer1

    Was könnte das Problem sein? Wer kann helfen?

    Danke.

  • RunAsWait verwenden

    • lionking
    • 20. November 2008 um 12:09

    Ich konnte dank euerer Hilfe und einiger anderer Beiträge im Forum das Problem nun lösen.
    Es hat anscheinend wirklich an dem falschen Parameter "/f" gelegen, der das Problem verursacht hat.
    Komisch dabei war, dass die gleiche Zeile als Batch funktioniert hat.

    Hier jetzt mal der Code für den Aufruf mit RunAsWait:

    [autoit]

    $drucker = $arCSV[$y]
    $drucker1 = $drucker[7] ;Freigabename ermitteln
    $drucker2 = $drucker[2] ;Druckername ermitteln
    $drucker3 = $drucker[13];Treiber-Pfad ermitteln
    $drucker4 = $drucker[5] ;IP ermitteln
    $drucker5 = $drucker[3] ; Abteilung ermitteln
    RunAsWait("admin", @ComputerName, "passwort", 0, @ComSpec & ' /c ' & '%systemroot%\system32\cscript.exe %systemroot%\system32\prnport.vbs -a -r IP_' & $drucker4 & ' -h 10.0.0.20 -o raw -n 9100')
    RunASwait("admin", @ComputerName, "passwort", 0, "rundll32.exe printui.dll,PrintUIEntry /if /b " & chr (34) & $drucker2 & " (" & $drucker[1] & ")" & chr (34) & " /f " & chr (34) & $drucker3 & "oemsetup.inf" & chr (34) & " /r " & chr (34) & "IP_" & $drucker4 & chr (34) & " /m " & chr (34) & $drucker2 & chr (34) & " /Y") ;Drucker installieren, warten bis Vorgang abgeschlossen

    [/autoit]

    Danke für eure Hilfe.

  • RunAsWait verwenden

    • lionking
    • 20. November 2008 um 08:31

    Das mit \\Server\Freigabe wäre sicher möglich, würde mich aber auf genau diesen Server beschränken, was aber nicht der Fall sein soll.

    Alternativ wäre, folgenden Befehl mit AutoIT ausführen zu lassen:

    Code
    rundll32 printui.dll,PrintUIEntry /if /b "RICOH Aficio SP 4100N PCL 6" /f "Z:\Treiber\Drucker\Ricoh\SP4100N\oemsetup.inf" /r "IP_172.20.101.114" /m "RICOH Aficio SP 4100N PCL 6" /Y

    Ich habe es nicht geschafft, diesen Befehl so zu gestalten, dass ich ihn mit RunWait laufen lassen könnte.
    Liegt wohl daran, dass die Anführungszeichen nicht richtig umgesetzt werden. Ich habe versuchte, diese mit CHR (34) zu ersetzen, was aber immer zu einer Fehlermeldung geführt hat.

    [autoit]

    Runwait("rundll32.exe printui.dll,PrintUIEntry /if /b " & Chr (34) & $drucker2 & Chr (34) & " \f " & Chr (34) & $drucker3 & "oemsetup.inf" & Chr (34) & " /r " & Chr (34) & "IP_" & $drucker4 & Chr (34) & " /m " & Chr (34) & $drucker2 & Chr (34) & " /Y")

    [/autoit]

    Daher habe ich diesen Befehl in eine Batch ausgegliedert. Wenns im Script selbst irgendwie geht, wäre das sogar noch besser.

  • RunAsWait verwenden

    • lionking
    • 20. November 2008 um 08:19

    Hallo!

    Ich habe eine Frage zum Befehl RunAsWait.
    Ich versuche eine externe Batchdatei mit Admin-Rechten aufzurufen. Dabei werden einige Parameter übergeben.

    [autoit]

    RunAsWait("admin", @ComputerName, "passwort", 0, "ricoh.cmd " & Chr (34) & $drucker2 & Chr (34) & " " & Chr (34) & $drucker3 & "oemsetup.inf" & Chr (34) & " " & Chr (34) & "IP_" & $drucker4 & Chr (34), @SystemDir)

    [/autoit]


    Anscheinend wird die Batch aber nicht gefunden, wenn ich den Benutzer wechsle, da es mit RunWait funktioniert.
    Wie kann ich den aktuelle gültigen Pfad (auch Netzwerk) mitgeben?

  • GUI dynamisch erstellen

    • lionking
    • 1. Oktober 2008 um 08:45

    Herzlichen Dank - läuft jetzt einwandfrei.

  • GUI dynamisch erstellen

    • lionking
    • 1. Oktober 2008 um 07:42

    Hier mal mein kompletter Code, da stecken bestimmt einige Anfängerfehler drin, aber die anderen Funktionen arbeiten soweit.
    Eine Überprüfung der Eingaben usw. habe ich nicht eingeplant, da es nur für meine interne Verwendung gedacht ist.

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=Printer 2.ico
    #AutoIt3Wrapper_Compression=4
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GuiConstants.au3>
    #include <GuiListView.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>

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

    ;Drucker-Daten aus drucker.csv einlesen
    ;Format:
    ;Nr.;Drucker;Abt.;Standort;IP;SAP-Name;Freigabe-Name;Bemerkung
    Dim $arCSV
    $csvFile = "drucker.csv"
    _FileReadToArray($csvFile, $arCSV)

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

    ;Felder am ";" trennen
    For $i = 1 To $arCSV[0]
    $arCSV[$i] = StringSplit($arCSV[$i], ";")
    Next

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

    opt('MustDeclareVars', 1)
    Dim $listview, $Btn_Get, $Btn_Exit, $Btn_Help, $Btn_Printer, $Icon1, $msg, $i, $Status, $ret, $is_Checked, $SS_NOTIFY, $WS_GROUP, $SS_SUNKEN, $SS_CENTER, $drucker, $drucker1, $y, $server, $serverini, $radio1, $radio2

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

    ;Vorauswahl Server aus drucker.ini auslesen
    $serverini = IniRead("drucker.ini", "Server", "Servername", "Server2")

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

    ;GUI erstellen
    GUICreate("Druckerinstallation", 900, 800) ; Name, Größe GUI
    GUISetIcon("Printer 2.ico") ;Icon einbinden
    GUICtrlCreateLabel("Druckerinstallation", 10, 10, 500, 25) ; Überschrift
    GUICtrlSetFont(-1, 18, 400, 0, "Arial") ;Format Überschrift

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

    ;Radiobuttons für Serverauswahl
    GUICtrlCreateLabel("Server:", 675, 22, 35, 25)
    $radio1 = GUICtrlCreateRadio ("Server1", 720, 20, 80, 20)
    $radio2 = GUICtrlCreateRadio ("Server2", 820, 20, 80, 20)

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

    ;Vorbelegen der Radiobuttons je nach Eintrag in drucker.ini
    Switch $serverini
    Case "Server1"
    GUICtrlSetState($radio1, $GUI_CHECKED)
    Case "Server2"
    GUICtrlSetState($radio2, $GUI_CHECKED)
    EndSwitch

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

    ;Liste aufbauen
    $listview = GUICtrlCreateListView("#|Modell |Abteilung|Standort |IP-Adresse |SAP-Name |Freigabe-Name |Bemerkung ", 10, 40, 880, 720) ;Listenkopf
    GUICtrlSendMsg($listview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($listview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($listview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_CHECKBOXES, $LVS_EX_CHECKBOXES)

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

    ;Einträge in Liste schreiben, dabei erste Zeile der drucker.csv wegen Spaltenköpfen ignorieren
    For $x = 2 to $arCSV[0]
    $i = $arCSV[$x]
    GUICtrlCreateListViewItem($x-1 & "|" & $i[2] & "|" & $i[3] & "|" & $i[4] & "|" & $i[5] & "|" & $i[6] & "|" & $i[7]& "|" & $i[8], $listview)
    Next

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

    ;Buttons platziern
    _GUICtrlListView_SetColumnWidth ($listview, 0, 100)
    $Btn_Get = GUICtrlCreateButton("Installieren", 10, 765, 90, 30) ;Button Installieren
    ;$Btn_Help = GUICtrlCreateButton("Drucker", 620, 765, 70, 30) ; Button Drucker
    $Btn_Help = GUICtrlCreateButton("Hilfe", 720, 765, 70, 30) ; Button Hilfe
    $Btn_Exit = GUICtrlCreateButton("Beenden", 820, 765, 70, 30) ;Button Beenden

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

    ;Statuszeile für Hinweise
    $Status = GUICtrlCreateLabel("Bitte Drucker wählen", 370,780, 200, 20, BitOR($SS_SUNKEN, $SS_CENTER))
    GUISetState()

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

    ;Abfrage
    While 1
    $msg = GUIGetMsg()

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

    ;Welcher Radiobutton ist markiert?
    For $i = $Radio1 To $Radio2
    If GUICtrlRead($i) = $GUI_CHECKED Then
    Switch $i
    Case $Radio1 ;Button 1 aktiv
    $serverini = "Server1"
    Case $Radio2 ;Button 2 aktiv
    $serverini = "Server2"
    EndSwitch
    ExitLoop
    EndIf
    Next

    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $Btn_Exit ;Programm mit Beenden oder X beenden
    ExitLoop

    Case $msg = $Btn_Help ;Hilfe aufrufen
    MsgBox(0, "Hilfe", "Druckerinstallation" & @CRLF & @CRLF & "Ermöglicht das Installieren der an den Servern 'Server1' und 'Server2' freigegebenen Netzwerkdrucker." & @CRLF & @CRLF & "1. Server wählen" & @CRLF & "2. Drucker wählen" & @CRLF & "3. Installieren" & @CRLF & @CRLF & "Die Daten werden aus der Datei 'drucker.csv' geholt, welche folgendes Format (Kopfzeile) hat:" & @CRLF & @CRLF & "Nr.;Drucker;Abt.;Standort;IP;SAP-Name;Freigabe-Name;Bemerkung"& @CRLF & @CRLF & "Trennung durch Semikolon, keine Anführungszeichen für den Text!"& @CRLF)

    Case $msg = $Btn_Printer ;Drucker aufrufen
    ;ShellExecute("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")

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

    Case $msg = $Btn_Get ;Installieren
    GUICtrlSetData($Status, "Bitte Drucker wählen ") ; Status setzen
    For $x = 0 to $arCSV[0]-2 ;alle Listeneinträge überprüfen - beginnend bei 0!
    Local $is_Checked = _GUICtrlListView_GetItemChecked ($listview, $x)

    If $is_Checked = TRUE Then ;Checkbox gesetzt?
    GUICtrlSetData($Status, "Drucker wird installiert")
    $y = $x+2
    $drucker = $arCSV[$y]
    $drucker1 = $drucker[7] ;Freigabename ermitteln
    If $drucker1 = "" Then ;Fehlt der Freigabename?
    MsgBox(48, "Fehler", "Freigabe-Name fehlt!")
    Else
    Runwait("rundll32 printui.dll,PrintUIEntry /in /n \\" & $serverini & "\" & $drucker1) ;Drucker installieren, warten bis Vorgang abgeschlossen
    MsgBox(0, "Fertig", "Drucker installiert: \\" & $serverini & "\" & $drucker1)
    EndIf
    Else
    GUICtrlSetData($Status, "Bitte Drucker wählen") ; Status setzen
    EndIf
    Next
    IniWrite("drucker.ini", "Server", "Servername", $serverini) ; $Radiobutton wird in die Ini Datei geschrieben
    EndSelect
    WEnd
    Exit

    [/autoit]

    Schonmal Danke.

  • GUI dynamisch erstellen

    • lionking
    • 30. September 2008 um 21:29

    Herzlichen Dank - echt spitze Unterstützung!

    Eine Frage hätte ich noch:

    Ich habe einen Button eingebaut, der mir alle Drucker anzeigen soll (Systemsteuerung -> Drucker)

    [autoit]

    Case $msg = $Btn_Printer ;Drucker aufrufen
    run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")

    [/autoit]

    Dieser Button öffnet mir das Fenster jetzt unendlich oft, bis es von Fehlermeldungen nur so wimmelt.

    Wie kann ich erreichen, dass dieses Fenster geöffnet wird, ich aber meine GUI weiterhin bedienen kann, sprich nicht in einen Wait-Zustand komme?

    Danke.

  • GUI dynamisch erstellen

    • lionking
    • 29. September 2008 um 21:43

    Dank dieses Hinweises bin ich ein gewaltiges Stück weitergekommen - Danke.

    Ein Problem habe ich jetz mit der Listview noch.
    Wie bekomme ich einen Wert zurück, welches Element markiert wurde?
    Mein derzeitiger Code hat da wohl einen Fehler.

    Grundsätzlich soll es möglich sein, mehrere Felder zu markieren, die dann jeweils abefragt werden.
    Ist die Checkbox aktiv, möchte ich für den markierten Eintrag eine Aktion ausführen (Druckerinstallation per rundll).

    [autoit]

    #include <GuiConstants.au3>
    #include <GuiListView.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>

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

    Dim $arCSV
    $csvFile = "array.csv"
    _FileReadToArray($csvFile, $arCSV)

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

    For $i = 1 To $arCSV[0]
    $arCSV[$i] = StringSplit($arCSV[$i], ";")
    Next

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

    opt('MustDeclareVars', 1)
    Dim $listview, $Btn_Get, $Btn_Exit, $msg, $Status, $ret, $SS_SUNKEN, $SS_CENTER, $is_Checked
    GUICreate("Druckerinstallation", 900, 800)

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

    GUICtrlSetFont (-1,20, 400, 4, "MS Sans Serif")
    GUICtrlCreateLabel("Druckerinstallation", 10, 10, 200, 20)

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

    $listview = GUICtrlCreateListView("#|Modell|Abt.|Standort|IP|Name|Freigabe", 10, 40, 880, 720)
    GUICtrlSendMsg($listview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($listview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($listview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_CHECKBOXES, $LVS_EX_CHECKBOXES)

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

    For $x = 1 to $arCSV[0]
    $i = $arCSV[$x]
    GUICtrlCreateListViewItem($x & "|" & $i[1] & "|" & $i[2] & "|" & $i[3] & "|" & $i[4] & "|" & $i[5] & "|" & $i[6], $listview)
    Next

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

    _GUICtrlListView_SetColumnWidth ($listview, 0, 100)
    $Btn_Get = GUICtrlCreateButton("Installieren", 10, 765, 90, 30)
    $Btn_Exit = GUICtrlCreateButton("Exit", 820, 765, 70, 30)
    $Status = GUICtrlCreateLabel("", 200,780, 400, 20, BitOR($SS_SUNKEN, $SS_CENTER))

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

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $Btn_Exit
    ExitLoop
    Case $msg = $Btn_Get
    GUICtrlSetData($Status, $is_Checked)
    Local $is_Checked = _GUICtrlListView_GetItemChecked ($listview, 1)
    If ($is_Checked <> $LV_ERR) Then
    If $is_Checked = TRUE Then
    GUICtrlSetData($Status, $is_Checked)
    Else
    GUICtrlSetData($Status, $is_Checked)
    EndIf
    EndIf
    EndSelect
    WEnd
    Exit

    [/autoit]

    Dazu noch meine array.csv:

    Code
    1. Drucker;1. Abteilung;1. Standort;1. IP;1. SAP;1. Freigabe
    2. Drucker;2. Abteilung;2. Standort;2. IP;2. SAP;2. Freigabe
    3. Drucker;3. Abteilung;3. Standort;3. IP;3. SAP;3. Freigabe
    4. Drucker;4. Abteilung;4. Standort;4. IP;4. SAP;4. Freigabe
  • $LVS_EX_CHECKBOXES

    • lionking
    • 29. September 2008 um 21:02

    Danke, da wäre ich nicht draufgekommen.

  • $LVS_EX_CHECKBOXES

    • lionking
    • 29. September 2008 um 18:22

    Kann es sein, dass dieses Beispiel-Script mit der aktuellen Version (3.2.12.0) nicht mehr läuft?
    Habe jedenfalls eine Fehlermeldung bekommen:
    [Blockierte Grafik: http://www.autoit.de/file:///C:/DOKUME%7E1/JRGENH%7E1/LOKALE%7E1/Temp/moz-screenshot-3.jpg]---------------------------
    AutoIt Error
    ---------------------------
    Line 18 (File "c:\autoit\test.au3"):

    _GUICtrlListViewSetColumnWidth ($listview, 0, 100)
    ^ ERROR

    Error: Unknown function name.


    Auf einem anderen Rechner mit älterer AutoIT-Installation ist das Script nämlich gelaufen

  • GUI dynamisch erstellen

    • lionking
    • 28. September 2008 um 16:16

    Hallo!

    Folgendes Problem:
    Aus einer Datei lese ich die Zeilen in ein Array aus. Diese Zeilen möchte ich jetzt mit Checkboxen versehen und in einer GUI anzeigen.

    $check1 = GUICtrlCreateCheckbox($x[1], 10, 10, 120, 20)

    Wie kann ich die Variable $check dynamisch erstellen ($check1, $check 2, ...) und wie bekomme ich alle Zeilen des Arrays dynamisch dargestellt?

    Das Ergebnis in der GUI sollte dann wie folgt aussehen (#=Checkbox):

    # Zeile 1
    # Zeile 2
    # Zeile 3
    # ... (soviele Zeilen es eben gibt)

    Danke.

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™