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
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?
Karl K. schrieb: > kleines Problem. Ich habe eine Hama-Maus mit zwei programmierbaren > Tasten. Eine genauere Bezeichnung hälst Du für überflüssig?
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.
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.
Versuchs mal damit. Standarddisclaimer for Software applies. [x]
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"?
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.
Ε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
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.
Ε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.
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.
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.
Εrnst B. schrieb: > Vermute du musst die andere App in den Vordergrund zwingen. Vielen Dank für deine Hilfe. Es funktioniert jetzt.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.


