Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
488to492
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
488to492
488to492
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

vbHide benutzen, aber wo ???

vbHide benutzen, aber wo ?
23.09.2004 10:09:17
Dirk
Hallo,
ich hab hier ein Super-Programm gefunden, wonach ich lange gesucht habe.
Wenn jetzt die Datei geöffnet und ausgeführt wird, sieht man das DOS-Fenster.
Bei einem Shell-Aufruf hab ich immer vbHide eingeben können.
Aber bei dem Programm finde ich keine Möglickeit, das vbHide einzusetzten, ohne das eine Fehlermeldung kommt.
Kann mir jemand weiterhelfen ?
Das wäre echt super.
Vielen Dank im Voraus.
Viele Grüße von der Mosel.
Dirk
Option Explicit
'Declarationen für Message
Type RECT32
cl As Long
ct As Long
cr As Long
cb As Long
End Type
Declare

Function FindWindow32 Lib "User32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare 

Function GetModuleHandle32 Lib "kernel32" Alias _
"GetModuleHandleA" (ByVal lpModuleName As Any) As Long
Declare 

Function CreateWindowEx32 Lib "User32" Alias "CreateWindowExA" _
(ByVal dwExStyle As Long, ByVal lpClassName As String, _
ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, _
ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _
ByVal hWndParent As Long, ByVal hMenu As Any, ByVal hInstance As Long, _
lpParam As Any) As Long
Declare 

Function ShowWindow32 Lib "User32" Alias "ShowWindow" _
(ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Declare 

Sub SetWindowText32 Lib "User32" Alias "SetWindowTextA" _
(ByVal hWnd As Long, ByVal lpString As String)
Declare 

Function DestroyWindow32 Lib "User32" Alias "DestroyWindow" _
(ByVal hWnd As Long) As Long
Const GWL_HINSTANCE = (-6)
Const WS_CAPTION = &HC00000
Const WS_BORDER = &H800000
Const WS_CHILD = &H40000000
Const WS_EX_TOPMOST = &H8
Const SW_SHOWNOACTIVATE = 4
Const SW_HIDE = 0
Const SS_CENTER = &H1&
Dim hWnd32 As Long
Dim hWndTxt32 As Long
'Deklarationen für ShellAndWait
Public 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
Public Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type
Public Declare 

Function WaitForSingleObject Lib "kernel32" (ByVal _
hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare 

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

Function CloseHandle Lib "kernel32" (ByVal _
hObject As Long) As Long
Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Const INFINITE = -1&
'Prozedur zum Aufrufen einer Anwendung
Public 

Sub ShellAndWait(ByVal RunProg As String)
Dim proc As PROCESS_INFORMATION
Dim StartInf As STARTUPINFO
Dim RetVal As Long
Dim hWndP As Long
Dim hInstP As Long
Dim a As Long
'shelled Anwendung starten
RetVal = CreateProcessA(0&, RunProg, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, StartInf, proc)
'warten, bis shelled Anwendung geschlossen wurde
RetVal = WaitForSingleObject(proc.hProcess, INFINITE)
RetVal = CloseHandle(proc.hProcess)
End Sub

'Aufrufprozedur

Sub load()
ChDrive "C"
ChDir "C:\abteilungen\"
Call ShellAndWait("C:\abteilungen\test.exe")
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vbHide benutzen, aber wo ?
Dirk
Hi Dirk,
bis was besseres kommt, vielleicht nutzt es dir schon, Excel wieder in den Vordergrund zu kriegen, zwar ohne Focus aber das ist ja nur ein Klick, siehe Tipps von Nepumuk in:
https://www.herber.de/forum/messages/488554.html
Was macht eigentlich dein Code? Wenn du mir netterweise darauf antwortest, vergiss nicht deine Frage wieder auf noch offen zu stellen.
Gruß
Reinhard
wie kann ich das Dos-Fenster verstecken ?
23.09.2004 12:34:43
Dirk
Hallo Reinhard,
vielen Dank für Deinen Lösungsvorschlag.
Prinzipiell klappt das auch so, aber mein Dos-Fenster ist immernoch bei der Ausführung zu sehen. Das wollte ich auch irgendwie unterbinden. Man soll nur die Userform sehen.
Mein Code führt ein Programm (exe-Datei) aus und wartet so lange, bis die Datei fertig gearbeitet hat, d.h. bis das Dos-Fenster geschlossen wird und setzt dann das Programm fort.
Ich habe schon mehrere Programme gesehen, die das gleiche machen sollten, aber leider ist das Programm weitergelaufen obwohl das Dos-Programm noch nicht fertig war.
Deshalb bin ich froh, diesen Code gefunden zu haben, denn der klappt (bis auf die Fensteranzeige ;-) )
Also nochmals Danke für Deine Hilfe !!!
Viele Grüße
Dirk
Anzeige
AW: wie kann ich das Dos-Fenster verstecken ?
Reinhard
Hi Dirk,
danke für die Info.
Ich habe Win98 & xl2000. Ich habe das Problem jetzt gelöst:

Sub load()
ChDrive "C"
ChDir "C:\test"
Call ShellAndWait("C:\WINDOWS\Desktop\test2.pif")
End Sub

Inhalt der test.bat:
echo HuHu
Vorher habe ich mir eine Verknüfung auf den Desktop gelegt zu meiner C:\test\test.bat.
Dort dann unter Eigenschaften---Programm---Ausführen mininmiert ausgewählt. Weiterhin habe ich "Beim Beenden schliessen" ausgewählt, was dann bei meiner kurzen bat ein kurzes Aufblinken in der Taskleiste ergibt *g
Benannt habe ich die Verknüpfung Test2.
Übrigens, da das programm bei mir startet, sind wohl die Chdrive und chdir unnötig, ausser du willst nachher in Excel in diesem Verzeichnis stehen.
Gruß
Reinhard
Anzeige
ich stehe jetzt auf dem Schlauch !!!
23.09.2004 13:40:13
Dirk
Hallo Reinhard,
jetzt stehe ich gerade auf dem Schlauch.
Was hast Du gelöst und wie ?
Ich kann bei meiner EXE-Datei keine Eigenschaften ändern (wenn ich Dich richtig verstanden habe).
Sorry, stehe echt auf dem Schlauch !!!
Gruß
Dirk
AW: ich stehe jetzt auf dem Schlauch !!!
Reinhard
Hi Dirk,
ich meinte die Eigenschaften die beim RechtsKlick auf das Icon meiner Verknüpfung aud dem Dsektop erscheinen.
Vielleicht findest du ja auf
http://groups.google.de/groups?q=CreateProcessA&ie=UTF-8&hl=de&btnG=Google-Suche
etwas was dir weiterhilft.
Die beiden Befehle
StartInf.dwFlags = 0
StartInf.wShowWindow = xlMinimized
in der nachfolgenden Prozedur brachten nichts.
Gruß
Reinhard

'Prozedur zum Aufrufen einer Anwendung
Public Sub ShellAndWait(ByVal RunProg As String)
Dim proc As PROCESS_INFORMATION
Dim StartInf As STARTUPINFO
Dim RetVal As Long
Dim hWndP As Long
Dim hInstP As Long
Dim a As Long
'shelled Anwendung starten
StartInf.dwFlags = 0
StartInf.wShowWindow = xlMinimized
RetVal = CreateProcessA(0&, RunProg, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, StartInf, proc)
'warten, bis shelled Anwendung geschlossen wurde
RetVal = WaitForSingleObject(proc.hProcess, INFINITE)
RetVal = CloseHandle(proc.hProcess)
End Sub

Anzeige
Jetzt klappts !!!!
24.09.2004 11:14:47
Dirk
Hallo Reinhard,
dank Deinem Tipp habe ich jetzt ein vollständig funktionierendes Programm.
Vielen Dank !!!
Ich hab auf einer anderen Page eine ähnliche Anweisung gefunden und aus zwei eine gemacht !!!
Insges. habe ich vier Zeilen hinzugefügt !!! Markiert mit *******
Viele Grüße und Merci
Dirk
Option Explicit
'Deklarationen für ShellAndWait
Public 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
Public Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type
Public Declare

Function WaitForSingleObject Lib "kernel32" ( _
ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Public Declare 

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

Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long
Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Const INFINITE = -1&
Public Const SW_HIDE = &H0&               '***********************
Public Const STARTF_USESHOWWINDOW = &H1&  '***********************
'Prozedur zum Aufrufen einer Anwendung
Public 

Sub ShellAndWait(ByVal RunProg As String)
Dim proc As PROCESS_INFORMATION
Dim StartInf As STARTUPINFO
Dim RetVal As Long
Dim hWndP As Long
Dim hInstP As Long
Dim a As Long
'hier wird das Fenster ausgeblendet
StartInf.dwFlags = STARTF_USESHOWWINDOW  '***********************
StartInf.wShowWindow = SW_HIDE           '***********************
'shelled Anwendung starten
RetVal = CreateProcessA(0&, RunProg, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, StartInf, proc)
'warten, bis shelled Anwendung geschlossen wurde
RetVal = WaitForSingleObject(proc.hProcess, INFINITE)
RetVal = CloseHandle(proc.hProcess)
End Sub

'Aufrufprozedur

Sub load()
ChDrive "I"
ChDir "I:\abteilungen\"
Call ShellAndWait("I:\abteilungen\test.exe")
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige