shellExe = ShellExecute(Application->Handle, "open", fileName, /*Parms*/ NULL, dftPath, SW_SHOWNORMAL); if ((int)shellExe <= 32L) Application->MessageBox("Filen" + fileName + "kunne IKKE startes automatisk.", "Fejl under opstart", MB_ICONERROR | MB_OK);
fileName indeholder navnet på den fil du vil behandle, f.eks. en .MP3 fil. Du skal finde en detaljeret beskrivelse af kaldet i Win SDK hjælpen unde MSHELP folderen.
shellExe er af typen HINSTANCE (dvs. i virkeligheden en VOID*), men bliver også brugt til at returnere en fejlkode - derfor caster jeg den til (int) når det skal checkes om den er <= 32. (Hvilket betyder fejl.) Hvis den er > 32 gik kaldet godt.
Bemærk at dit program jo altså kører videre, hvis opstarter lykkes - du får så blot startet endnu et program. (Jeg lader mit program minimere sig selv i den situation, via frmMain->WindowState = wsMinimized.)
Ok det ser ud som om det er det jeg leder efter, men det virker ikke hos mig. Jeg bruger Borland builder 4.0, og du skal regne med at jeg ikke er særlig god til det.
Jeg forstår at følgende danner en fejlbox ved enventuel fejl. Denne del kompilerer helt fint:
if ((int)shellExe <= 32L) Application->MessageBox("Filen" + fileName + "kunne IKKE startes automatisk.", "Fejl under opstart", MB_ICONERROR | MB_OK);
Ovenstående er klippet ud af en sammenhæng - jeg troede du kunne gætte dig til hvad du skulle erstatte med dit eget kode.
Du mangler at inkludere de nødvendige header filer (først i koden - f.eks. efter '#include <vcl.h>' i toppen af modulet):
#include <stdlib.h> #include <shellapi.h>
samt definere et par variabler (i den event handler hvor du skal bruge koden):
HINSTANCE shellExe; char dftPath[MAXPATH];
'dftPath' variablen skal indeholde den sti som du ønsker at programmet skal "se" som nuværende path når det kører. (Hvis du f.eks. vil starte Microsoft Word op, og have det til at "se" direkte ned i folderen 'C:\DOKUMENTER\MSWORD', så skal du initialisere dftPath sådan her:
sprintf(dftPath, "C:\\DOKUMENTER\\MSWORD\\");
Et fungerende eksempel kunne være (idet jeg antager at du har en knap på din form der hedder Button1):
Jeg mener du kan checke på om den process du startede (hvis handle havner i shellExe) stadig kører - og dermed lade programmet vente på det. Check Windows SDK hjælpen - eller skriv igen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.