Autor
|
Thema: dialogfenster öffnen und bearbeiten (3432 mal gelesen)
|
adrian83 Mitglied student
Beiträge: 62 Registriert: 22.11.2012 -Windows 7 64 bit -Catia V5 r21
|
erstellt am: 02. Jun. 2013 23:57 <-- editieren / zitieren --> Unities abgeben:
hallo! besteht die möglichkeit in catia per VB-makro ein bestimmtes dialogfenster zu öffnen,wenn ich weiß wie es heißt und dort dann so zu tun,als würden per maus buttons gedrückt,häkchen gesetzt usw?
------------------ -Windows 7 64 bit -Catia V5 r19 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 03. Jun. 2013 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für adrian83
Zitat: Original erstellt von adrian83: hallo!besteht die möglichkeit in catia per VB-makro ein bestimmtes dialogfenster zu öffnen,wenn ich weiß wie es heißt und dort dann so zu tun,als würden per maus buttons gedrückt,häkchen gesetzt usw?
Hallo Adrian, ja das geht bzw. leider nur über Umwege. Hierfür brauchst du die Windows-API. Hier mal ein bissel Beispielcode. Code:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long Private Declare 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 Sub LeftClick() LeftDown LeftUp End Sub Public Sub LeftDown() mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 End Sub Public Sub LeftUp() mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 End Sub hWnd = FindWindow(vbNullString, "Fenstertitel") SetCursorPos CurPosX, CurPosY
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
adrian83 Mitglied student
Beiträge: 62 Registriert: 22.11.2012 -Windows 7 64 bit -Catia V5 r21
|
erstellt am: 03. Jun. 2013 12:51 <-- editieren / zitieren --> Unities abgeben:
Okay,vielen Dank für den code Rick. ist das die saubere alternative zu AppActivate() ? bei dem Fenster dass ich öffnen und bearbeiten will handelt es sich um ein Catia-Fenster ------------------ -Windows 7 64 bit -Catia V5 r19 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 05. Jun. 2013 13:30 <-- editieren / zitieren --> Unities abgeben: Nur für adrian83
Also ich finde FindWindowA auch besser als AppActivate, sauber ist aber nie, wenn Du Dialoge auf diese Weise steuerst, dafür müsstest Du schon das WIndows-Objektmodell auslesen und ansteuern und das ist bei weitem nicht trivial, vor allem unter Windows 6.1 . ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
adrian83 Mitglied student
Beiträge: 62 Registriert: 22.11.2012 -Windows 7 64 bit -Catia V5 r21
|
erstellt am: 21. Jun. 2013 16:59 <-- editieren / zitieren --> Unities abgeben:
hallo! leider geht hier garnix . ich möchte nur mit vba in der nc umgebung das fenster für die aufspannung aufmachen. hWnd = FindWindow(vbNullString, "Part Operation") läuft ohne Fehler, aber es fehlt scheinbar noch was,um das Fenster in den Vordergrund zu holen. appActivate ("Part Operation") nacht auch nix. alles was ich im vbarchiv.net dazu finde bezieht sich auf ältere windows versionen. ich hab ja win7 mit 64 bit. liegt es iw daran? ------------------ -Windows 7 64 bit -Catia V5 r19 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 26. Jun. 2013 09:23 <-- editieren / zitieren --> Unities abgeben: Nur für adrian83
Hallo Adrian, mit dem FindWindow bekommst du nur eine Zahl zurück, die das Fenster definiert. Was dir noch fehlt, ist der Befehl, um das Fenster in den Vordergrund zu setzen. Code:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As LongSub FocusWindow(ByVal Windowname as string) Dim hWnd As Long hWnd = FindWindow(vbNullString, Windowname) If hWnd = 0 Then MsgBox "No Window found!", vbCritical else SetForegroundWindow hWnd End If End Sub
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
adrian83 Mitglied student
Beiträge: 62 Registriert: 22.11.2012 -Windows 7 64 bit -Catia V5 r21
|
erstellt am: 26. Jun. 2013 17:29 <-- editieren / zitieren --> Unities abgeben:
okay Rick,das ist nett von dir! und diese Fenster-Funktionen gehen starten alle ohne probleme aus dem VBA-editor raus? ich versuche auch mit mit shell-objekten zu arbeiten, was leider oft zu runtime-exceptions führt(click of to terminate) muss ich für solche vorhaben bei tool-references noch mehr bibliotheken einbinden?
------------------ -Windows 7 64 bit -Catia V5 r19 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
adrian83 Mitglied student
Beiträge: 62 Registriert: 22.11.2012 -Windows 7 64 bit -Catia V5 r21
|
erstellt am: 12. Jul. 2013 15:15 <-- editieren / zitieren --> Unities abgeben:
hallo! leider funktioniert der code noch nicht wie er soll. der hWnd ist immer 0. also es geht darum, dass das window namens "Part Operation" noch nicht geöffnet ist. es soll geöffnet & im vordergrund sein. wie geht das denn? ------------------ -Windows 7 64 bit -Catia V5 r19 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 12. Jul. 2013 15:32 <-- editieren / zitieren --> Unities abgeben: Nur für adrian83
Zitat: Original erstellt von adrian83: hallo!leider funktioniert der code noch nicht wie er soll. der hWnd ist immer 0. also es geht darum, dass das window namens "Part Operation" noch nicht geöffnet ist. es soll geöffnet & im vordergrund sein. wie geht das denn?
Hallo, du musst so gesehen auf das Fenster warten. Dein Programm läuft deutlich schneller ab, als sich das Fenster öffnet. Hier mal ein Beispiel, wie ich soetwas löse... Code:
i = 1 Do hWndTmp1 = FindWindow(vbNullString, WindowTitle) If hWndTmp1 <> 0 Then 'Mausevents hier... End If DoEvents Wait (100) 'Warten, da sonst das Programm bzw. die Schleife die gesamte Leistung zieht i = i + 1 'Damit keine Endlosschleife entstehen kann Loop Until hWndTmp1 <> 0 or i = 100 'Wiederhole solang, bis das Fenster gefunden und verarbeitet wurde oder 10 Sekunden vergangen sind
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 12. Jul. 2013 15:40 <-- editieren / zitieren --> Unities abgeben: Nur für adrian83
Ich habe gerade nochmal darüber gelesen, habe schließlich auch nurwas zusammenkopiert und so erweitert, dass es Programmneutral ist. So fände ich es für diese Beispiel besser... Code:
i = 1 Do hWndTmp1 = FindWindow(vbNullString, WindowTitle) If hWndTmp1 <> 0 Then 'Mausevents hier... End If DoEvents Wait (100) 'Warten, da sonst das Programm bzw. die Schleife die gesamte Leistung zieht i = i + 1 'Damit keine Endlosschleife entstehen kann If i = 100 then Msgbox "Timeout: Das Fenster hat sich nicht geöffnet!" exit sub endif Loop Until hWndTmp1 'Wiederhole solang, bis das Fenster gefunden und verarbeitet wurde
Sry aber bin halt ein kleiner Perfektionist und der Code ist so einfach sauberer geschrieben, da so das Programm nicht unkontrolliert weiter läuft. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
adrian83 Mitglied student
Beiträge: 62 Registriert: 22.11.2012 -Windows 7 64 bit -Catia V5 r21
|
erstellt am: 12. Jul. 2013 20:58 <-- editieren / zitieren --> Unities abgeben:
hi Rick! danke nochmal. aber es funzt leider nicht. wait() kennt vba nicht. kann man es durch sleep ersetzen? muss ich vllt. irgend was an den references einstellen? ich habe folgenden code probiert, leider kommt nur die timout:... Code:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Sub catmain() Dim x, hWndTmp1 As Long Dim WindowTitle As String WindowTitle = "Part Operation" I = 1 Do hWndTmp1 = FindWindow(vbNullString, WindowTitle) Sleep (1000) If hWndTmp1 <> 0 Then x = SetForegroundWindow(hWndTmp1) CATIA.RefreshDisplay = True CATIA.Caption = True Sleep (1000) End If DoEvents Sleep (1000) 'Warten, da sonst das Programm bzw. die Schleife die gesamte Leistung zieht I = I + 1 'Damit keine Endlosschleife entstehen kann If I = 3 Then MsgBox "Timeout: Das Fenster hat sich nicht geöffnet!" Exit Sub End If Loop Until hWndTmp1 'Wiederhole solang, bis das Fenster gefunden und verarbeitet wurde End Sub
------------------ -Windows 7 64 bit -Catia V5 r19 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 13. Jul. 2013 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für adrian83
|