J'avais déjà été confronté au problème il y a quelque temps, et il me semble que le WinExec était restrictif si mes souvenirs sont bon, et qu'un ShellExecute était plus passe partout. Voici une fonction qui permet d'ouvrir un fichier quel qu'il soit, et qui teste aussi l'association (exemple fichier.doc), si Windows ne sait pas comment ouvrir ce fichier la boite de dialogue d'association d'extension à une application apparait.
uses SysUtils, ShellAPI, Windows;
function OpenFile(const Filename: string; const Handle: THandle = 0): integer;
{ Tente d'ouvrir le fichier dont le nom est passé en argument avec l'application associée à son extension. Si aucune application n'est associée à celle-ci, le dialogue "Ouvrir avec..." est appelé. }
var
errCode: Cardinal;
filePath: string;
begin
{ On stocke le chemin pour éviter de le décoder 2 fois }
filePath:= ExtractFilePath(Filename);
{ Tentative d'ouverture de l'application associée }
errCode:= ShellExecute(Handle, 'Open', PChar(Filename), '', PChar(filePath), SW_SHOWNORMAL);
{ Si la tentative a échoué avec le code SE_ERR_NOASSOC, c'est que l'extension n'est associée à aucune application }
if errCode = SE_ERR_NOASSOC then
{ Dans ce cas, on appelle le dialogue }
errCode:= ShellExecute(0, 'open', 'rundll32.exe', PChar('shell32.dll,OpenAs_RunDLL ' + Filename), PChar(filePath), SW_SHOWNORMAL);
{ Si le code retourné par ShellExecute est supérieur à 32, alors l'opération a réussi, sinon c'est un code d'erreur }
result:= errCode > 32;
end;
J'espère que ça pourra t'aider un peu. (même si c'est pas complétement dans le sujet)
tout dabord :
- essaye de soigner ton francais :>>"cette source permet de réaliser un mini panneau de configuratin" !!!!!
- fichiers inutiles dans le zip --> *.~* et *.dcu
- NIVEAU EXPERT : !!!!!!! tu rigole ou quoi !le winexec est la premier chose que jai appris en delphi pour lancer la calculatrice windows ! le niveau de ta source est DEBUTANT !
- essaye de nommer tes composants et dajouter des commentaires puisque ta source sadresse a des débutants
- le titre de ta source devra etre "comment utiliser winexec pour lancer une application du panneau de configuration "
- si cetait pour faire un mini control panel il aurait suffi de mettre un shelllistview et de spécifier ROOT a panneau de config
- tu aurais pu faire :
procedure launchCPL(CPL:String);
begin
WinExec(PChar('rundll32.exe shell32.dll,Control_RunDLL'+ CPL'), SW_SHOWNORMAL);
end;
et a chaque onclick tu met
begin
LaunchCPL({le nom du fichier cpl});
end;
voila apperemment c'est tout :
note globale 1/10 pour que tu ne reparte pas les mains vides !lol
La fonction retourne un boolean et non un entier
Bon coding a tous
Doc
J'avais déjà été confronté au problème il y a quelque temps, et il me semble que le WinExec était restrictif si mes souvenirs sont bon, et qu'un ShellExecute était plus passe partout. Voici une fonction qui permet d'ouvrir un fichier quel qu'il soit, et qui teste aussi l'association (exemple fichier.doc), si Windows ne sait pas comment ouvrir ce fichier la boite de dialogue d'association d'extension à une application apparait.
uses SysUtils, ShellAPI, Windows;
function OpenFile(const Filename: string; const Handle: THandle = 0): integer;
{ Tente d'ouvrir le fichier dont le nom est passé en argument avec l'application associée à son extension. Si aucune application n'est associée à celle-ci, le dialogue "Ouvrir avec..." est appelé. }
var
errCode: Cardinal;
filePath: string;
begin
{ On stocke le chemin pour éviter de le décoder 2 fois }
filePath:= ExtractFilePath(Filename);
{ Tentative d'ouverture de l'application associée }
errCode:= ShellExecute(Handle, 'Open', PChar(Filename), '', PChar(filePath), SW_SHOWNORMAL);
{ Si la tentative a échoué avec le code SE_ERR_NOASSOC, c'est que l'extension n'est associée à aucune application }
if errCode = SE_ERR_NOASSOC then
{ Dans ce cas, on appelle le dialogue }
errCode:= ShellExecute(0, 'open', 'rundll32.exe', PChar('shell32.dll,OpenAs_RunDLL ' + Filename), PChar(filePath), SW_SHOWNORMAL);
{ Si le code retourné par ShellExecute est supérieur à 32, alors l'opération a réussi, sinon c'est un code d'erreur }
result:= errCode > 32;
end;
J'espère que ça pourra t'aider un peu. (même si c'est pas complétement dans le sujet)
bye.
- essaye de soigner ton francais :>>"cette source permet de réaliser un mini panneau de configuratin" !!!!!
- fichiers inutiles dans le zip --> *.~* et *.dcu
- NIVEAU EXPERT : !!!!!!! tu rigole ou quoi !le winexec est la premier chose que jai appris en delphi pour lancer la calculatrice windows ! le niveau de ta source est DEBUTANT !
- essaye de nommer tes composants et dajouter des commentaires puisque ta source sadresse a des débutants
- le titre de ta source devra etre "comment utiliser winexec pour lancer une application du panneau de configuration "
- si cetait pour faire un mini control panel il aurait suffi de mettre un shelllistview et de spécifier ROOT a panneau de config
- tu aurais pu faire :
procedure launchCPL(CPL:String);
begin
WinExec(PChar('rundll32.exe shell32.dll,Control_RunDLL'+ CPL'), SW_SHOWNORMAL);
end;
et a chaque onclick tu met
begin
LaunchCPL({le nom du fichier cpl});
end;
voila apperemment c'est tout :
note globale 1/10 pour que tu ne reparte pas les mains vides !lol
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.