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

  • Programm Code Zeile in Variable speichern

    • BugFix
    • 9. Mai 2021 um 19:59

    Dafür nutzt man Funktionen.

  • Struktur _CONSOLE_FONT_INFOEX in AutoIt darstellen

    • BugFix
    • 9. Mai 2021 um 19:48
    Zitat von Bitnugger

    Ob die ersten beiden Zeilen etwas in einer UDF zu suchen haben, lasse ich mal dahingestellt... ich habe sie bei mir jedenfalls ausdokumentiert.

    Danke für den Hinweis.

    Das sehe ich ebenso. Stattdessen ist ein #include-once angebracht wegen des WinAPI-Includes.

    Ebenfalls aufgefallen ist mir in der Struktur: $tagCONSOLE_FONT_INFOEX

    wchar[32] FaceName;

    sollte eigentlich

    wchar FaceName[32];

    sein.

    Bin mir nicht sicher ob es funktionell falsch ist, aber ich kenne es eigentlich nur in der letzteren Schreibweise.

  • Struktur _CONSOLE_FONT_INFOEX in AutoIt darstellen

    • BugFix
    • 9. Mai 2021 um 10:20

    Ich bin mal wieder über meine vor Urzeiten angefangene Console-UDF gestolpert. Damals hatte ich nur einige rudimentäre Umsetzungen gemacht. Nun wollte ich die gesamte Console API in Angriff nehmen und bin dabei über folgende Struktur gestolpert:

    Code: https://docs.microsoft.com/en-us/windows/console/console-font-infoex
    typedef struct _CONSOLE_FONT_INFOEX {
    ULONG cbSize;
    DWORD nFont;
    COORD dwFontSize;
    UINT  FontFamily;
    UINT  FontWeight;
    WCHAR FaceName[LF_FACESIZE];
    } CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;

    Das würde ich in AutoIt erstmal so umsetzen:

    AutoIt
    ; struct _COORD
    Global $tag_COORD = 'SHORT X;SHORT Y;'
    
    ; struct _CONSOLE_FONT_INFOEX
    Global $tag_CONSOLE_FONT_INFOEX = _
    'ULONG cbSize;' & _
    'DWORD nFont;' & _
    'STRUCT;' & $tag_COORD & 'ENDSTRUCT;' & _  ; dwFontSize
    'UINT  FontFamily;' & _
    'UINT  FontWeight;' & _
    'WCHAR FaceName[LF_FACESIZE];'
    Alles anzeigen

    Unklar ist mir: WCHAR FaceName[LF_FACESIZE];

    Als Bsp. für eine Umsetzung in C# habe ich hier was gefunden:

    Code
    // Set console font to Lucida Console.
    CONSOLE_FONT_INFO_EX newInfo = new CONSOLE_FONT_INFO_EX();
    newInfo.cbSize = (uint) Marshal.SizeOf(newInfo);
    newInfo.FontFamily = TMPF_TRUETYPE;
    IntPtr ptr = new IntPtr(newInfo.FaceName);
    Marshal.Copy(fontName.ToCharArray(), 0, ptr, fontName.Length);
    // Get some settings from current font.
    newInfo.dwFontSize = new COORD(info.dwFontSize.X, info.dwFontSize.Y);
    newInfo.FontWeight = info.FontWeight;
    SetCurrentConsoleFontEx(hnd, false, newInfo);

    Die interessanten Zeilen für FaceName sind hier:

    Code
    IntPtr ptr = new IntPtr(newInfo.FaceName);
    Marshal.Copy(fontName.ToCharArray(), 0, ptr, fontName.Length);

    Daraus würde ich jetzt schließen, dass ich das so umzusetzen habe:

    AutoIt
    ; statt: 
    'WCHAR FaceName[LF_FACESIZE];'
    ; jetzt:
    'ptr FaceName;'
    
    ; und zur Laufzeit
    $fontName = 'Consolas' ; als Bsp. - bzw. Ergebnis von "GetCurrentConsoleFont()"
    $tWCHARarray = DllStructCreate('wchar FontName[' & StringLen($fontName) & '];')
    $tWCHARarray.FontName = $fontName
    
    $t_CONSOLE_FONT_INFOEX = DllStructCreate($tag_CONSOLE_FONT_INFOEX)
    $t_CONSOLE_FONT_INFOEX.FaceName = DllStructGetPtr($tWCHARarray)
    Alles anzeigen

    Habe ich das soweit richtig interpretiert?


    Ein zweiter Punkt:

    Die Struktur enthält die eingebettete Struktur COORD. Durch das Integrieren mittels: 'STRUCT;' & $tag_COORD & 'ENDSTRUCT;' geht mir ja der Feldname dwFontSize verloren.

    In C# wird in dem Bsp. auf X in dwFontSize mit info.dwFontSize.X zugegriffen. In meiner Umsetzung wäre das im Moment: $t_CONSOLE_FONT_INFOEX.X Grundsätzlich kein Problem, solange nicht eine zweite eingebettete Struktur mit denselben Feldern auftaucht.

    Aber genau das passiert z.B. in folgender Struktur:

    Code
    typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
      COORD      dwSize;
      COORD      dwCursorPosition;
      WORD       wAttributes;
      SMALL_RECT srWindow;
      COORD      dwMaximumWindowSize;
    } CONSOLE_SCREEN_BUFFER_INFO;

    Wie kann ich das lösen? Bleibt da nur der Zugriff über den Index?

    EDIT:

    Oder so?

    AutoIt
    Global $tag_SMALL_RECT = _
    'SHORT Left;' & _
    'SHORT Top;' & _
    'SHORT Right;' & _
    'SHORT Bottom;'
    
    Global $tag_CONSOLE_SCREEN_BUFFER_INFO = _
    'PTR  dwSize;' & _
    'PTR  dwCursorPosition;' & _
    'WORD wAttributes;' & _
    'PTR  srWindow;' & _
    'PTR  dwMaximumWindowSize;'
    
    Global $t_dwSize = DllStructCreate($tag_COORD)
    Global $t_dwCursorPosition = DllStructCreate($tag_COORD)
    Global $t_srWindow = DllStructCreate($tag_SMALL_RECT)
    Global $t_dwMaximumWindowSize = DllStructCreate($tag_COORD)
    
    Global $t_CONSOLE_SCREEN_BUFFER_INFO = DllStructCreate($tag_CONSOLE_SCREEN_BUFFER_INFO)
    $t_dwSize.X = ...
    $t_dwSize.Y = ...
    $t_CONSOLE_SCREEN_BUFFER_INFO.dwSize = DllStructGetPtr($t_dwSize)
    $t_dwCursorPosition.X = ...
    $t_dwCursorPosition.Y = ...
    $t_CONSOLE_SCREEN_BUFFER_INFO.dwCursorPosition = DllStructGetPtr($t_dwCursorPosition)
    $t_srWindow.Left = ...
    $t_srWindow.Top = ...
    $t_srWindow.Right = ...
    $t_srWindow.Bottom = ...
    $t_CONSOLE_SCREEN_BUFFER_INFO.srWindow = DllStructGetPtr($t_srWindow)
    $t_dwMaximumWindowSize.X = ...
    $t_dwMaximumWindowSize.Y = ...
    $t_CONSOLE_SCREEN_BUFFER_INFO.dwMaximumWindowSize = DllStructGetPtr($t_dwMaximumWindowSize)
    
    
    ; Und aus einer befüllten Struktur dann lesen:
    ; get dwSize
    Global $tReadSize = DllStructCreate($tag_COORD, $t_CONSOLE_SCREEN_BUFFER_INFO.dwSize)
    ConsoleWrite('dwSize.X: ' & $tReadSize.X & @CrLf)
    ConsoleWrite('dwSize.Y: ' & $tReadSize.Y & @CrLf)
    Alles anzeigen
  • Consolen Fenster hooken

    • BugFix
    • 8. Mai 2021 um 13:13

    Alternative:

    Verwende doch eine eigene Konsole, die kannst du dann nach Lust und Laune gestalten und mit ihr interagieren.

    Zu dem Thema Eigene Konsole hatten wir vor Jahren hier schon etwas gepostet (ProgAndy und ich). Leider wurden die Links bei der Forenaktualisierung nicht umgestellt und somit sind die Posts unauffindbar. 8|

  • Consolen Fenster hooken

    • BugFix
    • 8. Mai 2021 um 11:15
    Zitat von UEZ

    Edit: dies scheint zu funzen.

    Wenn ich deinen Code ausführe passiert bei mir rein gar nichts. :rolleyes:

    - ich öffne eine Konsole

    - dann starte ich dein Skript

    - in der Konsole ist das Menü unverändert

  • Fehler bei mehrfacher PDF-Erstellung mittels PDFtoPrinter.exe

    • BugFix
    • 8. Mai 2021 um 11:01
    Zitat von De Rand Ere

    Hat jemand ne Idee ???

    Da der Sourcecode vorliegt würde ich diesen unkompiliert ausführen. Dann bekommst du schon mal etliche Infos in die Konsole ausgegeben und kannst zusätzliche Werte von relevanten Variablen ausgeben lassen. Damit lässt sich das Problem vermutlich eingrenzen.

    Wobei es überlegenswert wäre, diesen Code umzuschreiben, neben dem nicht mehr gebräuchlichen Dim werden dort Globale Variablen innerhalb einer Funktion erstellt. Das sollte man tunlichst unterlassen. Macht den Code schwer lesbar und anfällig für Fehler.

  • Consolen Fenster hooken

    • BugFix
    • 6. Mai 2021 um 13:31
    Zitat von UEZ

    Dienstreise in der Pandemie Zeit...krass.

    Eigentlich ist es ein temporärer Wechsel des Arbeitsorts. Einmal im Monat bin ich für eine Woche in der Firmenzentrale. Und wenn ich das Gesülze der Politiker zu "Home Office" höre, wird mir klar, dass die noch nie gearbeitet haben.

    Der Anteil an Dienstleistungstätigkeit liegt sicher deutlich über 50 %. Und wenn du nicht gerade Telefonseelsorger bist kannst du Home Office knicken.

    Ganz zu schweigen von der super-duper digitalen Infrastruktur in DE. Wenn ich an einer Video Konferenz teilnehme ist das im Endeffekt nur Audio - Video habe ich als Standbild, mehr gibt die Bandbreite nicht her. :Face:

  • Consolen Fenster hooken

    • BugFix
    • 6. Mai 2021 um 07:29

    UEZ Kann leider nicht testen, bin bis Freitag auf Dienstreise.

  • Consolen Fenster hooken

    • BugFix
    • 5. Mai 2021 um 21:52

    Es könnte helfen, wenn du beim Eintritt in die Maus-Hook Funktion zuerst auf die Bedingungen prüfst, bei denen die Funktion nicht arbeiten soll und sie sofort wieder verlässt.

    iCode < 0 Or wParam <> LDown

  • SciTE - Switch "output.code.page"

    • BugFix
    • 30. April 2021 um 10:56

    Beim Ausgeben von Zeichen außerhalb des Standard-ASCII Satzes ärgert man sich ständig mit Codepages und Zeichensätzen herum.

    Für nur AutoIt-Dateien ist das kein Problem. Einstellung in SciTE:

    File encoding: UTF8BOM

    code.page=65001

    character.set=1000

    output.code.page=0

    Damit werden Umlaute sauber in die Konsole geschrieben.

    Aus Lua-Dateien heraus sieht es dann anders aus.

    File encoding: UTF8

    code.page=65001

    character.set=1000

    output.code.page=0

    Das führt dann z.B. bei print('Ä') zur Ausgabe in der Konsole: Ã.

    Eine korrekte Ausgabe erfolgt mit:

    output.code.page=65001

    Alle Codepage-Werte sind für alle Dateien gültig und können somit nicht z.B. in der "au3.properties" unterschiedlich zur "lua.properties" gesetzt werden. Der zuletzt gelesene Wert wäre allgemeingültig.

    Deshalb habe ich hierfür das Skript: SwitchOutputCodepage.lua erstellt.

    Über Properties lässt sich für jeden Dateityp separat die erforderliche output.code.page festlegen. Wobei der Wert "0" (System) der Standardwert ist und somit nicht zwingend gesetzt werden muss.

    output.cp.au3=0

    output.cp.lua=65001

    Das Skript selbst muss mit dem Lua-Programmstart-Skript geladen werden und prüft ob der aktuelle Wert der Output Codepage zur aktuellen Datei passt und wechselt diesen wenn nötig. Überprüft wird:

    - beim Öffnen einer Datei

    - nach dem Speichern einer Datei

    - beim Wechseln auf eine andere Datei im Editor

    Code: SwitchOutputCodepage.lua
    -- TIME_STAMP   2021-04-30 10:20:21
    -- coding:utf-8
    
    
    --[[
    In "SciTEUser.properties" set output.code.page for file types. If not set: "0" is default.
    
    #~ used with file "SwitchOutputCodepage.lua"
    output.cp.au3=0
    output.cp.lua=65001
    
    ]]
    
    
    SwitchCP = EventClass:new(Common)
    
    local bDEBUG = false
    
    SwitchCP.Switch = function(self, _file)
        local cpOutput, ext = props['output.code.page'], props['FileExt']:lower()
        local cpRequired = props['output.cp.'..ext]
        if cpRequired == '' then cpRequired = '0' end
        if cpOutput ~= cpRequired then
            props['output.code.page'] = cpRequired
            if bDEBUG then print(_file, 'output.code.page: '..cpOutput..' --> '..cpRequired) end
        end
        return nil
    end
    
    SwitchCP.OnOpen = function(self, _file)
        return self:Switch(_file)
    end
    
    SwitchCP.OnSwitchFile = function(self, _file)
        return self:Switch(_file)
    end
    
    SwitchCP.OnSave = function(self, _file)
        return self:Switch(_file)
    end
    Alles anzeigen

    EDIT

    Wer mag, kann sich die aktuelle output.code.page auch in der Statusbar mit anzeigen lassen.

    statusbar.text.1=Zei=$(LineNumber) | Sp=$(ColumnNumber) | Markiert: Zei=$(SelHeight) , Sp=$(SelLength) | Modus=$(OverType) | output.code.page=$(output.code.page)

    Dateien

    SwitchOutputCodepage.lua 906 Byte – 739 Downloads
  • SciTE: folding (#Region .. #EndRegion), abspeichern/wiederherstellen

    • BugFix
    • 29. April 2021 um 12:24
    Zitat von GML

    Gibt es eine Möglichkeit SciTE so einzustellen, das


    #Region

    .

    .

    #EndRegion


    Zustände - auf- oder zugeklappt - beim Öffnen/Speichern/kompilieren wiederhergestellt werden wie ich sie auf-/oder zugeklappt hatte?

    Alles anzeigen

    Das wird nur solange gespeichert, wie das Skript im Editor ist. Wenn du diese Zustände speichern möchtest würdest du ein Lua-Skript benötigen, das beim Schließen von SciTE die Faltzustände aller Regionsmarker in allen Skripten ausliest und in einer separaten Datei ablegt.

    Umgekehrt müssen dann bei Starten von SciTE aus der Datei die Zustände ausgelesen und wieder gesetzt werden. Ebenso muss das passieren bei jeder Datei die geöffnet wird.

    Machbar? - Ja. Sinnvoll? - Habe ich arge Zweifel, dürfte etwas performancelastig werden.

    Ich persönlich hätte im Moment kein Verlangen ein derartiges Skript zu erstellen. ^^

  • Programm (Excel) beenden mit Aufgabenplaner

    • BugFix
    • 28. April 2021 um 17:54

    Schlimmstenfalls bleibt nur die Hardcore Variante:

    Wenn du die Rückmeldung hast, dass jeder Speichervorgang erfolgreich war, wird der Excel Prozess mit ProcessClose() abgeschossen. Nicht die feine englische Art - aber wenns nicht anders geht... :/

  • Gemischte Ini-Datei updaten - Ideen gesucht

    • BugFix
    • 25. April 2021 um 20:17
    Zitat von Professor Bernd

    Was meinst du denn mit projektorientierte Einstellungen und Objektordner?

    Objekt sollte Projekt heißen, Scheiß Autokorrektur am Handy. :D

    Wenn du ein Projekt erstellst, wirst du alle zugehörigen Dateien (au3, Ini, ico, etc.) in einem gemeinsamen Ordner speichern - dem Projektordner.

    Nun kann es sein, dass du für dieses Projekt eine bestimmte Editorkonfiguration möchtest. Das kannst du dann mit einer Einstellungsdatei in diesem Ordner regeln. Deren Inhalt hat Vorrang gegenüber den User-Einstellungen.

    Was ich gerade nicht weiß: Erkennt PSPad den Wechsel auf ein anderes Editor Tab? - Dieses "OnChange" Ereignis ist erforderlich, um dann die Einstellungen on-the-fly zu aktualisieren.

  • Gemischte Ini-Datei updaten - Ideen gesucht

    • BugFix
    • 25. April 2021 um 19:45
    Zitat von Professor Bernd

    Was gibt es denn an Nachteilen bei dem 2-Dateien-Konzept gegenüber dem mit nur 1 Datei?

    Keine - nur Vorteile.

    Du brauchst nur die Globale Datei pflegen, was der User macht (und ob er überhaupt was macht) ist absolut egal.

    Und für den Fall, dass du irgendwann auch mal projektorientierte Einstellungen vornehmen willst, gehst du mit deinem 1-Datei System Wasser saufen.

    Global und User würdest du einfach um eine Datei im Objektordner erweitern, die wiederum evtl. abweichende Werte aus der Userdatei überschreibt.

  • Gemischte Ini-Datei updaten - Ideen gesucht

    • BugFix
    • 25. April 2021 um 13:23

    Trotzdem möchte ich nochmal einwerfen, dass es doch grundsätzlich wumpe ist, ob die Einträge in den Usereinstellungen sich von den Standardeinstellungen unterscheiden.
    Darauf muss ich doch nicht prüfen! Jeder Vergleich kostet mehr Zeit als das simple Einlesen von Werten.

    - 2 Dateien existieren (System- und Usereinstellungen)

    - Einlesen der Systemdatei in Laufzeitvariable (Dictionary ist hier wohl der beste Weg)

    - Einlesen der Userdatei ins Dictionary (wobei automatisch die Systemdaten überschrieben werden)

    Dann kümmert es dich nicht die Bohne ob und was der User wann, wie, weshalb, warum geändert hat. - Seine Änderungen haben Priorität und werden immer übernommen.

  • Wortanfang Schreibweise

    • BugFix
    • 24. April 2021 um 12:01
    Zitat von Banana_2_Day

    Schritt 1 - Trennzeichen Leerzeichen = die Einzelworte

    StringSplit()

    Zitat von Banana_2_Day

    Schritt 2 - Erkennung 1. Buchstabe ob groß oder klein (ich weiß nicht, wie das geht)

    StringIsLower() StringIsUpper()

    Zitat von Banana_2_Day

    Schritt 3 - alle Buchstaben ab dem 2. Buchstaben klein schreiben (ich weiß nicht, wie das geht)

    StringLower() StringUpper()

  • Gemischte Ini-Datei updaten - Ideen gesucht

    • BugFix
    • 23. April 2021 um 07:44
    Zitat von Professor Bernd

    Woher kommt das Limit?

    Aus den 16 Bit Windows Zeiten. Mit Einführung der Registry wurden die Ini Dateien durch MS im System selbst nicht mehr verwendet.

  • Gemischte Ini-Datei updaten - Ideen gesucht

    • BugFix
    • 23. April 2021 um 07:25
    Zitat von Professor Bernd

    Welches Limit?

    32k File Size Limit.

    Zitat von Professor Bernd

    Zum Beispiel soll Pau3 einen Settings-Dialog bekommen. Wo sollte der dann hinspeichern? Wahrscheinlich in die User Properties,

    Genau, das sind von der Global abweichende Werte - ab in die User Datei.

  • Gemischte Ini-Datei updaten - Ideen gesucht

    • BugFix
    • 23. April 2021 um 07:14
    Zitat von Professor Bernd

    kann leicht über 1.500 Zeilen beinhalten

    Hab ich jetzt erst gelesen:

    Verabschiede dich von der Ini, da geht ins Auge (Limit).

    Nimm XML oder JSON oder auch eine reine zeilenorientierte Textdatei (config). Dafür findest du hier im Forum Muster.

    Edit - Da fällt mir ein, XML ist wohl auch limitiert, das war das Problem, dass NPP für AutoIt nicht nutzbar machte.

  • Gemischte Ini-Datei updaten - Ideen gesucht

    • BugFix
    • 23. April 2021 um 07:11
    Zitat von Professor Bernd

    kann leicht über 1.500 Zeilen beinhalten

    Hab ich jetzt erst gelesen:

    Verabschiede dich von der Ini, da geht ins Auge (Limit).

    Nimm XML oder JSON oder auch eine reine zeilenorientierte Textdatei (config). Dafür findest du hier im Forum Muster.

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™