Shellwait API

Alles over het toepassen van API en DLL's in Liberty BASIC

Moderator: anthonio

Shellwait API

Berichtdoor Gordon » za okt 27, 2007 11:01 am

De ShellWait houdt in dat LibertyBASIC (in de Shell van Windows)
even wacht tot dat het draaiende programma beeindigd is,
voordat Liberty BASIC verder gaat.

De werking van deze API is ongeveer alsvolgt.
Eerst hebben we de functie OpenProcess nodig.
De benodigde parameters halen we uit de ShellExecute functie.
Daarna kunnen we Windows zeggen om een
WaitForSingleObject uit te voeren.
Deze API heeft enkele STRUCT's.

Hier volgt een versie (in functie vorm) van Stefan

Code: Selecteer alles
'----------------------------routine van Stefan en Alyce

sub RunWait file$, para$, dir$
' sub to open an application or file
'
' Usage:
' call RunWait {filename}, {parameters}, {startfolder}
'
' filename ...... full path to file or executable
' parameters .... if file is a document this should be empty
'                 if file is an executable any parameters
'                 that should be passed to it
' startfolder ... initial folder, can be empty

    SEE.MASK.NOCLOSEPROCESS = hexdec("40")
    SEE.MASK.FLAG.DDEWAIT = hexdec("100")

    struct ExecInfo, _
        Size        as ulong, _
        fMask       as ulong, _
        hwnd        as ulong, _
        Verb$       as ptr, _
        File$       as ptr, _
        Parameters$ as ptr, _
        Directory$  as ptr, _
        Show        as ulong, _
        InstApp     as ulong, _
        IDList      as ulong, _
        Class$      as ptr, _
        keyClass    as ulong, _
        HotKey      as ulong, _
        Icon        as ulong, _
        Process     as ulong

    ExecInfo.fMask.struct = SEE.MASK.NOCLOSEPROCESS or SEE.MASK.FLAG.DDEWAIT
    ExecInfo.File$.struct = file$ + chr$(0)
    ExecInfo.Parameters$.struct = para$ + chr$(0)
    ExecInfo.Directory$.struct = dir$ + chr$(0)
    ExecInfo.Show.struct = _SW_HIDE
    ExecInfo.Size.struct = len(ExecInfo.struct)

    calldll #shell32, "ShellExecuteExA", _
        ExecInfo as struct, _
        result   as boolean

    if result then
        Handle = ExecInfo.Process.struct
        Milliseconds = _INFINITE

        calldll #kernel32, "WaitForSingleObject", _
            Handle       as ulong, _
            Milliseconds as ulong, _
            result       as ulong
    end if
end sub




Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Keer terug naar API/DLL

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron