webForumDet fria alternativet

köra program?

37 svar · 1 290 visningar · startad av voigtann1

voigtann1Medlem sedan juni 20019 519 inlägg
#1

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?

voigtann1Medlem sedan juni 20019 519 inlägg
#2

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..

arghulehMedlem sedan apr. 200311 inlägg
#3

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

voigtann1Medlem sedan juni 20019 519 inlägg
#4

men jag vill ha det i en c++ fil.. :e

NickemannenMedlem sedan aug. 20003 575 inlägg
#5

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 ;)

voigtann1Medlem sedan juni 20019 519 inlägg
#6

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

Engine^Medlem sedan dec. 20003 887 inlägg
#7

Då kan du ju börja med att kolla in funktionen CreateProcess närmare.

arghulehMedlem sedan apr. 200311 inlägg
#8

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

voigtann1Medlem sedan juni 20019 519 inlägg
#9

Hur gör jag "INI" filen då?

stenmarkMedlem sedan apr. 200318 inlägg
#10

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.

voigtann1Medlem sedan juni 20019 519 inlägg
#11

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.

fluffMedlem sedan juli 200268 inlägg
#12

ett tips är att escapa backslash tecken..

d.v.s skriv \\, när du vill få fram ett "\"

voigtann1Medlem sedan juni 20019 519 inlägg
#13

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..

nikoMedlem sedan juni 20022 599 inlägg
#14

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.

voigtann1Medlem sedan juni 20019 519 inlägg
#15

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?

nikoMedlem sedan juni 20022 599 inlägg
#16

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?

voigtann1Medlem sedan juni 20019 519 inlägg
#17

ville egentligen ha en så enkel lösning som möjligt med så lite kod som möjligt...

nikoMedlem sedan juni 20022 599 inlägg
#18

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.

voigtann1Medlem sedan juni 20019 519 inlägg
#19

Vad ska jag har vad hän då? kanske hjälper mig lite ändå..

nikoMedlem sedan juni 20022 599 inlägg
#20

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.

136 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)