| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Mausklick simulieren schlägt fehl (1180 mal gelesen)
|
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 21. Okt. 2020 13:34 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, eigentlich möchte ich nur einen linken Mausklick simulieren. Unter VBA funktioniert es wie gewünscht mit folgendem Code: Code:
Public Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long Public Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) Public Const MOUSEEVENTF_LEFTDOWN = &H2 Public Const MOUSEEVENTF_LEFTUP = &H4 Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8 Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
Private Sub SingleClick(x As Long, y As Long) SetCursorPos x, y 'x and y position mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 End Sub
Setze ich das Ganze in VB.net um, mit einigen Anpassungen (statt Long -> Integer), sieht es wie folgt aus:
Code:
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Integer Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal dwData As Integer, ByVal dwExtraInfo As Integer) Public Const MOUSEEVENTF_LEFTDOWN As Integer = &H2 Public Const MOUSEEVENTF_LEFTUP As Integer = &H4 Public Const MOUSEEVENTF_RIGHTDOWN As Integer = &H8 Public Const MOUSEEVENTF_RIGHTUP As Integer = &H10 Private Sub SingleClick(x As Integer, y As Integer) SetCursorPos(x, y) 'x and y position mouse_event(&H2, 0, 0, 0, 0) 'Leftdown mouse_event(&H4, 0, 0, 0, 0) 'Leftup End Sub
Leider funktioniert das Ganze nicht. Mittlerweile habe ich unzählige Varianten ausprobiert welche ich dazu im Netz gefunden habe. SetCursorPos wird wie gewünscht ausgeführt. Kann mir jemand einen Tipp geben woran es scheitert? Grüße
EIBe 3D Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 21. Okt. 2020 17:51 <-- editieren / zitieren --> Unities abgeben:
Zur Ergänzung: der Code in einer einfachen Konsolenanwendung funktioniert problemlos
Code:
Module Module1 Private Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Integer Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal dwData As Integer, ByVal dwExtraInfo As Integer) Sub Main() Dim ix As Integer Dim iy As Integer ix = 1000 iy = 2000 Console.WriteLine("x: " & ix) Console.WriteLine("y: " & iy) Console.ReadLine() mouse_event(2, 0, 0, 0, 0) 'klappt ganz fantastisch mouse_event(4, 0, 0, 0, 0) 'ebenso Console.ReadLine() End Sub End Module
Ich kann es wirklich nicht nachvollziehen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 22. Okt. 2020 10:07 <-- editieren / zitieren --> Unities abgeben:
Als Info: Hat sich erledigt, das eigentliche Problem liegt an einer anderen Stelle. Nachgeschaltet habe ich eine Schleife welche abfragt ob der Befehle der am Mauszeiger hängt ausgeführt ist. Dort steck zur Verzögerung der Schleife ein DoEvents drin welches die Probleme verursacht. Leider habe ich noch keine Möglichkeit gefunden DoEvents adäquat zu tauschen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 24. Okt. 2020 07:34 <-- editieren / zitieren --> Unities abgeben: Nur für EIBe 3D
|
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 26. Okt. 2020 14:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, insgesamt hat sich das Problem erledigt. Ich hatte bei dem DoEvents Aufruf einen Fehler bei der Portierung auf VB.net gemacht. Trotzdem hier wofür das Ganze notwendig ist:
Zweck ist es, bei einer in das PDMs eingecheckten Zeichnung, die im PDM verwaltete Stückliste aufzurufen. Da ich nicht an die API des PDM komme, muss ich die Funktion über den CommandManager aufrufen. Dann erwartet der Befehl der PDM-Integration zwingend einen Mausklick in das Grafikfenster. Erst dadurch wird der Befehl abgeschlossen und ich kann die Stückliste wie gewünscht per Inventor-API manipulieren, Artikelüberschreibung der Stückliste rückspeichern etc. pp. Allerdings musste ich per Schleife verzögern und wiederholt prüfen ob vor weiterer Manipulation der Stückliste diese bereits ordnungsgemäß abgelegt wurde. Zwecks Verzögerung eben noch das DoEvents in der Schleife. Grüße
EIBe 3D
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 30. Okt. 2020 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für EIBe 3D
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|