Avatar billede nubi19 Nybegynder
19. juli 2002 - 14:09 Der er 22 kommentarer og
1 løsning

Forbyd flere kørsler på en gang, hvordan ?

Jeg ved det kan lade sig gøre, at gøre sådan at man kun kan starte et program EN gang, dvs. når man så forsøger at starte det, mens det allerede kører, så sker der intet.
Men hvordan gør man det ?
Avatar billede jpk Nybegynder
19. juli 2002 - 14:15 #1
Ren C++ eller..?
Avatar billede disky Nybegynder
19. juli 2002 - 14:16 #2
spørg systemmet om en process med samma navn allerede kører.
Avatar billede jpk Nybegynder
19. juli 2002 - 14:17 #3
Du kan bruge FindWindow til at se om der allerede kører et program med en bestemt window text eller af en bestemt klasse, hvis ja, lad være med at starte programmet...
Avatar billede chries Nybegynder
19. juli 2002 - 14:17 #4
Må der bruges windows API ?
Avatar billede nubi19 Nybegynder
19. juli 2002 - 17:20 #5
Well bruger Borland C++ Builder 4.0, og API må gerne bruges.
Den med FindWindow duer vel ikke hvis programmet ligger i systray ?
Avatar billede hermandsen Juniormester
19. juli 2002 - 17:22 #6
Hvis du bruger C++ Builder, så kan det her måske hjælpe lidt... Sådan gøres der i hvert fald i Delphi, så kan du jo bare skrive koden lidt om og bruge de samme API-kald! ;)

http://www.pythia.dk/tips/vis_tip.php?id=21
Avatar billede nubi19 Nybegynder
19. juli 2002 - 17:54 #7
Hmmm jeg har lidt probs med at få konverteret den Delphi kode, plus jeg aner ikke hvor jeg skal smide den ind henne ?
Avatar billede nubi19 Nybegynder
19. juli 2002 - 18:07 #8
FindWindow duer, men hvis jeg smider den i FormCreate så opsnapper den også det første program, dvs. så kan jeg ikke starte programmet overhovedet. Kan man ikke smide den tidligere ?

Og hvilken kommando bruges til at afslutte programmet uden at den når at udføre nogen kode, som f.eks. OnClose, OnDestroy og FormCreate (Det er væsentligt at den ikke når det).
Avatar billede hermandsen Juniormester
19. juli 2002 - 18:21 #9
Hmmm, det kan være at det kun er Delphi der benytter initialization og finalization, men det er i hvert fald CreateMutex-funktionen du skal kigge på...

Den skal oprettes når programmet initialiseres! Altså før FormCreate (så vidt jeg ved)...
Avatar billede nubi19 Nybegynder
19. juli 2002 - 18:24 #10
Oki der kommer det første store problem, hvor dælen er før-formcreate ?
Avatar billede hermandsen Juniormester
19. juli 2002 - 19:05 #11
Application->Initialize eller noget i den retning måske?
Avatar billede nubi19 Nybegynder
19. juli 2002 - 19:38 #12
Det er en void, tror ikke den kan bruges til noget.
Avatar billede hermandsen Juniormester
19. juli 2002 - 22:00 #13
Uha, det er lang tid siden jeg har arbejdet med Builder...

Jeg mener at der er en Unit1.cpp-fil og så en Project1.h-fil eller noget til projektet... Prøv at kigge på den... Er ikke 100% sikker, da det efterhånden er ved at være noget tid siden...

Ellers skal jeg prøve at finde noget på nettet til dig, men prøv det indtil videre! ;)
Avatar billede hermandsen Juniormester
19. juli 2002 - 22:15 #14
http://www.thebits.org/tutorials/api/onceonly.html
http://home.att.net/~robertdunn/Yacs.html <- kig under "Windows mailslots class (TMailSlot class)"

Se om der er noget du kan bruge! ;)
Avatar billede nubi19 Nybegynder
20. juli 2002 - 00:24 #15
Øv den der singleton (øverste link) har et broken download :(
Den lød ellers god.
Avatar billede nubi19 Nybegynder
20. juli 2002 - 00:32 #16
Har lige studeret samtlige .h og .cpp filer, ingen af dem har noget jeg kunne bruge :(
Avatar billede nubi19 Nybegynder
20. juli 2002 - 00:46 #17
Har netop prøvet at losse det ind før Application->Initialize()
Der skete blot det at jeg ikke kunne starte programmet :(
Avatar billede hermandsen Juniormester
20. juli 2002 - 01:21 #18
Hmmm... Jeg kigger på det i morgen... Prøv at søge lidt på Google...
Søg: "one instance" "C++ Builder" (med quotes, så søger den på hele sætningen ;))
Avatar billede nubi19 Nybegynder
25. juli 2002 - 18:44 #19
hermandsen jeg har netop fået det til at fungere takket være din hjælp, så du får pointene.
Avatar billede hermandsen Juniormester
25. juli 2002 - 19:13 #20
Velbekomme da! :)

Takker for points!
Avatar billede soepro Nybegynder
30. juli 2002 - 15:35 #21
Kunne du poste den kode, der nu virker ?
Avatar billede nubi19 Nybegynder
30. juli 2002 - 16:58 #22
Hmmm er lidt besværligt, idet den ligger mange steder. Men gå ind på http://www.thebits.org/tutorials/api/onceonly.html og hent deres tutorial (acrobat reader format), den brugte jeg.
Avatar billede soreno Praktikant
08. august 2002 - 18:47 #23
følgende har jeg brugt i flere tilfælde, skal indsættes umiddelbart efter main/winmain, eks:

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
  HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, "unikIdentifikationForDenneApplikation");
  if(hEvent)
    if(ERROR_ALREADY_EXISTS == GetLastError())
      return 0;
  createWindowAndDoStuiff();
  ..
}
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