Beiträge von BugFix

    GUICtrlGetHandle("SysDateTimePick322")

    DAS geht nur für eigene Ctrl.

    Local $hCalendar = ControlGetHandle("FENSTERTITEL", "", "[CLASS:SysDateTimePick322; INSTANCE:1]") -- hier die Klassen- und Instancenamen für das Ctrl genau eintragen


    Übrigens: "[CLASS:#32770]" als Identifizierung für das Fenster ist etwas ungünstig, das ist die Standard-Windows-Fensterklasse.

    Bitte poste immer deinen Code. Sonst kann ich nicht sehen, was du falsch machst.

    Das Array muß 7 Elemente haben (daraus wird die Datumsstruktur befüllt) aber wenn du die Zeit auf '0' setzt, kannst du das beim Deklarieren auch weglassen. Beim Auslesen verwendet AutoIt dann für: kein Wert = 0.

    Also: $a_Date[7] = [False, 2013, 10, 25] ist identisch mit $a_Date[7] = [False, 2013, 10, 25, 0, 0, 0]


    EDIT:

    Für ein besseres Verständnis ist es durchaus sinnvoll sich auch einmal die UDF anzuschauen. In SciTE: Cursor auf "#include UDF-Datei.au3" setzen und <Alt+I>. öffnet die Include Datei.

    Die Funktion sieht dort so aus:

    AutoIt
    Func _GUICtrlDTP_SetSystemTime($hWnd, ByRef $aDate)
    Local $tDate = DllStructCreate($tagSYSTEMTIME)
    DllStructSetData($tDate, "Year", $aDate[1])
    DllStructSetData($tDate, "Month", $aDate[2])
    DllStructSetData($tDate, "Day", $aDate[3])
    DllStructSetData($tDate, "Hour", $aDate[4])
    DllStructSetData($tDate, "Minute", $aDate[5])
    DllStructSetData($tDate, "Second", $aDate[6])
    Return _GUICtrlDTP_SetSystemTimeEx($hWnd, $tDate, $aDate[0])
    EndFunc ;==>_GUICtrlDTP_SetSystemTime

    Kannst du so machen:


    Vorab:

    Das ist hier keine superelegante Lösung mit Zugriff auf DOM, sondern eher ein Workaround um auch ohne IE-Objekt Html in eigene GUI einbetten zu können.

    Ich weiß auch nicht, ob sich Opera überhaupt anzapfen lässt, um direkt mit dem Objekt zu interagieren. Ich gehe hier einfach den Weg: Html-Datei im Temp-Ordner erstellen und als Parameter an den Opera-Aufruf anhängen. Das Opera-Fenster greife ich mir dann und hänge es als Child in eine eigene GUI.

    Einen Handling-Nachteil haben wir allerdings: Ich kann zwar in meiner angezeigten Html-Datei Referenzen auf Online-Seiten einfügen und dann in der Anwendung diese auch anzeigen - ABER: Ich komme nicht mehr zurück, da ich keine Navigationsmöglichkeit habe, ich kann immer nur eine neue Html-Datei erstellen und das Fenster Refreshen, um diese zu laden. Referenzen auf Textmarken funktionieren aber tadellos. Diese UDF ist gedacht um lokale Html-Dateien/Inhalte in eine GUI einzubetten.


    Opera habe ich verwendet, weil dieser Browser nach allem, was ich bisher gesehen habe, der einzige ist, der sich soweit personalisieren lässt (optisch), dass nur das nackte Fenster ohne Menüs, Bars, Statuszeile übrig bleibt. Die verwendete portable Version 12.18 ist mit ca. 30 MB auch eine der kleinsten von allen portablen Browsern. (Portabel deshalb, damit man diesen auch bei Projekten mitgeben kann). Wenn ihr den Browser selber laden möchtet: Opera@USB für Windows v12.18. Anschließend müssen über das Konfigurationsmenü (Rechtsklick in den geöffneten Browser) alle Anzeigen für Menüs, Bars, Statuszeile deaktiviert werden.

    Ich biete hier einen Gesamt-DL aller Dateien (UDF + Bsp.) mit Browser und bereits vorkonfiguriertem Profil zum DL (s. DL_embedded.zip.txt im Anhang).


    Bei einzelnem Download:

    In einem Ordner legt bitte folgende Struktur an

    Code
    <fonts> enthält "SourceCodePro" für "array_tut.htm"
    <Opera> portable Version 12.18
    array_tut.htm Testdatei, verwendet in "..ExampleHelp.au3"
    OperaEmbedded.au3 UDF
    OperaEmbedded_ExampleHelp.au3 Beispiel
    OperaEmbedded_ExampleTable.au3 Beispiel



    Eine Html-Datei kann man natürlich mit: ShellExecute(PathBrowser, @ScriptDir & "\meineDatei.html") ausführen. Jedoch dann mit Titel und Icon des Browserfensters.


    Ich verwende hier zum Aktualisieren der Inhalte, mangels anderer Techniken, das Senden von F5. Falls jemand einen eleganteren Weg kennt, immer her damit.

    ich möchte mehrere Daten speichern

    Daten = Datumswerte :?:

    in einer externen Applikation

    Da du erkennen konntest, dass es sich um ein SysDateTimePick32 - Control handelt (AutoItWindowInfo ?), brauchst du das Handle/die ID dieses Controls. und kannst dann mit den Funktionen aus der AutoIt-UDF darauf zugreifen.

    Schau dir mal das Bsp. zu _GUICtrlDTP_SetSystemTime an.


    Ich weiß jetzt nicht welcher Kalender dort verwendet wird, evtl. hilft dir dann auch das hier: Maske zum Markieren in Monatskalender erstellen

    ich will das Captcha ja nicht umgehen ich möchte nur wissen wann eins auftaucht.

    Der Gag war gut. :rofl:


    Wann wird ein Captcha eingeblendet? - Richtig! Während vom Nutzer sowieso gerade Eingaben getätigt werden!! Das heißt, deine Augen sind eh auf den Monitor gerichtet.

    Sofern du also automatisiert Eingaben tätigen möchtest, auf einer Seite, die mittels Captcha eine Authentifizierung wünscht, kannst du sicher sein, dass in den AGB der Seite ein automatisiertes Ausfüllen ausdrücklich untersagt ist! - Womit du also erneut gegen Regeln verstößt.


    Aus der Nummer kommst du nicht mehr raus.

    Findet man diese Alt- und Ctrl-Funktionen auch in der SciTE Doku?

    ich war bisher erfolglos :(

    (Man findet sie auch hier im Forum in alten Posts, hier Blockauswahl)


    Du hast schon richtig verlinkt. Es steht halt nicht als Liste, sondern mitten im Text:

    Bereichsmarkierung:

    Kapitel: Standard Editing

    Text editing in SciTE works similarly to most Macintosh or Windows editors with the added feature of automatic syntax styling. SciTE can hold multiple files in memory at one time but only one file will be visible. Rectangular blocks of text can be selected in SciTE by holding down the Alt key on Windows or the Ctrl key on GTK+ while dragging the mouse over the text.


    ....

    ....

    Mehrere Cursorpositionen:

    Kapitel: Defined variables in properties files

    selection.multiple | Set selection.multiple to make multiple selections with the mouse by holding down the Ctrl key.


    Daraus resultierend hatte @progandy den Blockeditor aus NPP nachgeskripted.

    Wenn du die STRG - Taste gedrückt hältst kannst du durch Mausklick mehrere Cursorpositionen aktivieren. Unbeabsichtigt kann das nicht passieren - hast du eine Katze deren Pfote ständig auf STRG drückt? 8o

    Erstmal danke für deine Antwort das soll in zwei Felder Zufällig von der txt Datei Texte eintragen klappt alles gut aber ich schaff es irgendwie nicht mit einer zweiten fileName ??

    OK, du bist neu. - Ein paar Hinweise:

    Wenn du Hilfe benötigst, solltest du dein Problem so genau, wie möglich beschreiben.

    Z.B.

    Ich habe eine Textdatei mit folgendem Aufbau (noch besser Beispieldatei anhängen, evtl. sensible Daten unkenntlich machen) .....

    Ich möchte an der Position X (gekennzeichnet durch ...) und an der Position Y (gekennzeichnet durch ...) folgende Daten eintragen.

    Probiert habe ich folgendes ...


    Deine jetzige Beschreibung wirft mehr Fragen auf, als dass sie Antworten gibt.

    Schiebst du dann bitte noch eine korrigierte, bzw. finale Version hoch - danke!

    Hier zwei Varianten:


    Was willst du denn damit erreichen?

    Send und MouseClick sind Befehle, die in einer Dateibearbeitung nichts zu suchen haben.

    Dateieinhalte kann man im ganzen oder zeilenweise oder positionsorientiert lesen/schreiben.

    Schau mal in der Hilfe folgende Begriffe und die Beispiele dazu an:

    FileOpen, FileClose, FileRead, FileWrite, FileReadLine, FileWriteLine, FileGetPos, FileSetPos

    ich habe festgestellt, dass bei Win+Up in der WINDOWPOS Struktur das Flag 0x00008000 gesetzt ist. Dies scheint ein undokumentiertes Flag zu sein.

    Da habe ich mal in der Richtung gesucht, es gibt sogar 3 undokumentierte Flags: 0x8000, 0x1000 and 0x0800 - aber eine Erklärung dafür hat keiner so richtig.

    Ich habe jetzt kurzerhand definiert:

    Local Const $SWP_FROZENWINDOW = 0x8000

    und angewendet dann:

    If (BitAND($tWINDOWPOS.flags, $SWP_FROZENWINDOW)) Then _WinAPI_ShowWindow($_hWnd, @SW_RESTORE)


    :thumbup: Danke für den Hinweis. Damit kann ich die anderen Messages außen vorlassen und brauch nur WM_WINDOWPOSCHANGING prüfen.

    dask

    Oscars Hinweis auf die Forenregeln bezieht sich sicher auf das Fenster, welches du überwachst. "BlueStacks" ist ein Emulator und wird vorrangig für Spiele genutzt. Und deren Automatisierung verstößt gegen unsere Forenregeln.

    Sei deshalb bei Anfragen so konkret wie möglich und benenne immer Roß und Reiter.

    Ich benutze meist die WM_WINDOWPOSCHANGING

    Ich habe das jetzt mal eingebunden. Damit werden tatsächlich alle Szenarien (auch Tastatur!) abgedeckt. :thumbup:

    Alleine führt es aber nicht zum Ziel. Der Doppelklick auf die Titelleiste und Klick auf Maximize Button müssen separat abgefangen werden. WM_WINDOWPOSCHANGING verhindert sonst zwar die Größenänderung (Maxwerte werden gesetzt), danach ist das Fenster aber "eingefroren" und muss mit einem MOVE wieder freigegeben werden - dann springt aber die Größe auf den Zeitpunkt vor WM_WINDOWPOSCHANGING. Und dasselbe passiert bei Maximize per Tastatur (Win+Up).

    Fehlt mir also noch eine saubere Lösung für Maximize per Tastatur.


    Hier das Skript:

    steht etwas von einem Event für WinProc (SC_MOVE),

    Im Moment lasse ich WM_GETMINMAXINFO aussen vor, wo das evtl. den Positionssprung anzeigen könnte. Vielleicht komme ich nochmal drauf zurück.

    Falls dein Fenster also keine Menuzeile hat (die ist sonst ganz oben, wobeeeeei, die kann man doch bestimmt als Pseudotitelleiste missbrauchen, wenn man ihren Grafikpuffer geschickt übermalt :D), kannst du via WS_POPUP ein "nacktes" Fenster erzeugen und die von dir gewünschten zulässigen Events (Resize wenn der User es will, Minimieren, Maximieren, Exit, Verschieben, etc) manuell verarbeiten.

    Mein Ziel ist kein individuelles Fenster, sondern geplant ist eine Anwendung für beliebige Fenster.

    die WM_MOVING wird beim ziehen der Titelleiste gesendet

    Ja, auch das muss überwacht werden mit entsprechender Kollision am Bildschirmrand.

    Die WM_SIZING wird nur gesendet, wenn der Rahmen gezogen wird, bzw. die Größe geändert wird.

    Das ist wesentlicher Bestandteil, da es in meinem geplanten Projekt ein möglicher Style des genutzten Fensters ist. Somit möchte ich da auch volle Funktionalität haben.

    WM_WINDOWPOSCHANGING

    Das scheint wohl die sinnvollste Variante zu sein, um einen Kollisionscheck (mit Bildschirmrand) dauerhaft zu implementieren..



    Ich habe in Post 1 eine Kurzversion eines Skriptes gestellt, dass mein Vorgehen zeigt.

    Ich würde die Minimale/Maximale größe des Fensters mit WM_GETMINMAXINFO begrenzen.

    Das schaut schonmal ganz gut aus. Da muss ich jetzt nur noch eine Änderung der Position verhindern. Momentan springt das Fenster an den Wert, den es hätte - aber aufgrund der unterdrückten Größenänderung nicht einnehmen darf.

    Naja, ist eine Windowseinstellung. Das ist in einem Programm nicht von Nutzen.

    Wenn du manuell die entsprechenden Mouse-Events abfängst, solltest du evtl. beachten, dass man den gleichen Effekt mit den Tastenkombinationen Win+Pfeiltaste ebenfalls erreicht. Ein reines Abfragen von Mouse-Events könnte also je nach genauer Zielstellung nicht ausreichen.

    Ja, leider. Windows weist da keinerlei Konsistenz auf. Eigentlich könnte man erwarten, dass ein gleiches Ergebnis auch eine identisch WM_ als Basis hat. Aber leider....

    Bill Gates wird sicher sagen: It's not a bug - it's a feature.