Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Win7 - Fensterproblem

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:  Win7 - Fensterproblem (6345 mal gelesen)
tberger
Mitglied
Application Manager CATIA V5 / V6


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

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 04. Mai. 2012 08:07    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 zusammen,

ich habe einige Makros, bei denen ein CATIA-Befehlsfenster (gestartet mit StartCommand) mittels kleiner Timerschleife und senden eines <ENTER> schlichtweg nur bestätigt wird, um weiteres im nachfolgenden Code ausführen zu können. Stand damals R19SP3 auf Win XP.

Bei unserer Testinstallation Win7 und R21SP3 scheinen nun die Fenster nicht mehr rechtzeitig zu kommen bzw. im Hintergrund zu liegen. Somit wird dann das "oberste" bzw. aktive Fenster bestätigt und natürlich kommt dann nur Quark dabei raus.

Kann mir jemand zu diesem Problem der Fensterfolge etwas berichten?
Oder muss ich wirklich über die Windows-Logik das Fenster ausfindig machen (was natürlich nicht funktionieren kann, wenn das Fenster nach dem SendCommand gar nicht erst trotz timer rechtzeitig aufkommt sondern zu spät = erst nach Makrolauf)?

------------------
Grüße aus dem Thurgau
Thomas

+++++++++++++++++++++++++++++++++

CATIA - eine Laune der Natur ...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Jens Hansen
Mitglied
Senior Consult


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

Beiträge: 1055
Registriert: 05.08.2000

Win7
CATIA V5 R19
VB.Net
C#

erstellt am: 04. Mai. 2012 08:35    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 tberger 10 Unities + Antwort hilfreich

Hallo Thomas,
hast du daran gedacht die Fenster nach vorne zu holen? Dafür gibt es ja die entsprechende API "user32.dll".
Des weiteren habe ich gute Erfahrungen damit gemacht, anstatt SEND den Befehl SENDWAIT zu verwenden. Dann kommt es auch bei Laufzeitunterschieden nicht zu Problemen.

SG

Jens

------------------
Inoffizielle CATIA-Hilfeseite
Kochbuch - CATIA V5 automatisieren

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: 04. Mai. 2012 08:52    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 tberger 10 Unities + Antwort hilfreich

Hallo Thomas,
ja das Problem kenne ich. Es hat mit den Auf- und Abblendfunktionen von Win7 zu tun. Du musst mit einer Warteschleife die Verarbeitung um ca. eine halbe Sekunde verzögern, denn die Holfunktion hat das gleiche Problem. Das Problem ist, dass das Fenster schon gefunden wird, wärend es noch schön nach oben geslidet wird. Zu diesem Zeitpunkt reagiert das Fenster aber noch nicht auf Sendkey-Befehle. Die Verzögerung liegt generell im Millisekundenbereich, ist aber von CPU-Leistung etc. abhängig. Daher würde ich die Verzögerung nicht zu knapp bemessen. Ich habe festgestellt, dass die halbe Sekunde Verzögerung erstens nicht wirklich spürbar ist und zweitens mehr als ausreicht.

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

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: 04. Mai. 2012 08:55    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 tberger 10 Unities + Antwort hilfreich

Ich kann Jens da nur zustimmen, da musste leider in die Windows-API reingreifen.

Eventuell hilft aber auch schon AppActivate (damit kann man auch manche Fenster in den Vordergrund holen).

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

tberger
Mitglied
Application Manager CATIA V5 / V6


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

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 04. Mai. 2012 09:01    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

Vielen Dank erst mal an euch alle, das ging ja flott.

Werde das versuchen umzusetzen.

------------------
Grüße aus dem Thurgau
Thomas

+++++++++++++++++++++++++++++++++

CATIA - eine Laune der Natur ...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

geekv5
Mitglied
Konstrukteur


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

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 15. Jun. 2012 15:05    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 tberger 10 Unities + Antwort hilfreich

Ist zwar schon etwas her, aber ich hatte das selbe Problem und hab das folgendermaßen unter Zuhilfenahme der Win32 API realisiert:

Code:

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Const WM_GETTEXT = &HD
Public Const BM_CLICK = &HF5&
Public O_hwnd As Long
Public C_hwnd As Long

Sub CATMain()

CATIA.StartCommand "StartCommand"
CATIA.RefreshDisplay = True

Do While F_hwnd = 0

Sleep 500
F_hwnd = FindWindow(vbNullString, "FensterName")

Loop

EnumChildWindows F_hwnd, AddressOf EnumChildWindow, 0

Do While F_hwnd <> 0

Sleep 500
F_hwnd = FindWindow(vbNullString, "FensterName")

Loop

End Sub

Public Function EnumChildWindow(ByVal hChild As Long, ByVal lParam As Long) As Long

    Dim iClass As String
    Dim iText As String
    Dim j As Integer
   
    iClass = Space(256)
    j = GetClassName(hChild, iClass, 63)
    iClass = Left(iClass, j)
    iText = Space(256)
    j = SendMessage(hChild, WM_GETTEXT, 255, iText)
    iText = Left(iText, j)
   
    If iText = "OK" Then
   
        O_hwnd = hChild
        SendMessage O_hwnd, BM_CLICK, 0, 0
   
    End If
   
    EnumChildWindow = 1
   
End Function


Es wird gewartet bis das Fenster offen ist, dann wird OK geklickt und wieder gewartet bis das Fenster zu ist.. Vielleicht hat noch jmd Verwendung dafür   

Gruß

[Diese Nachricht wurde von geekv5 am 15. Jun. 2012 editiert.]

[Diese Nachricht wurde von geekv5 am 15. Jun. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 30. Jan. 2015 13:12    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 tberger 10 Unities + Antwort hilfreich


2015-01-3013_09_41-Clipboard.jpg

 
Hallo Zusammen,

ich wollte gerade den Code von geekv5 mal nutzen, aber kriege ich folgende Fehelmeldung.
Könnt Ihr mal weiterhelfen?
danke im Voraus

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: 30. Jan. 2015 13: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 tberger 10 Unities + Antwort hilfreich

Hallo,

du musst die VBA für 64bit installieren. Zumindest schlussfolgere ich das aus der Meldung heraus. Die Installation findest du separat auf den ServicePack CD´s.

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

runkelruebe
Ehrenmitglied V.I.P. h.c.
Straßen- / Tiefbau



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

Beiträge: 8075
Registriert: 09.03.2006

Drauß vom Walde komm ich her,
verlaufen hab ich mich gar sehr ;-)

erstellt am: 30. Jan. 2015 13: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 Nur für tberger 10 Unities + Antwort hilfreich

Moin,

ich widerspreche nur ungern hochgeschätzten usern (  Rick) in fremden Brettern, aber ich würde die Fehlermeldung "The code in this project must be updated for use on 64-bit systems" eher in diese Richtung interpretieren wollen: http://goo.gl/yMnvy4 (gekürzt, da die Forensoftware die Originaladresse nicht mag, führt zu msdn.microsoft.com )

VBA-Makro wurde unter 32bit entwickelt und soll jetzt auf einem 64bit-System laufen.

Mehr dazu inkl. vieler hilfreicher links siehe u.a. auch im SWX-Brett: http://forum.cad.de/foren/ubb/Forum2/HTML/025464.shtml
Sollte es das nicht gewesen sein: War nett bei euch, schönes Wochenende!  

[rredit]links gefixt[/rredit]
------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

[Diese Nachricht wurde von runkelruebe am 30. Jan. 2015 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

JPF
Mitglied
Programmierer


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

Beiträge: 128
Registriert: 17.08.2001

CATIA V5R19 SP9--HP420,Intel(R) Xeon(R) CPU E5-1620 3.60GHz,32 GB Ram,
NVIDIA Quadro 2000--Windows 7 Enterprise 64bit

erstellt am: 02. Feb. 2015 07:10    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 tberger 10 Unities + Antwort hilfreich

Hallo Zusammen,

dieses Problem hatte ich auch!
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Geholfen hat mir aus "AS LONG" ein "AS INTEGER" zu machen.

Gruss JPF

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 02. Feb. 2015 09:44    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 tberger 10 Unities + Antwort hilfreich

Hallo JPF,

das widerspricht allem, was ich über die Api weiss - oder zu wissen glaube.
Der Rückgabewert von Findwindow ist ein Handle zum gefundenen Fenster.
Seit 32-bit Windows(VB4/32; WinNT) ist der Wert vom Typ 'long', unter Win3 war der Wert 'Integer'.

Ein Auszug aus dem SDK:

Zitat:

FindWindow

The FindWindow function retrieves a handle to the top-level window whose class name and window name
match the specified strings.
This function does not search child windows.
This function does not perform a case-sensitive search.
.
.
.
Return Values
If the function succeeds, the return value is a handle to the window that has the specified class name and window name.


Ich denk mal, das Problem liegt woanders.

Tschau,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 02. Feb. 2015 11:47    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 tberger 10 Unities + Antwort hilfreich

Hallo imation,

probier's mal hiermit:

Bas-Modul:

Code:

Option Explicit
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const BM_CLICK = &HF5&

'---------------------------------------------------------------------------------------
' Procedure : CloseDialog
' Author    : jherzog
' Date      : 02.02.2015
' Time      : 11:25
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose  : Close open dialog window by sending click message
' Parms    : strDlgWnd: Dialog window's title
'          : strBtnWnd: Button's text
' Ret. Value: -
'
' Syntax    : CloseDialog "Properties", "OK"
'
' Prereqs  : Opened dialog window
' Remarks  : Select a valid element in the Catia tree first
'          : Tested with V5R19 and V5R21; Win7/64 Pro
'---------------------------------------------------------------------------------------
'
Public Sub CloseDialog(strDlgWnd As String, strBtnWnd As String)
  Dim hWndDlg As Long
  Dim hWndOKButton As Long
 
  'get dialog's handle
  hWndDlg = FindWindow(vbNullString, strDlgWnd)
 
  'get OK button's handle
  hWndOKButton = FindWindowEx(hWndDlg, 0&, vbNullString, strBtnWnd)
 
  'close dialog window
  SendMessage hWndOKButton, BM_CLICK, 0, 0
End Sub


Form:

Code:

.
.
.
  CATIA.StartCommand "Properties"
  CATIA.RefreshDisplay = True
  CloseDialog "Properties", "OK"


Öffnet und schliesst das 'Properties'-Fenster (nachdem ich nicht weiss, welcher Dialog Dir Ärger macht).
Wichtig ist, dass vor der Makro-Ausführung etwas im Strukturbaum aktiviert wird,
das auch 'Properties' besitzt. Sonst gibt's eine Fehlermeldung von Catia.

Hope it helps,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 04. Feb. 2015 06:31    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 tberger 10 Unities + Antwort hilfreich

Hallo Joe,

sorry für die späte Antwort.
Es hat leider nichts gebracht, ich kriege immer die gleiche Fehlermeldung (R24 64bit).

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 04. Feb. 2015 12:03    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 tberger 10 Unities + Antwort hilfreich

Hallo imation,

das liegt vermutlich an VBA7. Siehe hierzu:
[URL=https://msdn.microsoft.com/en-us/library/ee691831%28loband%29.aspx#odc_office2010_Compatibility32bit64bit_IntroducingVBA7CodeBase][/URL]

Ersetze die Zeilen:

Code:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

mit folgenden(ungetestet; ich hab noch R19):

Code:

Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)



Ich hab versucht den im Link zitierten Artikel umzusetzen.
Denkbar wäre auch die konditionellen Kompilier-Konstanten zu verwenden a la

#if VBA7 then
.
.

Unter Umständen musst noch ein wenig nachfeilen.

Hope it helps,
Joe

PS: Welche Commands startest Du denn (z.B.?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 04. Feb. 2015 14:08    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 tberger 10 Unities + Antwort hilfreich

Sieht so aus, als müsste die Deklaration für FindWEindow so lauten:
Code:

Private Declare PtrSafe Function FindWindow _
Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

FindwindowEx entspechend. Sendmessage vermutlich auch.

Tschau,

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 04. Feb. 2015 18:18    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 tberger 10 Unities + Antwort hilfreich

Hallo Joe,

vielen Dank für Deine Mühe. Ich habe die Deklaration umgeschrieben und jetzt kriege ich ein Error "type of mismatch" hier:

Code:
EnumChildWindows F_hwnd, AddressOf EnumChildWindow, 0


StartCommand: "Generate CATPart from Product"

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 04. Feb. 2015 19:17    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 tberger 10 Unities + Antwort hilfreich

Wie hast Du EnumChildWindows deklariert?
So?
Statt:
Code:

Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long


für VBA7 so:
Code:

Public Declare PtrSafe Function EnumChildWindows Lib "user32" (ByVal hWndParent As LongPtr, ByVal lpEnumFunc As LongPtr, ByVal lParam As Long) As LongPtr


Nachdem ich's auch nicht sicher weiss, würde ich erstmal wie oben beschrieben ausprobieren,
danach lParam auf longPtr setzen.

Vielleicht hilft's auch für den Wert von lParam '0&' zu schreiben.

Falls Du's noch nicht getan hast:
Wenn ich mich recht entsinne, müssen die Procs zu Callback-Funktionen in einem Modul abgelegt werden,
d.h. die 'EnumChildWindow'-Prozedur müsste in ein Modul.

Tschau,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 04. Feb. 2015 19:52    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 tberger 10 Unities + Antwort hilfreich

Ich hab noch 'n Bißchen gespielt mit ProductToPart und dabei meine kleine Routine leicht verändert.

Ergebnis:

Form:

Code:

  CATIA.StartCommand "Generate CATPart from Product"
  CloseDialog "Generate CATPart from Product", "OK"

Modul:

Code:

'---------------------------------------------------------------------------------------
' Procedure : CloseDialog
' Author    : jherzog
' Date      : 02.02.2015
' Time      : 11:25
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose  : Close open dialog window by sending click message
' Parms    : strDlgWnd: Dialog window's title
'          : strBtnWnd: Button's text
' Ret. Value: -
'
' Syntax    : CloseDialog "Properties", "OK"
'
' Prereqs  : Opened dialog window
' Remarks  : Select a valid element in the Catia tree first
'          : Tested with V5R19 and V5R21; Win7/64 Pro
'---------------------------------------------------------------------------------------
'
Public Sub CloseDialog(strDlgWnd As String, strBtnWnd As String)
  Dim hWndDlg As Long
  Dim hWndButton As Long
 
  Do While hWndDlg = 0                'wait for handle
      'get dialog's handle
      hWndDlg = FindWindow(vbNullString, strDlgWnd)
      DoEvents                        'do something else
  Loop
  Do While hWndButton = 0            'wait for handle
      'get OK button's handle
      hWndButton = FindWindowEx(hWndDlg, 0&, vbNullString, strBtnWnd)
      DoEvents
  Loop
 
  'close dialog window
  SendMessage hWndButton, BM_CLICK, 0&, 0&
 
End Sub


Die Deklarationen müssen natürlich noch für VBA7 umgeschrieben werden.
das gilt vermutlich auch für die Dims.
Aus
Code:

  Dim hWndDlg As Long
  Dim hWndButton As Long


wird dann
Code:

  Dim hWndDlg As LongPtr
  Dim hWndButton As LongPtr

Ausserdem ist keinerlei Fehlerbehandlung vorhanden. Die Schleifen lassen sich aber abbrechen.

Hope it helps,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 05. Feb. 2015 08:26    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 tberger 10 Unities + Antwort hilfreich

Hallo Joe,

danke für den Code.
Die Deklarationen habe ich umgeschrieben.
Wenn ich im VBA-Modus (VB7.1, CATIA R24/64bit) mit F8 debugge, es funktioniert einwandfrei.

Wenn ich das Makro mit "Run" (F5) starte, dann bleibt es hier stehen und "Generate CATPart from Product" Fenster wird nicht gezeigt:

Code:
Do While hWndDlg = 0         'wait for handle
      'get dialog's handle
      hWndDlg = FindWindow(vbNullString, strDlgWnd)
 ----->     DoEvents                        'do something else
  Loop

Sobald ich auf "Break" drücke, hochpopt das Fenster "Generate CATPart from Product".
 

[Diese Nachricht wurde von imation1999 am 05. Feb. 2015 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 05. Feb. 2015 12:19    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 tberger 10 Unities + Antwort hilfreich

Hallo imation,

dass das Makro da anhält, ist normal. Dafür ist der DoEvents schliesslich da.
Ohne den könntest die Routine nur per Taskmanager killen.
Anders ausgedrückt: Catia wird wegen des DoEvents nicht angehalten.
Eigentlich wird der StartCommand nicht behindert.
Warum der Dialog nicht aufgeht, weiss ich jetzt auf anhieb auch nicht.
(Bei mir funktioniert's :-j )

Frage: Was passiert, wenn Du den CloseDialog-Aufruft auskommentierst?
Läuft ProdToPart dann? Kommt der Dialog?

Denkbare Abhilfen:

- Catia.RefreshDisplay = False (vor den Schleifen); Nutzen: Unwahrscheinlich
- Vor dem CloseDialog einen Sleep einfügen. Wenn der Dialog bei obigem Test aufgeht, sollte das helfen.

Tschau,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 05. Feb. 2015 18:20    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 tberger 10 Unities + Antwort hilfreich

Hallo Joe,

danke für die Vorschläge.
"sleep" leider auch nichts gebracht.

Wenn ich vor allem Schleifen den "RefreshDisplay" auf True setzte, dann funktioniert es. 

Danke nochmal.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 05. Feb. 2015 18: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 tberger 10 Unities + Antwort hilfreich

Jetzt zeig' mal die Routine, damit ich das auch lerne!

Tschau,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 05. Feb. 2015 18: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 Nur für tberger 10 Unities + Antwort hilfreich

Also bei mir (VBA 7.1) funktioniert es nur so (3x "RefreshDisplay"):

Code:
Public Sub CloseDialog(strDlgWnd As String, strBtnWnd As String)
  Dim hWndDlg As LongPtr
  Dim hWndButton As LongPtr

  CATIA.RefreshDisplay = True

  Do While hWndDlg = 0                'wait for handle
      'get dialog's handle
      hWndDlg = FindWindow(vbNullString, strDlgWnd)
      DoEvents                        'do something else
  Loop

  CATIA.RefreshDisplay = True

  Do While hWndButton = 0            'wait for handle
      'get OK button's handle
      hWndButton = FindWindowEx(hWndDlg, 0&, vbNullString, strBtnWnd)
      DoEvents
  Loop
 
  'close dialog window
  SendMessage hWndButton, BM_CLICK, 0&, 0&
 
CATIA.RefreshDisplay = True

  Do While hWndDlg <> 0               
     
      hWndDlg = FindWindow(vbNullString, strDlgWnd)
      DoEvents                        'do something else
  Loop
End Sub


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 05. Feb. 2015 19:08    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 tberger 10 Unities + Antwort hilfreich

Interessant find ich die letzte Schleife.
Wenn ich's richtig sehe, wartet die Schleife darauf,
dass der Dialog verschwindet.
Es müsste eigentlich auch ohne funktionieren.

Wie sehen die Deklarationen der Api-Funktionen aus?

Neugierig,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 05. Feb. 2015 19:26    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 tberger 10 Unities + Antwort hilfreich

Ja, es funktioniert natürlich ohne die letzte Schleife, aber ich brauche es für die weitere Bearbeitungen (umbenennen, abspeichern, etc.)

die Deklarationen, wie Du schon oben geschrieben hast, zB.:

Code:
Private Declare PtrSafe Function FindWindow _
Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 06. Feb. 2015 13:52    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 tberger 10 Unities + Antwort hilfreich

Eigentlich wollte ich mich über die 3 DisplayRefreshes wundern, nachdem eigenlich 1x reichen müsste; mehr wie an geht nicht.

Dann hab ich das noch im Internet gefunden:

Titel: CATIA Macro SendKeys
Link: http://www.scripting4v5.com/additional-articles/catia-macro-sendkeys/

Zitat:

SendKeys “{Enter}”
It’s a good idea to code all SendKeys commands following a Display Refresh. See sample code below:

SubCATMain()

CATIA.StartCommand(“Disassemble”)

CATIA.RefreshDisplay = True

SendKeys “{ENTER}”

End Sub

Often, without the Display Refresh, the keystrokes will be sent so fast that the interface will still be processing the last line of code.
Adding “CATIA.RefreshDisplay = True” will slow the process down and make SendKeys wait until it’s ready.


Im Prinzip verwendet der Schreiber RefreshDisplay als Ausführungsbremse.

Als kleine Ergänzung.

Tschau,
Joe

PS: Die Hochkommas sind alle nicht code-kompatibel.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 06. Feb. 2015 14:36    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 tberger 10 Unities + Antwort hilfreich

Hallo Joe,

das Makro anhält so bei die letzte Schleife, also hier:
[CODE][ Do While hWndDlg <> 0/CODE]

"sleep" hat hier wieder nichts gebracht.

PS.: wie kann ich nach ein CheckBox suchen?
Mit "FindWindowsEx" habe ich es nicht gefunden.
Mit "EnumChildWindow" hat gut geklappt. (Das gefällt mir aber nicht)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 06. Feb. 2015 17:14    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 tberger 10 Unities + Antwort hilfreich


Properties.JPG

 
Hallo,

Eine Checkbox ist nix anderes als ein Fenster der Klasse Button, Stil BS_CHECKBOX(Checkbox).

Die Krux bei FindWindowEx ist, dass es nur in der direkt darunter liegenden Ebene sucht.
D.h, dass Du Dich unter Umständen runterhangeln musst.
Bei komplexeren Dialogen wird das mühsam bis unmöglich.
Beispiel:
- Properties-Dialog: (siehe Bild)
- 1 Hauptfenster(Container)
- 3 Buttons, 4/5 Tabs, etc.
- zu jedem Tab noch viele darunter liegende Ebenen/Fenster

Nicht alle Fenster besitzen einen Titel(WindowName), manchmal nur eine Klasse.

Bei derart aufgefächerten Dialogen würd' ich auch EnumChildWindows verwenden.

Ein paar Beispielpragramme dazu:

http://vbnet.mvps.org/code/enums/enumwindowsdemo.htm
http://vb.mvps.org/samples/PassSniff/

Noch eines von AllApi.Net(die Homepage existiert nicht mehr.)

'in a form

Code:

Private Sub Form_Load()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net

    Me.AutoRedraw = True
    EnumChildWindows GetDesktopWindow, AddressOf EnumChildProc, ByVal 0&
End Sub



'in a module
Code:

Declare Function GetDesktopWindow Lib "user32" () As Long
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
    Dim sSave As String
    'Get the windowtext length
    sSave = Space$(GetWindowTextLength(hwnd) + 1)
    'get the window text
    GetWindowText hwnd, sSave, Len(sSave)
    'remove the last Chr$(0)
    sSave = Left$(sSave, Len(sSave) - 1)
    If sSave <> "" Then Form1.Print sSave
    'continue enumeration
    EnumChildProc = 1
End Function

Wenn Du erstmal den Handle zum Fenster hast, steht Dir alles andere offen.

Hope it helps,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 06. Feb. 2015 18:03    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 tberger 10 Unities + Antwort hilfreich

Hallo Joe,

vielen Dank für deine Hilfe, die Erklärung hat mir sehr weiter geholfen.
Dann bleibt den "EnumChildWindows" drin.

Schönes Wochenende

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 05. Aug. 2015 10:33    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 tberger 10 Unities + Antwort hilfreich

Hallo,

ich habe ein Problem mit deinem Code. Ich benutze diesen um die Replace Funktion zu starten. An der Stelle
"j = SendMessage(hChild, WM_GETTEXT, 255, iText)" bekomme ich eine Fehlermeldung: Type Mismatch.

Ich benutze R24 mit VBA7.1. Ich habe alle Declarationen angepasst wie im folgenden zu sehen. Das Makro läuft bis auf diesen Fehler einwandfrei durch.

Vielen Dank für die Hilfe.
Grüße


Code:
Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As LongPtr, ByVal lpClassName As String, ByVal nMaxCount As LongPtr) As Long

Private Declare PtrSafe Function EnumChildWindows Lib "user32" (ByVal hWndParent As LongPtr, ByVal lpEnumFunc As LongPtr, ByVal lParam As LongPtr) As Long

Public Declare PtrSafe Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As LongPtr, ByVal lParam As Any) As LongPtr

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Const WM_GETTEXT = &HD

Public Const BM_CLICK = &HF5&

Public O_hwnd As LongPtr

Public C_hwnd As LongPtr

...

Public Function FindButtonOK(ByVal hChild As LongPtr, ByVal lParam As LongPtr) 'as As LongPtr
   
    Dim iClass As String
    Dim iText As String
    Dim j As Integer

    ' alle Elemente des Fensters finden
    iClass = Space(256)
    j = GetClassName(hChild, iClass, 63)
    iClass = Left(iClass, j)
    iText = Space(256)
    j = SendMessage(hChild, WM_GETTEXT, 255, iText)
    iText = Left(iText, j)
   
    If iText = "OK" Then 'Pruefen ob es der OK-Button ist
        O_hwnd = hChild
        SendMessage O_hwnd, BM_CLICK, 0&, 0& ' Button klicken
    End If
 
    FindButtonOK = 1
   
End Function


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 05. Aug. 2015 11:12    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 tberger 10 Unities + Antwort hilfreich

Hallo buecherm,

SendMessage ist eine der wandelbarsten Funktionen der Api.
Und ein String kann auch als ein Array von Zeichen betrachtet werden.


Füge bitte eine 2. Deklaration für SendMessage _hinzu_:

Code:

Public Declare PtrSafe Function SendMessageByRef Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As LongPtr, lParam As Any) As LongPtr


Das 'ByVal' hab ich bei lParam wegelassen; somit wird lParam 'byref' übergeben(als Adresse).

Und ändere die Anweisung entsprechend ab:

Code:

    iText = Space(256)
    j = SendMessageByRef(hChild, WM_GETTEXT, 255, iText)


Hope it helps,
Joe

------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 05. Aug. 2015 11:35    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 tberger 10 Unities + Antwort hilfreich

Hallo joehz,

das hat mir leider nicht weitergeholfen. Bekomme immer noch den gleichen Fehler.

Sonst noch eine Idee?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 05. Aug. 2015 11:45    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 tberger 10 Unities + Antwort hilfreich

ich stell' das mal unter R19 nach.

Vorher noch zwei Fragen: (oder drei) :-)

- Welchen Dialog willst Du untersuchen?
- Was willst Du finden?
- Was willst Du tun?

Tschau,
Joe

------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 05. Aug. 2015 12:26    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 tberger 10 Unities + Antwort hilfreich

ich will mit den "Replace" Dialog untersuchen.

Es soll der OK-Button gefunden und betätigt werden.

Als Hilfe vielleicht für dich. Habe das Grundgerüst hier gefunden.
http://blog.catiav5.eu/de/codeschnipsel/replace-mit-vba-ueber-startcommand/ und es dann auf mein Vorhaben angepasst.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 05. Aug. 2015 12: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 Nur für tberger 10 Unities + Antwort hilfreich

Das dauert jetzt a bisserl.

Was mir noch an deinem Code aufgefallen ist:

'j' wird als integer deklariert; sowohl getClassname als auch SendMessage geben aber 'long' zurück.

Das ist auch im Original falsch.

Tschau,
Joe

------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 05. Aug. 2015 15:08    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 tberger 10 Unities + Antwort hilfreich

Noch 'ne Frage:

- 'Replace' gibt's als Kommando nicht. Was soll's sein? 'Replace Component...'?

Tschau,
Joe

------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 05. Aug. 2015 15:22    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 tberger 10 Unities + Antwort hilfreich

"Replace" startet den Ersetzen Dialog. Wenn CATIA bei dir auf deutsch gestartet ist muss du "Replace" durch "Ersetzen" ersetzen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 05. Aug. 2015 15: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 Nur für tberger 10 Unities + Antwort hilfreich

Du meinst vermutlich 'Replace...' von der Gen. Surf Design Workbench?

Ich bleib dabei: 'Replace' kennt Catia nicht. (Ich arbeite auch unter der engl. Oberfläche.)

Bitte schick mir ein Bild vom Dialog.

Tschau,
Joe

------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 06. Aug. 2015 11:42    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 tberger 10 Unities + Antwort hilfreich


replace.JPG

 
anbei ein Bild des Replace Dialogs.

Workbench ist Part Design.

[Diese Nachricht wurde von buecherm83 am 06. Aug. 2015 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 06. Aug. 2015 22:24    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 tberger 10 Unities + Antwort hilfreich


Spy_Replace.PNG

 
Ich behaupte mal, dass das zitierte(gelinkte) Beispiel nie funktioniert hat.
Warum hast eigentlich den Web Master der Seite nicht angesprochen?
Ausserdem: Der Code ist nicht von mir.

Um Dich nicht gänzlich im Regen stehen zu lassen:

Ein Wireframe-Element auswählen und folgenden, in ein Modul kopierten Code ausführen:

Code:

Option Explicit

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function EnumChildWindows Lib "user32" (ByVal hwndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public hwnd_OK As Long
Public hwnd_Cancel As Long
Public hwnd_Delete As Long
Public hwndDlg As Long

Sub CATMain()
   Dim oSel As Selection
  
   Set oSel = CATIA.ActiveDocument.Selection
  
   If oSel.Count2 = 0 Then
      MsgBox "Select wireframe element before starting this macro!", vbOKOnly Or vbCritical
      Exit Sub
   End If
  
   CATIA.StartCommand "Replace..."
   Sleep 500
  
   GetDlgHandles "Replace"
End Sub

Public Sub GetDlgHandles(strDlgWnd As String)
  
   hwndDlg = FindWindow(vbNullString, strDlgWnd)                     'get parent handle
   If hwndDlg = 0 Then                                               'no such window
      MsgBox "Dialog not found!", vbOKOnly Or vbCritical, "GetDlgHandles"
      Exit Sub
   End If
  
   EnumChildWindows hwndDlg, AddressOf EnumChildProc, 0&        'get children handles
  
   MsgBox "Handles: " & vbCr _
      & "Dialog: " & hwndDlg & vbCr _
      & "OK Btn: " & hwnd_OK & vbCr _
      & "Cancel: " & hwnd_Cancel & vbCr _
      & "Delete: " & hwnd_Delete
End Sub

'---------------------------------------------------------------------------------------
' Procedure : EnumChildProc
' Author    : jherzog
' Date      : 13.02.2015
' Time      : 15:14
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose   : Find and identify child windows
' Parms     : hwndChild: handle to a child window
'           : lParam: not used
' Ret. Value: Handles to three buttons
'           ' The handles are declared 'Public'
' Syntax    : - (callback function)
'
' Prereqs   : Call to EnumChildWindows
' Remarks   : Expects open dialog window
'---------------------------------------------------------------------------------------
'
Public Function EnumChildProc(ByVal hwndChild As Long, ByVal lParam As Long) As Long
   Dim strBuff As String                                    'string buffer
  
   strBuff = Space$(GetWindowTextLength(hwndChild) + 1)     'Get the windowtext length
   GetWindowText hwndChild, strBuff, Len(strBuff)           'get the window text
   strBuff = Left$(strBuff, Len(strBuff) - 1)               'remove the last Chr$(0)
  
   Select Case strBuff
      Case "Cancel"                                         'look for 'Cancel'
         hwnd_Cancel = hwndChild                            'assign to public handle
      Case "OK"                                             'look for 'OK'
         hwnd_OK = hwndChild
      Case "Delete replaced elements and exclusive parents" 'look for 'Delete replaced elements and exclusive parents'
         hwnd_Delete = hwndChild
     
      Case Else
   End Select
  
   Debug.Print strBuff
  
   EnumChildProc = 1                                        'continue enumeration
End Function
  
'Output von Debug.Print:

'OK
'Cancel
'ReplaceFrame_
'Replace:
'ToReplace_
'With:
'ForReplace_
'
'
'1 pointing Element: Join 0.1
'Delete replaced elements and exclusive parents



Der wesentliche Unterschied ist, dass ich nicht über die Klassen gehe, sondern über die Caption.


Tschau,
Joe

PS: Anbei noch ein Screen Shot der Klassen des Dialogs aus Spy++.
------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

[Diese Nachricht wurde von joehz am 06. Aug. 2015 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 07. Aug. 2015 11:39    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 tberger 10 Unities + Antwort hilfreich

Danke für deine Antwort.

ich bin dabei es mit deinem Code zu versuchen.
Allerdings habe ich ein Problem mit folgender Zeile

Code:
strBuff = Space$(GetWindowTextLength(hwndChild) + 1)

Wie muss

Code:
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

unter VBA7 deklariert werden? Habe hierfür nur Funktionen für VBA6 gefunden.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 07. Aug. 2015 12:21    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 tberger 10 Unities + Antwort hilfreich

Hab ich hier angeführt:

http://catia2.cad.de/index.php/de/tipps-tricks/programmierung/67-winapi-txt-vba7

Tschau,
Joe

------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 10. Aug. 2015 10: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 Nur für tberger 10 Unities + Antwort hilfreich


replace1.JPG

 
Hallo,

noch eine kurze Frage zu deinem Script.

ich habe es jetzt soweit für mich angepasst, dass es läuft. Ich möchte jetzt aber noch, das Feld "With" mit einer zweiten Selektion automatisch befüllen lassen.

Hast du eine Idee wie ich das Feld ansprechen kann?

[Diese Nachricht wurde von buecherm83 am 10. Aug. 2015 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 10. Aug. 2015 13:31    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 tberger 10 Unities + Antwort hilfreich

Das 'Feld' ist eine ListBox mit Name 'ForReplace_'.
Direkt ansprechen nützt nix.
Catia wartet auf eine Eingabe, ein selektiertes Element.

Du musst vermutlich ein Drahtelement in die Selektion nehmen.

Tschau,
Joe

------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

buecherm83
Mitglied
Ingenieur IT Application Software


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

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 11. Aug. 2015 07:17    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 tberger 10 Unities + Antwort hilfreich

Vielen Dank für deine Hilfe,

hab es über eine Selection gelöst. Jetzt läuft es.

10 U for you.

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