Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  dialogfenster öffnen und bearbeiten

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  dialogfenster öffnen und bearbeiten (3432 mal gelesen)
adrian83
Mitglied
student


Sehen Sie sich das Profil von adrian83 an!   Senden Sie eine Private Message an adrian83  Schreiben Sie einen Gästebucheintrag für adrian83

Beiträge: 62
Registriert: 22.11.2012

-Windows 7 64 bit
-Catia V5 r21

erstellt am: 02. Jun. 2013 23:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für adrian83 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von adrian83 an!   Senden Sie eine Private Message an adrian83  Schreiben Sie einen Gästebucheintrag für adrian83

Beiträge: 62
Registriert: 22.11.2012

-Windows 7 64 bit
-Catia V5 r21

erstellt am: 03. Jun. 2013 12:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für adrian83 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von adrian83 an!   Senden Sie eine Private Message an adrian83  Schreiben Sie einen Gästebucheintrag für adrian83

Beiträge: 62
Registriert: 22.11.2012

-Windows 7 64 bit
-Catia V5 r21

erstellt am: 21. Jun. 2013 16:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für adrian83 10 Unities + Antwort hilfreich

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 Long

Sub 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


Sehen Sie sich das Profil von adrian83 an!   Senden Sie eine Private Message an adrian83  Schreiben Sie einen Gästebucheintrag für adrian83

Beiträge: 62
Registriert: 22.11.2012

-Windows 7 64 bit
-Catia V5 r21

erstellt am: 26. Jun. 2013 17:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von adrian83 an!   Senden Sie eine Private Message an adrian83  Schreiben Sie einen Gästebucheintrag für adrian83

Beiträge: 62
Registriert: 22.11.2012

-Windows 7 64 bit
-Catia V5 r21

erstellt am: 12. Jul. 2013 15:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für adrian83 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für adrian83 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von adrian83 an!   Senden Sie eine Private Message an adrian83  Schreiben Sie einen Gästebucheintrag für adrian83

Beiträge: 62
Registriert: 22.11.2012

-Windows 7 64 bit
-Catia V5 r21

erstellt am: 12. Jul. 2013 20:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für adrian83 10 Unities + Antwort hilfreich

Hallo,

nein sleep geht nicht, da es den gesamten Kontext bzw. in diesem Fall auch CATIA schlafen legt. Wait muss auch nur deklariert werden.

Ich würde außerdem lieber die Schleife hundert mal laufen lassen, als solange Wartezeiten zu erschaffen. Ein Schleifendurchlauf braucht eigentlich kaum Leistung.

Außerdem kannst du doch mal die geöffneten WindowTitle auslesen und schauen, ob der Titel überhaupt so richtig ist.

------------------
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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz