Avatar billede slughead Nybegynder
21. maj 2003 - 14:19 Der er 18 kommentarer og
2 løsninger

Fil eksekvering 2

Med Shellexecute kan man i C++ eksekvere filer på følgende måde:

ShellExecute(NULL, "open", "notepad.exe", NULL, NULL, SW_NORMAL);

Men... hvis jeg vil eksekvere en fil med en længere sti f.eks.

C:\Spil\Bomberman\BM95.exe

... så kan det ikke bare gøres ved at skrive:
ShellExecute(NULL, "open", "C:\Spil\Bomberman\BM95.exe", NULL, NULL, SW_NORMAL);

Hvordan kan det så gøres!?
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 14:20 #1
ShellExecute(NULL, "open", "C:\\Spil\\Bomberman\\BM95.exe", NULL, NULL, SW_NORMAL);
Avatar billede soreno Praktikant
21. maj 2003 - 14:20 #2
ShellExecute(NULL, "open", "C:\\Spil\\Bomberman\\BM95.exe", NULL, NULL, SW_NORMAL);
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 14:23 #3
Kan du virkelig på 2 sekunder nå at skrive af fra mig ... flot klaret :)))
Avatar billede slughead Nybegynder
21. maj 2003 - 14:25 #4
Jeg har nu prøvet med :

ShellExecute(NULL, "open", "D:\\Games\\Bomberman\\BM95.exe", NULL, NULL, SW_NORMAL);

Det virker ikke.
Avatar billede slughead Nybegynder
21. maj 2003 - 14:26 #5
hvis I ikke har gættet det, så ligger filen i d:\games\bomberman... !
Avatar billede soreno Praktikant
21. maj 2003 - 14:29 #6
Dette virker fint hos mig (lang path):

#include <windows.h>

int main(int argc, char **argv)
{
    ShellExecute(NULL, "open", "c:\\Documents and Settings\\Administrator\\My Documents\\cpp\\skabeloner\\win32_dialog\\main.exe", NULL, NULL, SW_NORMAL);

    return 0;
}

Har du kigget om filens placering er korrekt ?
Avatar billede slughead Nybegynder
21. maj 2003 - 14:31 #7
filens placering er god nok.
Kan det have noget at gøre med, at jeg bruger Borland C++ 6 pro, som jo er visuelt!?
Avatar billede slughead Nybegynder
21. maj 2003 - 14:33 #8
jeg har gjort sådan!:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ShellExecute(NULL, "open", "D:\\Games\\Bomberman\\BM95.exe", NULL, NULL, SW_NORMAL);
}
Avatar billede soreno Praktikant
21. maj 2003 - 14:34 #9
Prøv at kør:
D:\Games\Bomberman\BM95.exe

Via:
Start -> Run

Starter programmet (spillet ?) så ?
Avatar billede segmose Nybegynder
21. maj 2003 - 14:34 #10
Mangler du evt. at angive working directory isteder for en af de mange NULL?
Avatar billede slughead Nybegynder
21. maj 2003 - 14:35 #11
ja... det virker fint!
Avatar billede slughead Nybegynder
21. maj 2003 - 14:38 #12
det har vist ikke noget at gøre med alle de NULL'er!
Avatar billede segmose Nybegynder
21. maj 2003 - 14:39 #13
Prøv lige at paste parameter listen fra ShellExecute.
Avatar billede soreno Praktikant
21. maj 2003 - 14:40 #14
Prøv at sætte en MessageBox ind før du kalder ShellExecute - det kunne jo være koden slet ikke kaldes...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  MessageBox(NULL, "ShellExecute i TForm1::Button1Click", "Debug:", MB_OK);
  ShellExecute(NULL, "open", "D:\\Games\\Bomberman\\BM95.exe", NULL, NULL, SW_NORMAL);
}
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 14:41 #15
(PS: Jeg frafalder point. Giv dem til Søren når I finder løsningen)
Avatar billede slughead Nybegynder
21. maj 2003 - 14:45 #16
Jeg har prøvet det nu... også mens jeg debugger ... koden bliver skam kaldt, men det sker der ikke noget ved!
Avatar billede soreno Praktikant
21. maj 2003 - 14:50 #17
Hmmm, det må være et eller andet galt hos dig.

Prøv dette:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  char buffer[256];
  int val;
  val = ShellExecute(NULL, "open", "D:\\Games\\Bomberman\\BM95.exe", NULL, NULL, SW_NORMAL);
  itoa(val, buffer, 10);
  MessageBox(NULL, buffer, "Debug:", MB_OK);
}

Hvilket tal skriver den ud ?
(Du skal nok tilføje #include <stdio.h> for at kunne bruge itoa())
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 14:54 #18
Overvej:

ShellExecute(NULL, "open", "D:\\Games\\Bomberman\\BM95.exe", NULL, "D:\\Games\\Bomberman", SW_NORMAL);
Avatar billede slughead Nybegynder
21. maj 2003 - 14:56 #19
Eriks måde virkede...
Tak for hjælpen. Begge to.
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 15:10 #20
Det var jo så segmose, der havde ideen... Den anførte parameter angive
working directory for programmet. Uden den anvendes - visnok - dit C-programs
working directory.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester