Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Programme und verknüpfte Dateien per API starten
include zum starten von Programmen und Funktionen
mit den Api-Funktionen ShellExecute, ShellExecuteEx, FindExecutable
Autor: Dieter Zornow
Code ist zur freien Verwendung
Werte für Darstellung sind in windows.ph
Werte für Darstellung
SW_HIDE = 0
SW_MAXIMIZE = 3
SW_MINIMIZE = 6
SW_SHOW% = 5
SW_SHOWMAXIMIZED = 3
SW_SHOWMINIMIZED = 2
SW_SHOWMINNOACTIVE = 7
SW_SHOWNOACTIVATE = 4
SW_SHOWNORMAL = 1
zulässige Operationen
edit lädt die Datei File$ zum editieren mit der verknüpften Anwendung.
explore Startet den Explorer in dem mit File$ angegebenen Verzeichnis.
find Startet den Suchen-Dialog mit dem mit File$ angegebenen Verzeichnis.
open Öffnet die mit File$ angegebene Datei mit der verknüpften Anwendung.
print Druckt die unter File$ angegebene Datei mit der verknüpften Anwendung.
null =Leerstring, Je nach Betriebssystem erster Eintrag in der Registry oder open
Def ShellExecuteEx(1) !SHELL32,ShellExecuteExA
Def ShellExecute(6) ! shell32,ShellExecuteA
Def FindExecutable(3) ! Shell32,FindExecutableA
Declare file#,dir#,operation#,para#,SEI#,lpverb#
proc NO_ASSOCIATION
@messagebox(Haben Sie etwas Geduld, der Windowsdialog Öffnen mit wird nun gestartet,Die Datei ist für diesen Zugriff noch nicht verknüpft,64)
clear operation#,file#,para#
Dispose operation#
Dispose file#
Dispose para#
let operation$=
let para$=shell32.dll,OpenAs_RunDLL +file$
let file$=RUNDLL32.EXE
Dim operation#,len(operation$)+1
string operation#,0 = operation$
Dim file#,len(file$)+1
string file#,0 = file$
Dim para#,len(para$)+1
string para#,0 = para$
ShellExecute(getactivewindow(),operation#,file#,para#,dir#,show%)
Dispose operation#
Dispose file#
Dispose para#
Dispose dir#
Return
endproc
proc FILE_ERROR
case equ(returnvalue&,0):@messagebox(Es sind nicht mehr genügend Systemresourcen vorhanden,Fehler,64)
case equ(returnvalue&,11):@messagebox(Ausführende Datei ist defekt oder keine Windowsdatei,Fehler,64)
case equ(returnvalue&,5):@messagebox(Der Zugriff auf die Datei wurde verweigert,Fehler,64)
case equ(returnvalue&,27):@messagebox(Unvollständige oder unzulässige Verknüpfung,Fehler,64)
case equ(returnvalue&,30):@messagebox(Andere DDE-Operationen werden gerade ausgeführt,Fehler,64)
case equ(returnvalue&,29):@messagebox(Der DDE-Aufruf war nicht erfolgreich,Fehler,64)
case equ(returnvalue&,28):@messagebox(Das Zeitlimit zum Aufruf wurde überschritten.,Fehler,64)
case equ(returnvalue&,32):@messagebox(Eine notwendige DLL wurde nicht gefunden,Fehler,64)
case equ(returnvalue&,2):@messagebox(Die auszuführende Datei wurde nicht gefunden.,Fehler,64)
case equ(returnvalue&,8):@messagebox(Nicht genügend Arbeitsspeicher vorhanden.,Fehler,64)
case equ(returnvalue&,3):@messagebox(Das übergebene Verzeichnis ist nicht vorhanden,Fehler,64)
case equ(returnvalue&,26):@messagebox(Datei ist schon geöffnet, Fehler beim gemeinsamen Dateizugriff,Fehler,64)
return
endproc
Proc Find
Declare result#,result$,returnvalue&,dir$ dir$ kann als Parameter übergeben werden
Parameters file$,what% ist aber unnötig, wenn der qualifizierte Pfad in File$
Dim file#,len(file$)+1 übergeben wird
Dir$=
Dim Dir#,len(dir$)+1
dim result#,255
String file#,0=Upper$(file$)
string dir#,0 =dir$
let returnvalue&=FindExecutable(file#,dir#,result#)
let result$= @string$(result#,0)
dispose file#
dispose dir#
dispose result#
case equ(returnvalue&,31):let result$=Datei ist noch nicht mit einer Anwendung verknüpft
case equ(what%,0):Return result$ gibt Executable zurück
case equ(what%,1):Return returnvalue& Prüfen ob File oder Pfad vorhanden
endproc
Proc Properties
Parameters file$
Dim SEI#,60 SHELLEXECUTEINFO
Clear SEI#
Dim lpverb#,11
Dim file#,Add(Len(file$),1)
String file#,0=Upper$(file$)
String lpverb#,0=properties
Long SEI#,0=60 Size of the structure
long SEI#,4= $C Mask = SEE_MASK_INVOKEIDLIST
Long SEI#,8=GetActiveWindow()
Long SEI#,12=lpverb#
Long SEI#,16=file#
Long SEI#,28=1 show
ShellExecuteEx(SEI#)
Dispose lpverb#
Dispose file#
Dispose SEI#
EndProc
Proc mailTo
Declare returnvalue&,Operation$,File$,Para$,Dir$,show%
Parameters adresse$,subject$,text$
operation$=open
weitere parameter &Cc,&Bcc,&attach, bei mehr Parameter ?subject ev. in &subject ändern
File$=mailto:+adresse$+?Subject=+subject$+&Body=+text$
para$=
Dir$=
show%=1
Dim operation#,len(operation$)+1
string operation#,0 = operation$
Dim file#,len(file$)+1
string file#,0 = file$
Dim para#,len(para$)+1
string para#,0 = para$
Dim dir#,len(dir$)+1
string dir#,0 = dir$
let returnvalue&=ShellExecute(getactivewindow(),operation#,file#,para#,dir#,show%)
Dispose operation#
Dispose file#
Dispose para#
Dispose dir#
Return returnvalue&
endproc
Proc GoOnlineTo
Declare returnvalue&,Operation$,File$,Para$,Dir$,show%
Parameters adresse$
operation$=open
File$=http://+adresse$
para$=
Dir$=
show%=1
Dim operation#,len(operation$)+1
string operation#,0 = operation$
Dim file#,len(file$)+1
string file#,0 = file$
Dim para#,len(para$)+1
string para#,0 = para$
Dim dir#,len(dir$)+1
string dir#,0 = dir$
let returnvalue&=ShellExecute(getactivewindow(),operation#,file#,para#,dir#,show%)
Dispose operation#
Dispose file#
Dispose para#
Dispose dir#
Return returnvalue&
endproc
Proc Execute
Declare returnvalue&
Parameters operation$,file$,para$,dir$,show%
Dim operation#,len(operation$)+1
string operation#,0 = operation$
Dim file#,len(file$)+1
String file#,0=Upper$(file$)
Dim para#,len(para$)+1
string para#,0 = para$
Dim dir#,len(dir$)+1
string dir#,0 = Upper$(dir$)
let returnvalue&=ShellExecute(getactivewindow(),operation#,file#,para#,dir#,show%)
If returnvalue&=31 Anwendung nicht verknüpft
NO_ASSOCIATION
endif
if lt(returnvalue&,31)
FILE_ERROR
endif
Dispose operation#
Dispose file#
Dispose para#
Dispose dir#
Ausführung erfolgreich = > 32 (handle der Anwendung)
return returnvalue&
endproc
Beispiele
cls
------------------------------
Parametererklärung
e-mailadresse, Subject,Text für Body// alles andere wird in der Proc gesetzt
startet Standard e-mail client mit voreingestellten Werten
mailTo dizor@gmx.net,Gruß aus Bangkok,Ein Hallo an alle
------------------------------------------------------------------------
Parametererklärung
gewünschte Internetadresse// alles andere wird in der Proc gesetzt
Startet den Standard Internetexplorer mit voreingestellter Url
GoOnlineTo dieterzornow.gmxhome.de/
------------------------------------------------------------------------
Parametererklärung
Der Fensterparameter wird in der Proc gesetzt mit getactivewindow(), deshalb nur 5
1 operation = open oder edit siehe oben zulässige Operationen
2 auszuführende Datei = jede Art von Datei, *.doc, *.exe, *.bat, *.txt,
3 Parameter für das Programm = eventuelle Parameter//sollte bei Dokumenten usw. sein
4 Arbeitsverzeichnis = das Arbeitsverzeichnis des Programmes
5 Darstellung = Größe usw. siehe oben
Startet den Finddialog im Root-Verzeichnis C:
Execute find,c:,,,1
-----------------------------
Startet den Explorer größt möglich im angegebenen Pfad
Execute explore,c:Eigene Dateien,/e,,3
-----------------------------
Startet die win.ini, wenn sie verknüpft ist
Execute open,WIN.INI,,,1
-----------------------------
Startet die Readme.htm im Windowsverzeichnis, dürfte in jeder Version vorhanden sein
einmal mit open = Internetexplorer und einmal mit edit = HTMLEditor
Execute open,README.HTM,,$Winpath,3
Execute edit,README.HTM,,$Winpath,3
-----------------------------
Startet Notepad und öffnet die Win.ini
Execute open,Notepad.exe,win.ini,$Winpath,3
---------------------------------------------------------------------------
Gibt die mit der Datei verknüpfte Anwendung zurück, letzter Parameter = 0
Prüft ob die eingegebene Datei oder Pfad existiert, Rückgabe = 2 bedeutet Datei oder Pfad existiert nicht
Rückgabe <> 2 bedeutet Datei oder Pfad existiert. letzter Pararmeter = 1
Find c:Programmieren!MeineProgsshellexecute_apiproperties.prf,0
Find c:Programmieren!MeineProgsshellexecute_apiproperties.prf,1
---------------------------------------------------------------------------
Ruft den Eigenschaftendialog von Windows auf
Properties C:PlayerDZPlayer.exe
---------------------------------------------------------------------------
Print @&(0pan class=s2>)
Imprimir @$(0)
waitinput