MASK_FLAG_DDEWAIT in ShellExecuteExW32 ()

Olivier Kaloudoff kalou at
Thu Oct 7 02:12:57 CDT 2004


 	Trying to run an unsupported application, I get the following 

fixme:exec:ShellExecuteExW32 flags ignored: 0x00000140

 	and the application gives me C:\windows\temp\MMIsnst, access 

 	so two bits are set by the application, requesting

 	as far as I understand DDEWAIT, it should be trivial to implement, 
as it is just some kind of sleep() ... even with no C experience, I should 
be able to do this..

 	what about NOCLOSEPROCESS ?  .... hmmm, crawling the web, it turns 
out that the writer of this application (MobileMaster.exe) probably made a 
call to a RunWait function ... in a language called LibertyBasic ... am I 
right ?

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 long, _
               fMask        as long, _
               hwnd              as long, _
               Verb$        as ptr, _
               File$        as ptr, _
               Parameters$ as ptr, _
               Directory$ as ptr, _
               Show              as long, _
               InstApp        as long, _
               IDList        as long, _
               Class$        as ptr, _
               keyClass       as long, _
               HotKey        as long, _
               Icon              as long, _
               Process        as long

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

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

        if result <> 0 then
               Handle = ExecInfo.Process.struct
               Milliseconds = _INFINITE

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

More information about the wine-devel mailing list