title image


Smiley DOS.... - Doas Gäähht...
Moin,



in unseren Projekten verwenden wir auch manchmal den Dos-Befehl "del". Das klappt mit der Funtion LaunchApp32 aus der KnowHow-Datenbank sehr schön.



hier die Function (incl. comments):





'There may be times when you need to shell to another program from Access,

'such as a zipping program, a communications or mail program, and need to

'resume your code once the process is finished. However, once Access starts

'the other program, or process, it will continue on its merry way running your

'code unless you build in explicit code which causes your function to wait until

'the external program finishes. Unlike using Access 2, the Win32 api doesn't have

'the function "GetModuleUsage" to measure whether the shelled process is still

'running. Instead in Win32, you must use the function "WaitforSingleObject",

'and "OpenProcess". Below we've provided a sample function to launch an

'application and wait for it to finish.

'1. On the declarations page of your module, add the following functions:



Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal _

dwAccess As Long, ByVal fInherit As Integer, ByVal hObject _

As Long) As Long



Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _

hHandle As Long, ByVal dwMilliseconds As Long) As Long



Private Declare Function CloseHandle Lib "kernel32" (ByVal _

hObject As Long) As Long



'2. Try out this test function, which launches any app you want to and waits until

'it is finished to display a message box (Note an " _ " underscore means line

'continuation):



Function LaunchApp32(ByVal MYAppname As String, Optional ByVal Unsichtbar As Boolean = False) As Integer

On Error Resume Next

Const SYNCHRONIZE = 1048576

Const INFINITE = -1&

Dim ProcessID&

Dim ProcessHandle&

Dim Ret&

Dim VbWert



LaunchApp32 = -1



If Unsichtbar Then

VbWert = vbHide

Else

VbWert = vbNormalFocus

MsgBox "Das SubProgramm wird gestartet: " & MYAppname, 64

End If



ProcessID = Shell(MYAppname, VbWert)

If ProcessID 0 Then

ProcessHandle = OpenProcess(SYNCHRONIZE, True, ProcessID&)

Ret = WaitForSingleObject(ProcessHandle, INFINITE)

Ret = CloseHandle(ProcessHandle)



If Not Unsichtbar Then

MsgBox "Das SubProgramm wurde erfolgreich beendet: " _

& MYAppname, 64

End If

Else

MsgBox "Fehler: SubProgramm " & MYAppname & " konnte nicht ausgeführt werden"

LaunchApp32 = 0

End If



End Function

'3. It is important to note that your function must include the code to close

'the process handle after the shelled application is complete, otherwise you

'will have a memory leak until you shut down Windows.





'> > ich benutze aus der Knowhow das Modul mdlWaitOtherProcessFinished um auf die

'> > Beendigung eines Packprogrammes (ARJ) zu warten. ARJ wird direkt mit der

'> > Befehlszeile aufgerufen, keine Batchdatei. Das funktioniert auch in jedem

'> > Fall einwandfrei, auch die Programmabarbeitung sowie das besagte warten.

'> >

'> > Bei einigen Rechnern (?) allerdings bleibt die ARJ-DOS-Box nach

'> > Programmbeendigung geöffnet, der User muß sie schließen (oder eine PIF -Datei

'> > über die 'Eigenschaften' des DOS-Programmes anlegen), dann rennt Access

'> > weiter.

'> >

'> > Gibt es eine Möglichkeit, solch eine noch geöffnete DOS-Box via Code zu

'> > beenden?

'> >

'> > mfg Peter

'>

'> Hallo Peter,

'> das haengt wohl damit zusammen, wie die DOS-Box auf dem jeweiligen

'> Rechner konfiguriert ist. Wenn du vor deine Befehlszeile noch ein 'cmd

'> /c ' klemmst, sollte das Fenster in jedem Fall schliessen.

'>

'> Norbert

'

'Hallo,

'

'folgende Zeile hat's gebracht:

'

'LaunchApp32 (Environ$("COMSPEC") & " /c " &

'"C:\MeinPfad\MeinUnterPfad\MeineEXE -ArjSchalter")

'

'Danke.

'

'Peter



'Daraus folgt:



'Anstelle LaunchApp32 in der Dosbox die Funktion LaunchApp32DOS verwenden, dann sollte es

'problemloser funktionieren.



Function LaunchApp32DOS(ByVal MYAppname As String, Optional ByVal Unsichtbar As Boolean = False) As Integer

LaunchApp32DOS = LaunchApp32(Environ$("COMSPEC") & " /c " & MYAppname, Unsichtbar)

End Function

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: