Forum: PC-Programmierung Programm mit mouseclick + ctrl-V


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Karl K. (leluno)


Lesenswert?

hallo,

kleines Problem. Ich habe eine Hama-Maus mit zwei programmierbaren 
Tasten. Die erste ruft ein c#-Programm ab, mit dem Daten aus Datensätzen 
ins clipboard genommen werden.

Die zweite Taste soll in einer beliebigen Anwendung genau zwei 
Funktionen erfüllen: mouseclick + ctrl-V

Ich brauche also ein Programm, welches "mouseclick + ctrl-V" ausführt, 
das ich dann auf der Maustaste abspeichern kann. Wie geht das am 
einfachsten?

Danke für Unterstützung
: Bearbeitet durch User
von F. (radarange)


Lesenswert?

Autohotkey?
von Rene K. (xdraconix)


Lesenswert?

Karl K. schrieb:
> Ich habe eine Hama-Maus mit zwei programmierbaren
> Tasten. Die erste ruft ein c#-Programm ab

Mit eben diesen Programm die zweite Taste so programmieren?! Oder kann 
das Programm das nicht, wie programmierst du denn die Taste?
von Ralf X. (ralf0815)


Lesenswert?

Karl K. schrieb:
> kleines Problem. Ich habe eine Hama-Maus mit zwei programmierbaren
> Tasten.

Eine genauere Bezeichnung hälst Du für überflüssig?
von Rolf M. (rmagnus)


Lesenswert?

Ralf X. schrieb:
> Eine genauere Bezeichnung hälst Du für überflüssig?

Die spielt ja auch eigentlich keine Rolle. Er will nur wissen, wie man 
ein Programm schreibt, das an der aktuellen Position des Mauszeigers 
einen Klick auslöst und dann Ctrl+V an das Programm sendet, das dann den 
Fokus hat. Der Typ der Maus ist dazu nicht relevant.
von Sheeva P. (sheevaplug)


Lesenswert?

Ralf X. schrieb:
> Karl K. schrieb:
>> kleines Problem. Ich habe eine Hama-Maus mit zwei programmierbaren
>> Tasten.
>
> Eine genauere Bezeichnung hälst Du für überflüssig?

Die eine Taste heißt Klaus und die andere Jürgen. Genau genug?
Beitrag #8036001 wurde vom Autor gelöscht.
von Cartman E. (cartmaneric)


Angehängte Dateien:

Lesenswert?

Versuchs mal damit.

Standarddisclaimer for Software applies. [x]
von Εrnst B. (ernst)


Lesenswert?

Geht's immer noch um dein Projekt, Edge/Chrome-Formularfelder mit Werten 
aus deiner Buchhaltung vorzubelegen?

Warum den umständlichen Weg über "Klaus" und "Jürgen"?
von Karl K. (leluno)


Lesenswert?

Rene K. schrieb:
> Mit eben diesen Programm die zweite Taste so programmieren?! Oder kann
> das Programm das nicht, wie programmierst du denn die Taste?

Das Programm öffnet eine Form, zeigt verschiedene Daten in einer Listbox 
an und nimmt das, worauf der Mousezeiger steht, in das clipboard. Das 
ist mit c# einfach.

Das Problem der zweiten Taste ist, dass in einer anderen Anwendung - 
z.B. pdf - agiert wird.

F. schrieb:
> Autohotkey?

Das könnte funktionieren

Cartman E. schrieb:
> Angehängte Dateien:
>           CLICKV.EXE (87,5 KB)

verstehe ich nicht.
von Karl K. (leluno)


Angehängte Dateien:

Lesenswert?

Εrnst B. schrieb:
> eht's immer noch um dein Projekt, Edge/Chrome-Formularfelder mit Werten
> aus deiner Buchhaltung vorzubelegen?

BeA, Elster, Pdf-Formulare - überall das Gleiche. Verschiedene Werte aus 
vorhandenen Dateien müssen übertragen werden. Das ist sehr viel 
Clickerei über das Clipboard. Eine brauchbare Lösung habe ich noch nicht 
gefunden. Stand jetzt: ein c#-Formular, das aktenbezogen relevante Daten 
bereitstellt, die über
1
       private void listBox1_MouseMove(object sender, MouseEventArgs e)
2
       {
3
           // Mausposition in Client-Koordinaten umwandeln
4
           Point point = listBox1.PointToClient(Cursor.Position);
5
6
           // Index des Elements unter dem Mauszeiger ermitteln
7
           int index = listBox1.IndexFromPoint(point);
8
9
           // Wenn ein gültiges Element gefunden wurde, selektieren
10
           if (index >= 0)
11
           {
12
               listBox1.SelectedIndex = index;
13
               textBox2.Text= listBox1.Text;
14
               try {
15
                   Clipboard.SetText (textBox2.Text);  
16
17
} catch { } 
18
           }
19
       }
ins clipboard genommen werden. Wenn der Abruf dieser Daten mit der 
zweiten Maustaste sicher gelingen würde, wäre das eine große 
Erleichterung.
: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

Karl K. schrieb:
> BeA, Elster, Pdf-Formulare - überall das Gleiche.

Nur so als Idee, ohne dir deinen Copy&Paste-Beschleuniger ausreden zu 
wollen:

Bei Web-Formularen kann man sich das Leben über den Chrome/Edge 
Remote-Debugger leicht machen.

Konzept/Idee in C#:
1
using PuppeteerSharp;
2
...
3
await page.GoToAsync("https://www.online-mahnantrag.de/....");
4
// Auswahl Bundesland
5
// Klick Weiter
6
...
7
// Die Seite verwendet ein altbackenes Frameset...
8
var frame = page.Frames.FirstOrDefault(f => f.Name == "form");
9
10
// Prüfen ob das Formular geladen ist:
11
await frame.WaitForSelectorAsync("input[name=_bName1]"); 
12
13
// "Eintippen" der Werte
14
await frame.TypeAsync("input[name=_bName1]", "Max");
15
await frame.TypeAsync("input[name=_bName2]", "Mustermann");
16
await frame.TypeAsync("input[name=_bStr1]", "Mahnstraße 1");
17
await frame.TypeAsync("input[name=_bPLZ]", "12345");
18
...
19
// Warten bis Benutzer die Werte kontrolliert und den 
20
// Weiter-Knopf im Browser geklickt hat
21
await page.WaitForNavigationAsync(...);
22
// (Oder direkt vom Programm klicken lassen)
23
...
24
// Nächste Seiten Befüllen...
25
...
26
// Profit.

Bei PDF-Formularen geht's einfacher:
1
using IronPdf;
2
3
...
4
    // PDF-Formular laden
5
    PdfDocument pdf = PdfDocument.FromFile("Formular-Vorlage.pdf");
6
7
    // Formularfelder befüllen
8
    // Die Feldnamen entsprechen denen im PDF-Dokument
9
    pdf.Form.Fields["Vorname"].Value = "Max";
10
    pdf.Form.Fields["Nachname"].Value = "Mustermann";
11
    pdf.Form.Fields["Strasse"].Value = "Musterstraße 1";
12
    pdf.Form.Fields["PLZ"].Value = "12345";
13
    
14
...
15
16
    // Ausgefülltes PDF speichern
17
    pdf.SaveAs("Ausgefuelltes-Formular.pdf");

Bei nativen Programmen (oder Java) ist das leider nicht so einfach.
von Karl K. (leluno)


Lesenswert?

Εrnst B. schrieb:

Das sieht gut aus - das werde ich ausprobieren.

ich habe jetzt:
1
       [STAThread ]
2
       static void Main()
3
       {
4
           //Console.WriteLine("Click will happen in 2 seconds...");
5
           //Thread.Sleep(2000); // Delay so you can move the mouse
6
7
             Clipboard.SetText("testx");
8
          MouseClick();
9
           MouseClick();
10
           MouseClick();
11
          
12
             Clipboard.GetText();
13
           //SendKeys.SendWait("^V");
14
15
           //Console.WriteLine("Mouse click sent.");
16
       }
17
18
       static void MouseClick()
19
       {
20
           INPUT[] inputs = new INPUT[2];
21
22
           // Mouse down
23
           inputs[0].type = INPUT_MOUSE;
24
           inputs[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
25
           Thread.Sleep(100);
26
           // Mouse up
27
           inputs[1].type = INPUT_MOUSE;
28
           inputs[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
29
30
           // Send both events
31
           if (SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT))) == 0)
32
           {
33
               Console.WriteLine("Mouse click failed. Error: " + Marshal.GetLastWin32Error());
34
           }
35
       }
36
   }

MouseClick() wird aber leider nicht korrekt ausgeführt.
von Εrnst B. (ernst)


Lesenswert?

Karl K. schrieb:
> MouseClick() wird aber leider nicht korrekt ausgeführt.

Vermute du musst die andere App in den Vordergrund zwingen.
1
        Point currentPos = Cursor.Position;
2
        IntPtr hWnd = WindowFromPoint(currentPos);
3
        SetForegroundWindow(hWnd);
4
        Thread.Sleep(100);
5
...
Und MouseClick() funktioniert vmtl. nur innerhalb deiner eigenen 
Anwendung.
Alternative:
1
  mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, (uint)currentPos.X, (uint)currentPos.Y, 0, 0);
mit entsprechendem import aus der user32.dll, aber das brauchst du auch 
schon für die "WindowFromPoint" etc.
von Cartman E. (cartmaneric)


Lesenswert?

Karl K. schrieb:

> Cartman E. schrieb:
>> Angehängte Dateien:
>>           CLICKV.EXE (87,5 KB)
>
> verstehe ich nicht.

Das du nüx verstehst, hast du schon überzeugend demonstriert.
Andere sind da schon weiter.
von Karl K. (leluno)


Angehängte Dateien:

Lesenswert?

Εrnst B. schrieb:
> Vermute du musst die andere App in den Vordergrund zwingen.

Vielen Dank für deine Hilfe. Es funktioniert jetzt.
von Karl K. (leluno)


Lesenswert?

neue idee:

Nachdem das Programm Position und window-hwdn gespeichert hat wird eine 
c#-form mit einer Listbox aufgerufen, in der Daten eines Datensatzes 
durch mouseclick angewählt werden und dann in das hwnd window 
eingetragen werden. Damit hat man dann praktisch ein verwaltetes 
clipboard für mehrere Werte.
von Karl K. (leluno)


Angehängte Dateien:

Lesenswert?

Karl K. schrieb:
> neue idee:

es funktioniert - noch nicht perfekt, aber besser als erwartet.
von Karl K. (leluno)


Angehängte Dateien:

Lesenswert?

Programm erste Taste/Dateneingabe funktioniert.

Auf die zweite Taste soll ein Programm, das
- per Doppelklick ein Aktenzeichen markiert
- das Aktenzeichen auswertet und die zugehörige Akte auswählt
- die BeA-Voreinstellungen so ändert, dass direkt in der Akte 
gespeichert wird.


Die ersten beiden Punkte funktionieren. Die BeA-Voreinstellungen ergeben 
sich aus dem jeweils letzten Speichervorgang. Das muss irgendwo auf der 
Festplatte abgelegt sein. Nur wo?
von Stefan K. (stefan1971)


Lesenswert?

Vielleicht lohnt ein Blick in Richtung HID Remapper: 
https://www.remapper.org/

Dort geht es um die Software, die Hardware muss man separat beschaffen. 
In meiner Arbeitsplatzumgebung eigentlich ungenutzte Tasten habe ich mir 
so nützlicher gemacht: Capslock-Taste ist zum Mausdoppelklick 
umdefiniert zwecks Entlastung der rechten Hand. Apostroph-Taste links 
von Backspace wird zu Strg-Backspace, um das ganze Wort zu löschen, usw. 
Weitere Möglichkeiten sind da denkbar. Ob es zum Anwendungsfall hier 
passt, ist natürlich die Frage.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.