Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Während Makro auf Eingabe warten

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
Mit komplexer Geometrie und organischen Formen arbeiten
Autor Thema:  Während Makro auf Eingabe warten (1147 mal gelesen)
remtc
Mitglied



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

Beiträge: 34
Registriert: 18.09.2017

Solidworks Prof. 2023SP3 x64 auf Win 10

erstellt am: 11. Jul. 2019 12: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

Hallo,

nach dem ich google und unsere SuFu mehrfach befragt habe ich steh ich nun vor folgendem Problem:
ich möchte ein Makro haben das alle Seiten einer Drawing einzeln in einer for-Schleife aufruft und jeweils über dem Schriftkopf eine vorher klickbare Anzahl an Symbolen erstellt (Kanten brechen, kanten verrunden und die Oberflächenangaben evtl später noch mehr). Der Großteil funktioniert auch bereits. Aber: die Oberflächen werden durch ein externes Programm erzeugt und mann müsste eigentlich über jedes Blatt einzeln dieses Programm laufen lassen.

das schreit nahezu wieder nach einer Automation:

Ablauf Programm:
Auswahl welches Oberflächensymbol und welcher Rz-Wert vor der Klammer steht und mit OK abklicken und warten bis es ausgeführt wurde.

die For-schleife steht und die anderen Symbole funktionieren auch, ebenso bekomme ich das Progi durch das Makro gestartet, jedoch muss ich mein Makro irgendwie anhalten um das Programm für jede einzelne Seite durchlaufenzulassen.

im besten Fall wäre es wenn erst auf das klicken der Maus durch

Zitat:
Code:

Const VK_LBUTTON = &H1 ' linker Mausbutton
Loop Until GetAsyncKeyState(VK_LMouseB)

und dann ein paar Sekunden gewartet wird mit

Code:

System.Threading.Thread.Sleep (1000)




Forums Link

Beides funktioniert nicht. Da zu einem diese Funktion

Code:
Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short

Probleme mit meiner 64bit Version hat (? wird im VBA Editor rot markiert)

und "System" nicht definiert ist.

jetzt meine Frage - wie kann ich das umgehen oder welche andere(n) Lösungen könntet ihr euch vorstellen um das Problem zu beheben?

Danke remtc

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 11. Jul. 2019 13: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 remtc 10 Unities + Antwort hilfreich

Hallo,

was hast du den für einen Typ Anwendung den du Starten und auf dessen Bendigung du warten möchtest, handelt es sich um eine EXE, DLL, VB-Script, SWX-Macro o.ä.. ?

für

Code:
Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short

must du in VBA glaube ich die PtrSafe Function benutzen:

Code:
Private Declare PtrSafe Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

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

remtc
Mitglied



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

Beiträge: 34
Registriert: 18.09.2017

Solidworks Prof. 2023SP3 x64 auf Win 10

erstellt am: 11. Jul. 2019 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

Hallo Bernd,

danke für die Antwort mit

Code:
PtrSafe

kann ich die funktion definieren.

über das Makro starte ich mit

Code:
shell ...\....exe, vbhide
die Oberflächen applikation und den Code aus der exe bekomme ich nicht ausgelesen :/ ebenso erhalte ich keinen Rückgabewert. Also dachte ich es wäre am einfachsten zu warten...

grüße remtc
Edit: mit einer Do until ... loop konnte ich die wartezeit umgehen - danke für den Tipp mit petersave... 

[Diese Nachricht wurde von remtc am 11. Jul. 2019 editiert.]

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 11. Jul. 2019 18:00    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 remtc 10 Unities + Antwort hilfreich

Hallo,

du könntest auch folgenden Code mal Probieren der auf die Beendigung eines Programmes wartet, CreateProcessA soll in dem Kontext woll stabiler sein wie ein Aufruf über eine Shell, ShellExecute, ShellExecuteA etc. Funktion.

Code:
Option Explicit

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private Declare PtrSafe Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare PtrSafe Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Private Declare PtrSafe Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&


Public Sub ExecCmd(cmdline As String)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ReturnValue As Integer

' Initialize the STARTUPINFO structure:
start.cb = Len(start)

' Start the shelled application:
ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

' Wait for the shelled application to finish:
Do
ReturnValue = WaitForSingleObject(proc.hProcess, 0)
DoEvents
Loop Until ReturnValue <> 258

ReturnValue = CloseHandle(proc.hProcess)
End Sub

Sub Testing()
ExecCmd "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE"
MsgBox "Process Finished"
End Sub


Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

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)2024 CAD.de | Impressum | Datenschutz