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

Beiträge von hipfzwirgel

  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 15. April 2025 um 17:24

    Hallo Schnuffel,
    Hallo Gemeinde,

    Der Datenfluss ist folgendermaßen: Ich muss öfter ein sog. 0-Serientest machen. Dafür gibt es eine PDF-Checkliste (eben ein Formular) wo die Kopfdaten des zu testenden Computers und
    verschiedene technische Daten wie z.B. Bios-Version, SDD, etc. ebenfalls in die Checkliste einzutragen sind. Danach ist ein Screenshot via HWiNFO zu erstellen und ein BIOS-Dump (Textdatei).
    Alles zusammen muss dann zu einer Test-Protokoll-PDF gemerged werden, damit dieses auch weitergegeben werden kann. Bedingt durch vorgegebene Layoutanpassungen(z. B. Kopfzeile auf jeder Seite),
    bessere Abbildung des Screenshots, etc. muss ich eben ein Rework der Protokolldatei machen.

    Ich habe mir jetzt damit beholfen, das ich die Seite mit dem Screenshot (DinA4 quer), und das mehrseitige BIOS-Dump als Exceldateien angelegt habe. So kann ich zunächst die Kopfdaten per Autoit befüllen, den Screenshot einfügen und den Inhalt des BIOS-Dump auch in die notwendigen Seiten samt Kopfdaten mit Autoit einfügen und alles zu einer Datei mergen.

    Excel war für mich die bessere Wahl, da dort a) die Zellen leichter zu adressieren sind und b) die Textboxen der Kopfzeile ebenfalls relativ easy zu beschreiben sind und
    ich die BIOS-Angaben wie Bios-Option in die erste Spalte schreiben kann und den dazugehörigen Wert in eine weitere Spalte. Im Original sind dieses werte mittels Tabs formatiert, was in Word nicht wirklich schön ausgesehen hat... Vielen ieben Dank an dieser Stelle für all eure Ideen und Einlassungen. Sie haben mir sehr geholfen. :klatschen:

  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 10. April 2025 um 12:18

    Hallo Schnuffel,

    aber gerade da stößt die UDF ja an ihre Grenzen. Das Testprotokoll soll wie im Template ersichtlich, jetzt auf jeder Seite
    die Kopfzeile haben. Wie du selber gesagt hast, ist es nicht möglich mit der UDF das Template als Basis zu nehmen.
    Ich habe versucht die Grafik (Screenshot von HWiNFO64) in das PDF-Template einzufügen, sodass die Kopfzeile nicht überlagert wird aber das habe ich bis jetzt nicht hinbekommen.
    Auch Chatgpt hat mir keine praktikable Lösung geben können.

    Bisher füllt mein Autoit-Programm auf der ersten Seite (Checkliste als PDF-Formular) die Kopfdaten und verschiedene technische Parameter des
    zu prüfenden Computers aus. Dann wurde der notwendige HWiNFO64-Screenshot per UDF in ein PDF(leeres Blatt ohne Kopfzeile) konvertiert - das mit der Ausrichtung und Größe haben wir ja jetzt
    hinbekommen - aber eben nicht die (ausfüllbare) Kopfzeile. Im letzten Schritt erzeugt mein Proggi aus einem Textfile (Bios-Dump) eine weitere PDF (leider auch ohne die Kopfzeile). Alle 3 PDF-Dateien werden dann via pdftk.exe von meinem Proggi gemergt zu einem Testprotokoll.

    Fazit: Mein Proggi machte bisher alles was notwendig war. Nur leider muss ich eben jetzt überall die Kopfzeile einfügen...;(
    Daher der Gedanke die Seiten 2 mit dem Screenshot und die Seiten mit dem Bios-Dump als Excel zuerstellen, die notwendigen Angaben für die Kopfzeile und die Textdaten des Bios-Dump
    lassen sich via Autoit dort in die Zellen eintragen und die Grafik hoffentlich wie in Word einfügen. Das ganze dann als PDf speichern wird ja hoffentlich auch i-wie gehen...

  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 10. April 2025 um 11:23

    Hallo gmmg,

    das ist richtig und zwar wegen der Möglichkeit dort, dass Word-Dokument als PDF-Formular(befüllbare Textfelder) zu exportieren.
    Geht aber nur wenn das Wordfile im Kompatibilitätsmodus gespeichert ist und die Textfelder auch "alter Art sind".

    @ Schnuffel:

    ich denke ich werde die Seite mit der Grafik, sowie die Seite mit dem Textfile in Excel nachbauen.
    Dort kann ich ja die Zellen dann beschreiben, eine Grafik einfügen und das Textfile via z. B. FileReadArray eben falls in ein Excel Template eintragen.

    Könnte man die Excel-Files dann via Autoit als PDF speichern, so das ich sie dann mergen kann?

  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 9. April 2025 um 16:15

    Hallo Musashi,

    das ist traurig. Da wird dann wohl keine Antwort kommen ;(

  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 9. April 2025 um 12:18

    Hallo Schnuffel,

    ich habe heute morgen im Autoitscript.com eine Nachricht an taietel gesendet mit der Frage nach einem Howto.
    Dort bekam ich den Hinweis eingeblendet, er sei aktiv. Was auch immer das heissen mag... Schauen wir mal ob ich eine Antwort bekomme.
    Wenn ja werde ich sie hier posten. Mein Template ist im Anhang. Es handelt sich um ein PDF-Formular. Die ausfüllbaren Felder sollten erhalten bleiben,
    wenn i-wie möglich. ;)

    Im Vorfeld schon jetzt meinen aller herzlichsten Dank für deine Mühen...

    Dateien

    Checklist_Productive_0-series_Template_CCfürAutoit.pdf 31,13 kB – 23 Downloads
  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 9. April 2025 um 11:00

    Hallo Schnuffel,
    hallo Gemeinde,

    gibt es eigentlich so etwas wie ein Howto für die UDF?

    Ich konnte im Originalbeitrag leider nur die Examples finden aber
    eben keine "Bedienungsanleitung". ich würde gerne ein von mir entworfenes template als Basis-PDF nutzen...
    konnte aber weder in der Func initpdf noch sonst eine Möglichkeit finden dies umzusetzen...

  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 7. April 2025 um 14:28

    Hallo Schnuffel,

    meinen allerherzlichsten Dank an dich für deine Einlassung. Diese hat mir geholfen zu erkennen warum die Änderungen der Parameter
    bei meiner Funktion(die ich höchstwahrscheinlich aus dem o.g. OriginalThread zur UDF oder aus der Hilfe zu meiner von Musashi erwähnten Anfrage heraus generierte),
    keine, bzw. nicht die Auswirkungen hatten, die sie hätten haben sollen. Ich habe es nicht ganz zu Ende analysiert aber die Originalfassung "meiner" Funktion
    hat eine Routine die nicht nur das Öffnen einer Grafikdatei behandelt, sondern auch das Öffnen mehrerer Dateien (was ich aber nicht benötige!).

    AutoIt
    Func _SelectImages()
    
    
    	Local $sImg = FileOpenDialog("Select images", "\\Pfad zur Grafikdatei", "Images (*.jpg;*png)", 4)
    	If @error Then
    		MsgBox(4096, "", "No File(s) choosen")
    	Else
    		Local $aImgs = StringSplit($sImg, "|", 3)
    		;set the properties for the pdf
    		_SetTitle($sNameImg & "Img2PDF.pdf")
    		_SetSubject("Convert image(s) to pdf")
    		_SetKeywords("pdf, AutoIt")
    		;_OpenAfter(True) ;open after generation
    		_SetUnit($PDF_UNIT_PT)
    		;_SetPaperSize("a4")
    		_SetPaperSize("CUSTOM", 1057, 548)
    		_SetZoomMode($PDF_ZOOM_CUSTOM, 90)
    		_SetOrientation($PDF_ORIENTATION_LANDSCAPE)
    		_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
    
    		;initialize the pdf
    		_InitPDF(@AppDataDir & "\HaSc\" & $sNameImg & "Img2PDF.pdf")
    		If UBound($aImgs) <> 1 Then
    			;=== load resources used in pdf ===
    			For $i = 1 To UBound($aImgs) - 1
    				_LoadResImage("img" & $i, $aImgs[0] & "\" & $aImgs[$i])
    			Next
    			;load each image on it's own page
    			For $i = 1 To UBound($aImgs) - 1
    				_BeginPage()
    				;scale image to paper size!
    				_InsertImage("img" & $i, 2, 9, 17, 15) ; Diese Werte hatte ich angepasst, ohne das es eine Auswirkung auf die Grafik hatte
    				_EndPage()
    			Next
    		Else
    			_LoadResImage("taietel", $aImgs[0])
    			_BeginPage()
    			;scale image to paper size!
    			_InsertImage("taietel", 2, 9, 17, 15) ; Diese Werte hatte ich angepasst, ohne das es eine Auswirkung auf die Grafik hatte
    			_EndPage()
    		EndIf
    		;then, finally, write the buffer to disk
    		_ClosePDFFile()
    		ResetPDFSettings()
    		Sleep(300)
    		GUICtrlSetData($EditSysNot, "HW-Summary-file is converted to pdf..." & @CRLF & @CRLF, 1)
    	EndIf
    
    EndFunc   ;==>_SelectImages
    Alles anzeigen

    Ich glaube, dass das Zusammenspiel der UDF mit der in der Funktion verwendeten Array-Techniken schuld sind (genauer die Indizes als Pfadangaben).
    Der Rest des Codes ist, soweit ich das erkennen konnte gleich. Lasse mich aber gerne korrigieren ;)

    Ich kann jetzt durch die neue Func die Grafik-Datei in die ausgewählte Größe 1057 x 548 skalieren und es wird ein ebenso großes PDF erzeugt. ERGO: Fall zunächst gelöst. :party:
    So habe ich die Funktion jetzt angepasst:

    AutoIt
    Func _SelectImages()
    
    	Local $sImg = FileOpenDialog("Select images", "Pfad zur Datei", "Images (*.jpg;*png)", 4)
    	If @error Then
    		MsgBox(4096, "", "No File(s) choosen")
    	Else
    
    		; PDF Properties
    		_SetTitle($sNameImg & "Img2PDF.pdf")         ; Titel
    		_SetSubject("Convert image(s) to pdf")       ; Thema
    		_SetKeywords("pdf, AutoIt")                  ; Stichwörter
    		_OpenAfter(True)                             ; nach Erstellung im Anzeigeprogramm öffnen
    		_SetUnit($PDF_UNIT_PT)                       ; Maßeinheit zur Positionierung setzen
    		;_SetPaperSize("A4")                          ; Papierformat angeben
    		_SetPaperSize("CUSTOM", 1057, 548)            ; 548 = H, 1057 = W
    		_SetZoomMode($PDF_ZOOM_CUSTOM, 80)           ; Ausgabezoomfaktor angeben
    		_SetOrientation($PDF_ORIENTATION_LANDSCAPE)  ; Orientierung Hoch- Querformat ($PDF_ORIENTATION_PORTRAIT / $PDF_ORIENTATION_LANDSCAPE)
    		_SetLayoutMode($PDF_LAYOUT_CONTINOUS)        ; Seiten anhängen
    
    		; Init und Fonts laden
    		_InitPDF(@AppDataDir & "\HaSc\" & $sNameImg & "Img2PDF.pdf")
    		_LoadFontTT("_ARIAL", $PDF_FONT_STD_ARIAL)
    		_LoadFontTT("_ARIALB", $PDF_FONT_STD_ARIAL, $PDF_FONT_BOLD)
    
    		; _LoadResImage( $sImgAlias , $sImage  )
    		_LoadResImage('ImgFile', $sImg)
    
    		_BeginPage()
    
    		; Image einfügen
    		_InsertImage('ImgFile', 1, 1, 1057, 548)
    
    		_EndPage()
    		_ClosePDFFile()
    		ResetPDFSettings()
    		Sleep(300)
    		GUICtrlSetData($EditSysNot, "HW-Summary-file is converted to pdf..." & @CRLF & @CRLF, 1)
    	EndIf
    EndFunc   ;==>_SelectImages
    Alles anzeigen

    Nochmals: Aller herzlichsten DANK an Alle und explizit an Schnuffel.

  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 7. April 2025 um 08:49

    Hallo Gemeinde,

    vielen lieben herzlichen Dank an euch alle. ich werde mir die Woche die Vorschläge, bzw. Denkanstöße anschauen.
    Und Ja, es handelt sich um die MPDF-UDF von taietel

    @ Musahi: Ja ich habe damals das Thema insofern angefragt, als das ich eben eine Möglichkeit gesucht habe, überhaupt erst mal
    mit Autoit PDF Dateien zu erzeugen.
    Jetzt geht es mir eben darum, dass ich das Layout der PDF-Datei anpassen muss. Ich versuche im ersten Schritt dein Vorschlag mit _SetPaperSize.
    Mal sehen ob ich das dann so hinbekomme...

  • png-Datei in PDF umwandeln

    • hipfzwirgel
    • 4. April 2025 um 13:29

    Hallo Gemeinde,

    bisher wandle ich png-Dateien in PDF um, mithilfe der MPDF_UDF.au3 von Mihai Iancu. Das Problem ist für mich nun, dass die UDF die Grafik-Datei
    leider in ein DIN A4-PDF quasi einfügt und somit die Grafik zentriert rein skaliert. Sieht furchtbar aus ;(
    Ich habe versucht die PNG-Datei wenigstens als Landscape einzufügen, war aber nicht erfolgreich.
    Die Option $PDF_ORIENTATION_LANDSCAPE hat keine Auswirkung und ob oder was ich da sonst noch einstellen muss konnte ich nicht heraus finden. ;(

    Ich brauche eine Möglichkeit die Grafik-Datei direkt wie sie ist, in eine PDF umzuwandeln. Hat jemand eine Idee ob das mit der UDF auch geht oder
    könnte ich das per Autoit i-wie anders durchführen?

    Auf Drittanbietertools würde ich gerne verzichten...

  • Aufruf des Eventviewers funktioniert nicht mehr

    • hipfzwirgel
    • 15. Januar 2025 um 16:00

    Hallo Kanashius und Aspirinjunkie,

    vielen lieben Dank für eure Erklärungen. Damit ist mir klar warum das nicht funktioniert. Aber es ist schon sehr seltsam, dass das eben seither funktionierte und dann auf einmal
    und das nach Monaten oder Jahren nicht mehr.

    Im Übrigen, der Code von Moombas mit dem Stringsplit funktioniert. Ich habe jedoch den Pfad zur XMl-Datei angepasst (sprich: die Datei nach C:\Daten kopiert) wegen des Freizeichens im Ordnername "Event Viewer". Das spart eine Menge Anführungszeichen und der Code für die Parameter muss nicht angepasst werden.

    Das ist jetzt die Ausgabe von _DebugArraydisplay:

    Row|Col 0
    # 0|"eventvwr.exe"
    # 1|"/v:C:\daten\Views\View_0.xml"

    Auch für Euch ein gutes und vor allen dingen gesundes neues Jahr 2025 und nochmals vielen herzlichen Dank für die Erklärung :klatschen::klatschen::klatschen:

  • Aufruf des Eventviewers funktioniert nicht mehr

    • hipfzwirgel
    • 15. Januar 2025 um 14:51

    Hallo alle Miteinander,

    zunächst möchte ich allen ein gutes aber vor allem ein gesundes neues Jahr 2025 wünschen und mich für die Beiträge bedanken.

    Leider ist aufgrund der Diskussion der Kern der Frage ins Abseits gerückt:

    Worin besteht der Unterschied im Aufruf von Shellexecute, dass dieser funktioniert wenn ich

    ShellExecute("eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""")

    direkt aufrufe und der Aufruf von

    Shellexecute($aArray[9]) -wobei der Inhalt des Indexes 9 exakt der Zeichenfolge des manuellen Aufrufes entspricht., nicht funktioniert und er die Datei nicht findet...

    Die Debugausgabe von ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : ShellExecute(' & $aArray[9] & ') - '& @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    gibt folgendes Ergebnis zurück:

    @@ Debug(14) : ShellExecute("eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""")

    Das zeigt, dass der Shellexecutebefehl exakt gleich ist, also sollte dieser doch auch funktionieren:?:

    Der Vorschlag von Moombas mit Stringsplit macht ja im Grunde nichts anderes als den String des Indexes in 2 Teile zu zerlegen und diese dann zum gleichen Shellexecutebefehl wie oben zusammenzusetzen...


  • Aufruf des Eventviewers funktioniert nicht mehr

    • hipfzwirgel
    • 20. Dezember 2024 um 11:14

    Hallo Gemeinde,


    VERZWEIFLUNG PUR


    ich habe bereits in 2019 ein AutostartProgramm erstellt, das bisher perfekt funktionierte. Seit Mitte letzter Woche aber lässt sich der Eventviewer nicht mehr starten...


    Ich habe alles was ich nach dem Rechnerstart geöffnet haben möchte in einer Textdatei stehen.

    Auszug:

    E:\Downloads\KeePass-2.57\KeePass.exe
    "C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE"
    .
    .
    .
    .
    .
    .
    "eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml"""


    Rufe ich die Letzte Zeile mit ShellExecute("eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""") auf, funktioniert der Aufruf und die Benutzerdefinierte Ansicht wird geöffnet.

    Rufe ich hingegen den Aufruf mittels vorher ausgelesener Text-Datei auf (FileReadToArray) bekomme ich den Fehler: "Datei nicht gefunden..."


    Code
        #include <AutoItConstants.au3>
        #include <WindowsConstants.au3>
        #include <Debug.au3>
    
    	ShellExecute("eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""")
                     "eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""" ; Inhalt aus $aArray[9]
    
    	$sPfad = "E:\Arbeit\Autostart.txt"
    
    	Local $aArray = FileReadToArray($sPfad)
    	_DebugArrayDisplay($aArray)
    
    	ShellExecute($aArray[9])
    	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aArray[9] = ' & $aArray[9] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    Alles anzeigen

    Der Aufruf aus Zeile 5 funktioniert. In Zeile 6 habe ich den Inhalt des Indexes aufgeführt.
    :?:Hat jemand eine Idee warum die Zeile 13 dennoch nicht funktioniert?
    :?:und warum hat das seit Mitte 2019 funktioniert und seit letzter Woche nicht mehr?????

  • Benutzerinteraktion via Console

    • hipfzwirgel
    • 16. Oktober 2024 um 13:52

    Hallo Gemeinde,

    dank des Schwester-Forums autoitscript.com ist die Lösung gefunden:


    AutoIt
    					_WinAPI_AttachConsole()
    					Local $hConsoleOut = _WinAPI_GetStdHandle(1)
    
    					Local $sMessage = "Enter [y] for deactivating MinimalLength-Option or [n] for cancel:" & @CRLF & @CRLF
    					_WinAPI_WriteConsole($hConsoleOut, $sMessage)
    					Local $hKBProc = DllCallbackRegister(KeyProc, "long", "int;wparam;lparam")
    					$hKBHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKBProc), _WinAPI_GetModuleHandle(0))
    
    					While Sleep(100)
    						Switch $iResp
    							Case 1 ; Userinput n = no
    
    								_WinAPI_WriteConsole($hConsoleOut, "Deactivating the Minimal-Length-Option was denied." & @CRLF & @CRLF & "Program is exiting in 3 seconds")
    								Sleep(3000)
    								Send("{ENTER}")
    								Exit
    							Case 2 ; Userinput y = Yes
    
    								_WinAPI_WriteConsole($hConsoleOut, "Deactivating the Minimal-Length-Option is started")
    								EraseMinlen()  ; Ruft die Funktion EraseMinLen auf
    								ExitLoop
    							Case 3
    								ExitLoop
    						EndSwitch
    					WEnd
    
    					_WinAPI_UnhookWindowsHookEx($hKBHook)
    					DllCallbackFree($hKBProc)
    					
    					;### zusätzlich wird die KeyProc func benötigt... ####
    					
    					Func KeyProc($nCode, $wParam, $lParam)
    
    						If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hKBHook, $nCode, $wParam, $lParam)
    						Local $tKeyHook = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    
    						If $wParam = $WM_KEYDOWN Then
    							Switch $tKeyHook.vkCode
    								Case 0x59, 0x4E ; y / n
    									$iResp = $tKeyHook.vkCode = 0x4E ? 1 : 2
    									Return 1
    								Case 0x0D
    									$iResp = 3
    								Case Else
    									Return 1
    							EndSwitch
    						EndIf
    						Return _WinAPI_CallNextHookEx($hKBHook, $nCode, $wParam, $lParam)
    
    					EndFunc   ;==>KeyProc
    Alles anzeigen

    Damit lässt sich mit der Console wunderbar interagieren :thumbup: auch von hier aus noch ein herzliches Dankeschön
    an Nine von https://www.autoitscript.com/forum/topic/21…exe-with-a-cmd/

  • Einzelnen Tab im Firefox schliessen?

    • hipfzwirgel
    • 10. Oktober 2024 um 09:23

    Hallo Kanashius,

    vielen lieben Dank für dienen Hinweis. Er funktioniert perfekt. :party::part:

    Bitte entschuldige die späte Rückmeldung. Kam erst heute dazu zum testen. :klatschen:

  • Einzelnen Tab im Firefox schliessen?

    • hipfzwirgel
    • 7. Oktober 2024 um 17:16

    Hallo Gemeinde,

    mit der Zeile $HandleHW = WinActivate("[REGEXPTITLE:(?i)(.*Pro Report.*|.*Mozilla Firefox.*)]") ermittle ich das Handle eines Firefoxtabs(der
    Name des Tabs ändert sich leider immer wieder, daher RegExpTitle!) und mit WinClose($HandleHW) schliesse ich ihn. Allerdings wird der Firefox
    dadurch komplett geschlossen und nicht nur der Tab.

    Kann man überhaupt nur einen einzelnen Tab schliessen?

  • Ballontipp bei Programmstart anzeigen an definierter Stelle

    • hipfzwirgel
    • 26. September 2024 um 14:47

    Hallole,

    danke für eure Eingaben.

    @ Moombas: das ich daran nicht selbst gedacht habe...:Face:

    @ water: eigentlich ja. Was uns ja wieder zur Idee von Moombas zurückführt;)

  • Benutzerinteraktion via Console

    • hipfzwirgel
    • 26. September 2024 um 09:14

    Hallo Schnuffel,

    das Proggi muss im Windows OS funktionieren, in Windows PE und eben als ConsolenProgramm um vollautomatisiertes Ändern oder Löschen
    des BIOS-Passwortes(wir reden hier u.U. von mehreren hundert Rechnern...) zu ermöglichen. Die Möglichkeit das Proggi
    mit Commandline-Parametern zu starten wurde bereits in einige unserer IT-Prozesse integriert.

    Die genannte BIOS-Option verhindert das Löschen des BIOS-Passwortes. Also ist die Interaktion mit demjenigen der das Proggi ausführt notwendig.
    Das Seltsame ist ja, das die Interaktion grundsätzlich funktioniert. Nur finde ich keine Lösung die "Einmischung" der Console zu verhindern...

    Im Übrigen kam die Hilfe WinAPi zu benutzen hier aus dem Forum, da ConsoleWrite/Read in diesem Falle ja nicht funktioniert, weil das Proggi ja ein GUI-Programm ist.

    Ich werde nun die Idee von Solvesmart verfolgen und einen weiteren Parameter dafür nutzen.

    Evtl. weiss ja doch noch jemand eine Lösung?

  • Benutzerinteraktion via Console

    • hipfzwirgel
    • 25. September 2024 um 09:47

    Hallo Solve-Smart,

    da das Proggi ja in einer CMD-Console läuft, finde ich sieht es einfach komisch aus, wenn dann eine Inputbox
    aufpoppt. Noch dazu, dass diese warum auch immer, nicht wie in der Hilfe steht default zentriert auf ging, sondern
    i-wo auf dem Desktop...

    hm, das mit dem Parameter wäre eine Möglichkeit. Danke für die Idee.

    Vielleicht hat jemand trotzdem eine Idee wie ich die Benutzereingabe "umleiten" kann...

  • Benutzerinteraktion via Console

    • hipfzwirgel
    • 25. September 2024 um 08:48

    hallo zusammen,

    dann will ich nochmal das Problem beschreiben:

    Mein Programm ist als exe kompiliert und kann sowohl per GUI-Version als auch in einer CMD-Konsole mit Commandline-Parametern
    gestartet werden.

    Nun ist es so, das eine Bios-Option (Minimal lenght) das Löschen des Biospasswortes verhindert. Der User soll also auf Consolenebene
    bestätigen können, dass das Proggi diese Option deaktivieren soll um dann einen Reboot des Rechners durch zu führen.

    Der Stand meines Codings ist, dass nach der Benutzereingabe auf o.a. WinApi-Frage, der Fehler kommt,
    y' is not recognized as an internal or external command, operable program or batch file.

    Mir ist klar warum. Die Eingabe interagiert mit der Console und nicht mit dem ausgeführten Programm. Leider finde ich
    genau hierfür aber keine Lösung. Eine Inputbox habe ich schon getestet, sieht aber echt schlecht aus...

    AutoIt
    _WinAPI_WriteConsole($hConsole, @CRLF & " MinimalLength-Option is set, which prevents the bios lock from being deleted!!! " & @CRLF & " Should the option be deactivated (restarting the computer is then mandatory)?")
    _WinAPI_WriteConsole($hConsole, @CRLF & " Enter [y] for deactivating ML-option or [n] for cancel: " & @CRLF) ; $hConsole ist das Handle der CMD-Session
    
    ; Benutzereingabe lesen
    
    ; Buffer erstellen, um die Eingabe zu speichern
    Local $tBuffer = DllStructCreate("wchar[256]")  ; Buffer für 256 Zeichen
    Local $dwCharsRead = DllStructCreate("dword")   ; Anzahl der gelesenen Zeichen
    
    ; Benutzereingabe über die WinAPI-Funktion ReadConsole lesen
    DllCall("Kernel32.dll", "bool", "ReadConsoleW", "handle", $hConsoleinput, "ptr", DllStructGetPtr($tBuffer), "dword", 256, "ptr", dllStructGetPtr($dwCharsRead), "ptr", 0)
    
    ; $hConsoleinput ist das Inputhandle der CMD-Session (Const $STD_INPUT_HANDLE = -10 _ $hConsoleinput = _WinAPI_GetStdHandle(0)    ; Standard-Input)
    
    ; Anzahl der gelesenen Zeichen abrufen
    Local $iCharsRead = DllStructGetData($dwCharsRead, 1)
    
    ; String aus dem Buffer extrahieren und abschneiden
    Local $sInput = DllStructGetData($tBuffer, 1)
    $sInput = StringLeft($sInput, $iCharsRead - 2)  ; Entferne das abschließende CRLF
    MsgBox(0, "ausgabe Input", $sInput) ; hier kommt kein Inhalt, da die Eingabe eben mit der CMD-Console interagiert.
    Alles anzeigen
  • Benutzerinteraktion via Console

    • hipfzwirgel
    • 24. September 2024 um 12:19

    Hallo Gemeinde,


    eines meiner Programme kann man sowohl mit GUI starten, als auch mit commandline parametern.

    Wird es mit Commandline Parametern gestartet, gebe ich Meldungen des Proggis mit _WinAPI_WriteConsole aus.


    Ich müsste jetzt nachträglich den Benutzer fragen ob er eine Aktion starten möchte oder nicht. Etwa so:

    Code
    _WinAPI_WriteConsole($hConsole, @CRLF & " MinimalLength-Option is set, which prevents the Passwort from being deleted!!! " & @CRLF & " Should the option be deactivated (restarting the computer is then mandatory)?" & @CRLF & "enter y or n:")

    Gibt es eine Möglichkeit via _WinAPI, die Benutzereingabe auszulesen und zu verarbeiten?
    Ich konnte zwar in der MSDN-Bibliothek etwas über ReadConsole finden(https://learn.microsoft.com/en-us/windows/console/readconsole) aber nichts dazu in AutoIt ;(

    p.s.: ConsoleWrite und -read gehen hier nicht, da das Proggi NICHT als Consolen-Anwendung kompiliert ist!

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™