Beiträge von BugFix

    Hatte ich vor langer Zeit auch mal erstellt:

    AutoIt
    ; === Tausendergruppierung einfügen
    Func _NumberFormatThousand($vNumber, $ret='DE') ; bis 18 Vorkommastellen
    Local $sOut = '', $a = StringRegExp(StringReplace($vNumber, '.', ','), "(-?\d{1,3})(\d{3})?(\d{3})?(\d{3})?(\d{3})?(\d{3})?(?:\Z|(,\d+))", 3)
    For $i = 0 To UBound($a) -1
    If $a[$i] <> '' Then $sOut &= '.' & $a[$i]
    Next
    If $ret <> 'DE' Then Return StringTrimLeft(StringReplace(StringReplace($sOut, '.', ','), ',,', '.'), 1)
    Return StringTrimLeft(StringReplace($sOut, '.,', ','), 1)
    EndFunc ;==>_NumberFormatThousand

    Das "Drumherum" möchte ich aus Datenschutzgründen nicht erklären.

    Ich möchte nur wissen, ob es eine Möglichkeit gibt zu prüfen, ob ein Passwortfeld leer oder gefüllt ist.

    Datenschutzrelevante Dinge will niemand wissen.

    Ich geb mal ein Bsp. für einen Ablauf (hat jetzt nichts mit TV zu tun):
    - Öffnen der Anwendung XY

    - Warten auf Anmeldefenster

    - Eintragen Nutzername

    - Eintragen PW

    - Bestätigen mit Button <OK>


    Dann wissen wir das "Drumherum" - und nun kannst du ganz speziell auf einzelne Punkte dieses Ablaufs verweisen.

    Denn ich weiß wirklich nicht, wann du dein PW im TV eintragen musst. Und somit kann ich dir nicht sagen, wie man dieses PW-Feld prüft.

    Wenn jemand anderes auch ein Passwort Feld prüfen möchte, welches nicht TeamViewer beinhaltet, dann soll ihm ja auch geholfen werden.

    Nennt sich XY-Problem. Man meint, dass die Lösung auf diese Art und Weise (schauen ob PW im Feld) umgesetzt werden muss (X) und verliert dabei aus den Augen, dass es andere, bessere Lösungen (Y) gibt.

    Das ist der Grund, warum wir die Fragesteller bitten auch das Drumherum zu erklären, hat keineswegs die Absicht jemanden zu diskreditieren.


    Und solange ich nicht weiß, an welcher Stelle das PW eingegeben werden soll, könnte ich den Vorgang ja auch nicht bei mir nachvollziehen um dann eine konkrete Antwort zu bringen.

    Der Sinn dabei ist, dass ich nicht 50-mal am Tag mein Passwort eingeben muss.

    ??

    Wenn du dich bei jemandem zur Hilfestellung aufschalten möchtest, brauchst du dessen Passwort.

    Soll jemand dir helfen braucht er dein Passwort.

    In welcher Konstellation musst du denn dein eigenes Passwort eingeben?

    Wenn ich TV in der Serverinstallation nutze brauche ich ebenso das PW des Ziels. - Ist das dein Einsatz, z.B. von zu Hause auf PC in der Ferne (Firma) aufschalten? Da kannst du doch im Konto die Verbindung fix festlegen und wählst nur das Ziel an - fertig.

    Unabhängig von dem Problem erschließt sich mir nicht, was du überhaupt bezweckst.

    Du definierst Hotkeys um damit Tastendrücke per Send() unsicher und unzuverlässig ans System zu senden (bzw. das Fenster, das gerade im Moment des Sendens den Fokus hat - kann mal schnell irgendein aufpoppendes Nachrichtenfenster sein). Welchen Sinn soll das ergeben, wenn du Tastendrücke durch das Drücken von Tasten simulierst?:/

    Dann werde konkreter mit dem, was du willst (Beispiele).

    Auf deine allgemeine Frage war das eine absolut konkrete Antwort. Wenn dir nicht klar ist, was Funktionen sind und wie man sie anwendet, rate ich dir als erstes in der AutoIt Hilfe nachzulesen.

    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.

    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:

    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:

    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?

    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|

    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.

    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:

    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

    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



    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)

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