Hallo erstmal,
ich habe folgendes Problem:
in einem Array mit n Einträgen stehen sämtliche Dateinamen zum
ausführen. Diese Einträge lass ich mit Hilfe einer FOR…NEXT
Schleife nacheinander ausführen mit Hilfe des Shell-Befehls.
Hier der Source:
’ obig beschriebene Schleife
Private Sub Install(ByRef saArray() As String)
For i = 0 to(UBound(saArray) - LBound(saArray))
ShellWait(saArray(i), vbNormalFocus)
Next
End Sub
'######################################################################
’ führt Shell-Befehl aus + Maximized
Public Function ShellWait(Exec As String, _
Optional WindowStyle As VbAppWinStyle = vbMinimizedFocus) _
As Long
Dim nTaskId As Long
Dim nHProcess As Long
Dim nExitCode As Long
nTaskId = Shell(Exec, WindowStyle)
nHProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, nTaskId)
Do
DoEvents
GetExitCodeProcess nHProcess, nExitCode
Loop While nExitCode = STILL_ACTIVE
CloseHandle nHProcess
ShellWait = nExitCode
End Function
‚######################################################################‘### API für ShellAndWait
'######################################################################'Für CD-Open
'Deklaration: Globale API-Funktionen
Public Declare Function mciExecute Lib „winmm.dll“ (ByVal _
lpstrCommand As String) As Long
’ API’s für ShellAndWait
Private Declare Function OpenProcess Lib „kernel32“ _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib „kernel32“ _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib „kernel32“ _
(ByVal hObject As Long) As Long
’ Konstande
Private Const STILL_ACTIVE = &H103
Private Const STATUS_PENDING = &H103&
Private Const PROCESS_QUERY_INFORMATION = &H400
Const SWP_HIDEWINDOW = &H80
Const SWP_SHOWWINDOW = &H40
'######################################################################
seltsamerweise überspringt er ab Array-Index 2 den eigentlichen Inhalt
von diesem Array, z.B. habe ich in der Liste(Array) 7 Einträge:
Hallo(0)
Bis(1)
später(2)
du(3)
schönes(4)
Kind(5)
chen(6)
Wenn er jetzt die Schleife durchläuft dann bringt er mir für den ersten
Array-Index auch den Eintrag = „Hallo“!!
Beim Eintrag mit dem Index(1) bringt er mir „Bis“. Soweit sogut.
Aber dann bringt er mir für den Index = 2 nicht denn Eintrag=„später“
sondern „du“ (also Index 3).
Danach überspringt er mir immer einen Eintrag, also:
Index 3:
Statt „du“ „Kind“(5)
Index 4:
Statt „schönes“ „chen“(6)
Das schleppt sich dann immer weiter so durch bis er am schluß dann eine
FehlerMeldung bringt, das die Array-Liste außerhalb des gültigen
Index-Bereichs ist…
Statt in dem Fall 7 Einträge sind es tatsächlich nur 4 Einträge
(index/2+1) die durchlaufen werden.
Obwohl er durch Ubound-Lbound den Wert 6 erhält (0-6=7) Endet das Array
plötzlich bei 4 (weil er dort keine Einträge mehr findet, da er ja
immer einen eintrag überspringt - siehe oben…).
Jetzt meine Frage:
Woran liegt es das der Computer immer einen Eintrag überspringt und
nicht den Richtigen Wert aus dem Array ausliest??
Hat es vielleicht was mit ShellWait bzw. Shell zutun??
HILFE…
ich werd sonst noch Irre mit diesem Fehler…
Mit freundlichen Grüssen
Mike Quagliara