Programm mit mouseclick + ctrl-V

#8035833
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
Beitrag #8036001 wurde vom Autor gelöscht.
#8036059
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.

#8036108
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.

Angehängte Dateien:
: Bearbeitet durch User
#8036116
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.

#8036121
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.

#8036128
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.

#8036620
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.

#8037768
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?

Angehängte Dateien:
#8037804
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren