[VB6] Programma mag maar één keer opstarten

Pagina: 1
Acties:

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 10:29
Hallo,

Weten jullie misschien hoe ik mijn programma zo kan maken dat wanneer je op de exe dubbelklikt en het programma draait al hij niet nog een keer het progamma opstart maar hij het draaiende programma laat zien?

Verwijderd

www.planet-soure-code.com :) kun je heel veel vinden

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22-08 10:45

mulder

ik spuug op het trottoir

App.PrevInstance

oogjes open, snaveltjes dicht


Verwijderd

was et altijd maar zo makkelijk he :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Uh weet niet of VB het afpatched maar officieel is de PrevInstance van iedere 32-bit applicatie NULL en alleen aanwezig voor legacy 16-bit applicaties.

Correcte methode is een named mutex, daarop een WaitForSingleObject met timeout 0, en als je WAIT_TIMEOUT krijgt is het al open, en anders houdt je 'm vast tot einde programma.

Professionele website nodig?


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

curry684 schreef op 28 May 2003 @ 15:54:
Uh weet niet of VB het afpatched maar officieel is de PrevInstance van iedere 32-bit applicatie NULL en alleen aanwezig voor legacy 16-bit applicaties.

Correcte methode is een named mutex, daarop een WaitForSingleObject met timeout 0, en als je WAIT_TIMEOUT krijgt is het al open, en anders houdt je 'm vast tot einde programma.
huuuuuuuuuu?
Wat is dit dan?
Kun je het iets beter uitleggen? :)

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Kan zelfs zonder wait, in C++:
C++:
1
2
3
4
5
6
7
8
HANDLE  l_Mutex = CreateMutex(NULL, FALSE, "MyProgramName");
if(!l_Mutex)
  MessageBox(NULL, "Fatal startup error", "Error", 0);
else if(GetLastError() == ERROR_ALREADY_EXISTS)
  MessageBox(NULL, "Program cannot run twice", "Error", 0);
else
  RunTheProgram();
ReleaseMutex(l_Handle);

Professionele website nodig?


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

curry684 schreef op 28 May 2003 @ 15:54:
Uh weet niet of VB het afpatched maar officieel is de PrevInstance van iedere 32-bit applicatie NULL en alleen aanwezig voor legacy 16-bit applicaties.
Ik denk dat VB het afvangt, want App.PrevInstance werkt uitstekend :)

Exact expert nodig?


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Crazy D schreef op 30 May 2003 @ 16:15:
Ik denk dat VB het afvangt, want App.PrevInstance werkt uitstekend :)
Maar de Mutex methode werkt beter, iig in combinatie met Inno-Setup, die kan checken of er een bepaalde Mutex bestaat voor 'ie gaat setuppen. Dus als je van plan was er een setup voor te bouwen met Inno-Setup, kun je beter aan de Mutex.

Aan dat stukje C daarboven te zien is het nauwelijks ingewikkelder dan de App.PrevInstance.

Als je trouwens ook je programma naar voren wilt halen als het een tweede keer gestart wordt, kun je FindWindowEx() gebruiken en dan een message naar je window sturen.

[ Voor 16% gewijzigd door Gerco op 30-05-2003 16:28 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!

Pagina: 1