Fehlende Großbuchstaben von ControlSend() vs. getrennte Serversession

  • Hi,


    Da ich beim SuFu nutzen leider über kein vergleichbares Thema gestoßen bin, möchte ich doch nochmal auf diesem Wege fragen:

    Wie kann ich bei getrennter Serversession (der Nutzer bleibt aber weiter angemeldet) die Funktion "ControlSend()" dazu überreden, Großbuchstaben zu schreiben?


    Um die möglichen Hilfestellungen eurerseits leichter zu gestalten, hier eine Schritt für Schritt Erklärung, was ich bislang mache:

    Spoiler anzeigen
    • Ich logge mich auf Server-XYZ mit Windows Server 2012RC, von einem Windows 10 System per MSTSC ein.
    • Auf Server-XYZ ist AutoIt in der neuesten Stable Version (3.3.14.1) installiert, mit dem auf AutoIT abgestimmten SciTE Editor angepasst.

    Ab hier wird es nun interessant denn es tun sich 2 Fälle auf:

    Fall 1:

    • Ich lasse das Script während ich ganz normal eingeloggt bin laufen und es funktioniert alles wunderbar.

    Fall2:

    • Ich time das Script per Schleife auf eine bestimmte Uhrzeit
    • Trenne meine Verbindung ("x"'e sie weg, sodass der Nutzer angemeldet bleibt)
    • Allerdings funktioniert ein Log-In auf benötigter Website nicht, da dieser Casesensitive ist und CountrolSend() keine Großbuchstaben schreibt


    Um jetzt meine Hilfestellung für eure Hilfestellung zu komplettieren, hier mein Script:

    Spoiler anzeigen



    Die Hilfe sagt im Bereich der "Send()" Funktion (übertragbar auf die ControlSend() Funktion) folgendes:


    This tells AutoIt to send a SHIFT keystroke; therefore, Send("Hell+o") would send the text "HellO". Send("!+a") would send "ALT+SHIFT+a".


    Allerdings funktioniert das nur, solange ich eine bestehende Verbindung zum Server habe.
    Hat jemand von euch eine Idee?


    Beste Grüße,
    Fengo


    Edit: Habe in der Zwischenzeit auch probiert über den Ascii Code für das große A das Programm zu "überlisten", allerdings ohne Erfolg.
    Hier die Code Zeile dafür:

    AutoIt
    ControlSend($sTitle, "", $sUN, "{ASC 065}")

    2 Mal editiert, zuletzt von Fengalf (12. August 2015 um 11:53) aus folgendem Grund: Anpassung der Formatierung

    • Offizieller Beitrag

    Mangels Serverumgebung kann ich das Problem für mich nicht nachstellen.
    Solltest du keine probate Lösung finden, könntest du eine Alternativlösung schaffen:
    - auf dem Zielrechner einen Ordner (z.B. MsgToSend) erstellen (als Freigabe)
    - auf dem Zielrechner startest du ein Endlosskript, dass diesen Ordner auf Inhalt prüft (Intervall nach deinem Geschmack, 5...10 Sekunden)
    - auf dem Fernsteuerungsrechner erstellst du die Triggerdatei mit den Daten (Window=Window-Titel; Send-String=... etc.)
    - nun kopierst du die Datei auf den Zielrechner
    - das Skript auf dem Zielrechner liest den Inhalt der Datei und löscht danach die Datei
    - mit den Daten aus der Datei wird lokal der ControlSend-Befehl ausgeführt

  • Hey,

    danke für den erneuten schnellen Lösungsansatz!
    Beim lesen dessen fällt mir auf, dass ich mich scheinbar unklar ausgedrückt habe. Ich führe nur auf dem Server ein Scritp aus (der 'Fernsteuerungsrechner' dient nur um mich zum Server verbinden zu können. Erst auf dem Server wird das Script gestartet.
    Ich habe auch schon überlegt, ob es eine "Locked Screen" Logik haben könnte - die ja scheinbar bekanntlich immer mal wieder Probleme machen kann. Um in einem Script eine Verbindung zu einem anderen Rechner auf zu bauen, bin ich leider noch nicht erfahren genug. Aber ich werde mal schauen, ob ich das nicht trotzdem zurecht gebastelt bekomme.

    Danke nochmals! :)

    Beste Grüße,
    Fengo

  • Hi,
    dein Problem ist die Trennung der Session / Deaktivierung Userkontext!
    Das funktioniert lt. meinen bisherigen Recherchen zu diesem Thema NICHT!
    Ehrlich gesagt ist es mir auch völlig schnurz, da absolut keine Veranlassung besteht, ein serverbasiertes Script remote "anzustoßen" und dann auf einer grafischen Oberfläche "ohne Kontext" laufen zu lassen mit Befehlen, die genau auf diesen Kontext zugreifen (Controls/Windows uvm.)

    Entweder ich bleibe angemeldet mit "offenem" Fenster zur zu steuernden Anwendung, oder ich starte das Script "direkt" auf dem Server. Beide Varianten funktionieren einwandfrei.

  • Hey,

    danke für die Bemühungen. :)
    Ich starte das Skript ja direkt auf dem Server. Ich glaube ich habe mich sehr missverständlich ausgedrückt. ^^'
    Ich melde mich auf dem Server nur an, um dort zu scripten, das script zu kompilieren und dann dort 24/7 überprüfen zu lassen,ob es denn eine bestimmte Uhrzeit hat und eben, wenn das der Fall ist, den Inhalt des Scriptes ausführen zu lassen. Dennoch: Irgendwie funktioniert das mit den Großbuchstaben nicht so ganz. :/

    Um es in VirtualBox Sprache zu sagen:
    Ich habe einen Guest ( das ist der Server) und dieser Guest ist quasi Host für das Script. Der eigentliche Host (also mein Rechner) hat mit dem Script nichts am Hut. :D

    Beste Grüße,
    Fengo

  • Deine Behauptung, daß ControlSend keine Großbuchstaben senden kann, stimmt nicht. Folgendes Beispiel aus der Hilfe (leicht abgeändert) sendet ganz korrekt an Notepad:

    mfg autoBert

  • Hey Autobert,

    ich wollte zu keinem Zeitpunkt behaupten, dass ControlSend keine Großbuchstaben senden kann.
    Ich möchte dennoch behaupten, dass es in meinem speziellen Usecase nicht funktioniert! ;)

    Danke dennoch für den Hinweis.
    Beste Grüße,
    Fengo

  • Also,

    1. ich würde nicht mit Firefox und dann mit ControlSend im Firefox arbeiten.
    Entweder du bleibst bei den Firefox-Funktionen oder setzt das mit dem IE um.
    2. wie Andy auch schon geschrieben hat sollte das Script wenn schon als Task laufen (Aufgabenplanung) ;) und als Zeittask mit den entsprechenden Credentials abgearbeitet werden. Es werden auch Fenster erzeugt, wenn kein User angemeldet ist (man mag es nicht glauben ;)

    Das war meine Meinung dazu ^^

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hi,

    sorry für die sehr späte Antwort, aber ich war im Urlaub und hatte nicht die Möglichkeit hier vorbei zu schauen. :S
    Danke an Schnuffel, für die Antwort. Dazu haben sich mir noch folgende Fragen ergeben:

    Zu 1.:
    Leider funktioniert die Login-Funktion von FireFox nicht auf 'Tableau' - der erkennt dann nicht, das etwas eingetragen wurde. Sonst würde ich die Mischung denke ich auch nicht bevorzugen. ^^'
    Und dann wollte ich wissen: Ist es denn leichter den IE zu handlen?


    Zu 2.:
    Die Aufgabenplanung hat mir immer mal wieder in der Vergangenheit "Prozess konnte nicht erstellt werden" (trotzt Admin Konto) ausgespuckt. Daher traue ich dem nicht ganz.


    Beste Grüße,
    Fengo

  • was du vorhast ist administrativ eigentlich ein Grund für fristlose Entlassung. :rofl:

    Mach das ganze über eine Batch oder ein Powershell-Scripüt und lass das als Task laufen.

    Alles andere ist Bockmist ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • was du vorhast ist administrativ eigentlich ein Grund für fristlose Entlassung. :rofl:

    Mach das ganze über eine Batch oder ein Powershell-Scripüt und lass das als Task laufen.

    Alles andere ist Bockmist ;)

    Dem ersten kann ich nur zu stimmen.
    Dem zweiten: Der Witz an Tableau (was hier automatisiert werden soll) ist ja, das es nicht gedacht ist, automatisiert zu werden und dennoch gefordert wird, DASS es automatisiert wird... ^^'
    Über eine Batch wurde es bereits probiert, über ein Powershell-Script ebenso, das Problem ist, dass die CSV Dateien, die dann ausgegeben werden ein anderes Darstellungsformat haben, als über einen solchen "direkt download".

    PS.: Problem wurde jetzt umgangen, indem einfach ein Benutzer mit kleinen Buchstaben angelegt wurde - Kommt der Prophet nicht zum Berg...
    Und: Das Script läuft jetzt auch brav über Task Shell, zwar lief es jetzt nur in einem von 3 Fällen, aber das bekommt man sicher auch zurecht gebogen.

    Danke! Für all die gute Hilfe, die ich hier bekommen habe! :)