Hur ser en enkel program ut för att kunna köra direkt genom att trycka på knappar.. till exempel
GAMES
--------
1 Counter-Strike
2 Hitman
etc etc
och när man trycker på 1 så ska CS startas.. till exempel.. hur ser en sådan här program ut?
37 svar · 1 290 visningar · startad av voigtann1
Hur ser en enkel program ut för att kunna köra direkt genom att trycka på knappar.. till exempel
GAMES
--------
1 Counter-Strike
2 Hitman
etc etc
och när man trycker på 1 så ska CS startas.. till exempel.. hur ser en sådan här program ut?
En sak till om det inte är förmycket
skulle vilja ha en fil typ .ini fil som man kan skriva "path" eller något som pekar på Counter-Strike mm..
Du kan ju istället för att programmera i C skapa en .bat-fil (som också kan konvertes till en .com-fil med ett speciellt program). Gör så här. Skapa en bat-fil med t.ex. Anteckningar eller Edit i Dos. Skriv detta:
@echo off
cls
echo.
echo 1 Counter-Strike
echo 2 Hitman
echo 3 AVBRYT
echo.
choice /c:123 Välj spel
if errorlevel 1 goto CounterStrike
if errorlevel 2 goto Hitman
if errorlevel 1 goto End
:CounterStrike
cd c:\Spel\CounterStrike
counterstrike.exe
goto End
:Hitman
cd c:\Spel\Hitman
hitman.exe
goto End
:End
Det är mer komplicerat i C-kod. Någon annan får svara på hur man gör det i denna kod.
/MVH Johannes
men jag vill ha det i en c++ fil.. :e
Istället för en ini fil gör att den hämtar sökvägen i registret.
Om den inte finns där kanske programmet vill skapa en ini fil.
Jag har precis börjat med C så jag vet tyvärr inte.
Däremot vet jag hur man gör i .NET
https://www.dodwars.com/hlserverspy/'
Knaglig engelska ;)
jag vill inte ha server info eller något.. vill bara ha en exe fil som man kan välja.. såsom BAT filen.. fast jag vill göra det i C++.. :e
Då kan du ju börja med att kolla in funktionen CreateProcess närmare.
I dos finns det en funktion system(...) respektive en annan execl(...). Se exempel.
system("hitman.exe");
execl("hitman.exe", NULL);
system(..) startar programmet och när programmet är klart återvänder vi till koden efter system(...).
execl(...) startar programmet men precis innan stängs programmet som execl(...) kallades ifrån av. Så på detta slipper man ha båda programmen igång.
Notera att detta är för dos-fixerade.
/Jompa
Hur gör jag "INI" filen då?
Vilken kompilator använder du?
jag vet hur man skulle kun a göra ett dialog baserat MFC program som gör det du vill.
Gör som någon ovan sa använd CreateProcess(). Kolla på msdn.microsoft.com
Den här länken säger lite om hur man startar upp ett annat program inifrån ett annat.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/apcompat/apcompat/call_createprocess_correctly.asp
Angående ini filen så är det väl bara att du skapar en .ini fil i anteckningar och läser in den i c++ programmet.
Använder Borland C++ om det var din fråga.... hur gör man då? är det #include <filen.ini>
hur "gör" man ini filen?
Om vi arghuleh exempel på system("") saken.. vad är det för include fil man ska köra?
jag får om jag skriver denna kod
system("d:\games\counter-strike\cstrike.exe");
d:gamescounter-strikecstrike.exe är inte ett internt kommando, externt kommando,
program eller kommandofil.
Det fungera! :e 2 frågor kvar då.. hur lägger man in ini filer och hur gör man för att ladda "variablerna" typ
[Half-life]
dir = "D:\Games\Counter-Strike"
eller något sådant..
Exempel på innehåll i ini-fil:
[Apps]
App1="d:\winnt\System32\calc.exe"
App2="d:\winnt\system32\notepad.exe"
Exempel på kod:
#include<windows.h>
#include<string.h>
int main()
{
char szIniFile[200];
//Hitta sökvägen till oss själva.
GetCurrentDirectory(sizeof(szIniFile),szIniFile);
//Förutsätt att ini-filen ligger i samma mapp.
strcat(szIniFile,"\\Inifile.ini");
char szApp1[200];
//Läs in App1 från ini-filen.
GetPrivateProfileString("Apps",
"App1",
"",
szApp1, sizeof(szApp1),
szIniFile);
//Kör App1.
ShellExecute(NULL, "open", szApp1, NULL, NULL, SW_SHOW);
return 0;
}
I din egen kod får du ändra så att ShellExecute kopplas till ett knappklick.
detta var avancerat :e
denna kod såg himla bra ut.. fast jag hade tänkt mig ha mååånga alternativ med swich(val)
{
case '1'
starta CS
case '2'¨
Starta miniräknaren
}
kan man få lite mer hjälp?
Då får du anropa GetPrivateProfileString mååånga gånger och fylla mååånga buffertar szApp1, szApp2 ...
Sen kopplar du ShellExecute(NULL, "open", szApp1 .. till click-eventet för knapp1
ShellExecute(NULL, "open", szApp2 .. till click-eventet för knapp2 osv .. osv ..
Det är inte den mest dynamiska lösningen men den borde väl duga till att komma igång med?
ville egentligen ha en så enkel lösning som möjligt med så lite kod som möjligt...
ville egentligen ha en så enkel lösning som möjligt med så lite kod som möjligt
Då får jag nog göra dig besviken. Att läsa in en sökväg från en ini-fil och dra igång applikationen på färre än tre rader (mitt exempel) gör du nog inte i nåt programspråk. Sen tillkommer ju lite kod för att koppla knapparna till rätt kodsnutt.
Vad ska jag har vad hän då? kanske hjälper mig lite ändå..
Tja, nu kan jag inte Borland-miljön alls och har ingen aning om hur man skapar olika projekttyper, men jag förutsätter att du kan det:
1. Deklarera char szIniFile[200]; ovanför WinMain.
2. Lägg detta nånstans i början av WinMain:
GetCurrentDirectory(sizeof(szIniFile),szIniFile);
strcat(szIniFile,"\\Inifile.ini");
3. Skapa ett fönster med X st. knappar (jag vet inte hur man gör i C++-builder).
4. Placera en ini-fil med formatet ovan i samma mapp som exe-filen.
5. Lägg denna kod i click-eventen för de olika knapparna:
char szApp[200];
GetPrivateProfileString("Apps",
"AppX",
"",
szApp, sizeof(szApp),
szIniFile);
if(strcmp(szApp,"")!=0)
ShellExecute(NULL, "open", szApp, NULL, NULL, SW_SHOW);
else
MessageBox(NULL,"Det finns inget program kopplat till denna knappen.","Varning.",MB_OK);
och byt ut "X" mot ordningsnumret för den appen i ini-filen.