Text bei Markierung aus anderer Anwendung lesen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von sunshine.

    Text bei Markierung aus anderer Anwendung lesen

    Hallo,

    ich benötige eine Möglichkeit, dass mein Programm im Hintergrund permanent schaut, ob in einer anderen aktiven Anwendung ein Text markiert wurde. Wenn ja, muss dieser entsprechend ausgelesen (auch gerne über Clipboard), analysiert und ggf. folgend ein Befehl daraus generiert werden.

    Leider aber habe ich schon zig Stunden mit Versuchen und Suchen im Internet verbracht. Zuletzt bin ich bei der API getforegroundwindow hängen geblieben, aber das hat dann alles nicht geklappt. Bin auch ehrlich gesagt in diesem Bereich unbefleckt. Hat mir jemand eine Idee, wie ich das am einfachsten machen kann?

    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [* Neues Thema] klickt. ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Sollen alle anderen Programme überwacht werden oder nur ein bestimtmes?
    Wenn letzteres: Sollen alle Controls überwacht werden oder nur eine bestimmte?
    Wenn letzteres: UIAutomation könnte das hinbekommen.
    Aber was konkret soll's werden, wenn's fertig ist?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Gute Frage - eigentlich soll nur eine bestimmte Anwendung überwacht werden. Ist eine Anwendung Access basierend, die ich nicht beeinflussen/programmieren kann. Darin enthalten Kundennummern. Und wenn da ein Kundennr. mit der Maus markiert wird, so ein anderes Programm browserbasierend mit dieser Kundennr. geöffnet werden. Letzteres funktioniert schon per Link. Aber eben nicht der erste Part. Wie könnte das mit UIAutomation aussehen? Kenne ich überhaupt nicht.
    Wie wird denn markiert? Weil: Wenn sich die Markierung ändert, soll was geschehen. Aber stell Dir vor, Du markierst einen Text in Word. Dann würde schon was passieren, wenn Du ein Zeichen (mehr) markiert wird. Ist ja wohl nicht beabsichtigt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ok, und nur zur Sicherheit: In welcher Umgebung erstellst Du Dein Programm? Du hast hier bei der Themenerstellung angegeben: VBA. Also programmierst Du ein Word-/Excel-Access-Makro? Oder programmierst Du in Visua Studio mit VB.NET?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Gewiss, aber es wäre einfacher "nur" einen Text (=Kundennr.) zu markieren und dieser ruft ein anderes Programm exakt mit dieser Kundennr. auf. Leider sind beide Programme meinerseits nicht veränderbar, daher die Suche nach einer Lösung. Lieber markieren statt kopieren in die Zwischenablage auch deshalb, weil es dann mehrere Kollegen nutzen könnten und aufgrund der Häufigkeit doch einfach wäre.
    Nachdem ich den Post von Achilleus gelesen hab, ist mir was eingefallen was funktionieren würde. Schön ist das nicht, aber leicht umsetzbar.

    Mit GetAsyncKeyState den Status der linken Maustaste überwachen, wenn gedrückt wurde und losgelassen den aktuellen Inhalt des Clipboards zwischenspeichern, Tastenkombination STRG+C senden dann ist wenn etwas markiert ist im Clipboard, dann prüfen ob es Text ist, fall nein den ursprünglichen Inhalt wieder ins Clipboard packen damit der User nicht negativ beeinträchtigt wird. Ist Text im Clipboard testen ob es 8 Zahlen sind, wieder den ursprünglichen Inhalt ins Clipboard packen. Wenn es dann 8 Zahlen in Textform sind folgt deine Verarbeitung.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    sunshine schrieb:

    VB 2010 Express
    8| Die neuesten VS-Versionen, inkl. VS 2022 Community Edition sind aktuell und kostenlos.
    UIAutomation: Kannst Dich mal hier bei meinem vor einiger Zeit als Einführung gedachtes Tutorial einlesen. Danach geht's weiter mit TextPattern und UIAutomation-EventHandler setzen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @sunshine Ist die andere Anwendung ein .NET-Programm oder ein natives (C, C++) Programm?
    Idee (nicht probiert): Diesem Programm den Fokus geben, dem Control den Fokus geben und die Tastenkombination Ctrl+C senden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das eine Programm ist Access und das Zielprogramm ist eine webbasierte Anwendung. Das mit Ctrl+C ginge bestimmt, aber dann kann ich die Kundennummer quasi auch gleich eingeben. Ich möchte ja gerne beim ersten Programm "lediglich" die Kundennr. markieren. Diese Markierung sollte durch meine Programm auf Zahlen und exakt 8 Stellen gecheckt werden und bei vorhanden sein der Voraussetzungen, die browserbasierte Anwendung via Process.Start(Link) die im anderen Programm markierte KD-Nr. aufrufen. Zumindest stelle ich mir das so vor. Nur ich schaffe es nicht, meinen Programm, was stets im Hintergrund laufen soll zu sagen, schau mal, ob irgendwo ein Text mit 8 Zahlen markiert wurde. Hab schon einiges ausprobiert....auch die Anleitung von VaporiZed ist für mich zu schwer zu verstehen. Bin zwar mit UI Automation schon etwas weiter, aber es klappt alles nicht...