Français
Source/ Codesnippets

Doppelstart Instanzen plusieurs Programmstarts Verhindern

 

Michael
Wodrich
Weil je un Weilchen brauchte, es aus dem Ärmel trop schütteln...
!
Keywords: plusieurs Programmaufrufe/plusieurs Instanzen/Mehrfachaufruf blocken/verhindern
Def $AppTitle "Mein Programmtitel"
Déclarer WindowHandle&
Fenêtre 100,100 - %Maxx-300,%Maxy-300
à cette Stelle sollte encore ne...aucune Titel
défini son, sonst gehts de travers
WindowHandle& = FindWindow($AppTitle)

si WindowHandle& <> 0

    imprimer "Huch, je suis oui déjà là."
    imprimer "Nach Tastendruck wird sur qui 1. Instanz umgeschaltet."
    waitinput
    ShowWindow(WindowHandle&, 1)  peut-être verstecktes la fenêtre wieder aktivieren
    SetWindowPos WindowHandle& = 100,100 - %Maxx-300,%Maxy-300; 0  dans den Vordergrund holen
    end  ...et qui 2. Instanz finissons

d'autre

    imprimer "Ich suis einmalig."

endif

seulement pour qui Abprüfung wird qui Fenstertitel gesetzt.
Titre de la fenêtre $AppTitle
waitkey
end

belle Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
07.09.2006  
 




Michael
Wodrich
et pour Hinweis de TS-Soft encore une Mutex-variante aus dem Phorum de Ragnar Rehbein.
Def CreateMutex(3) !"KERNEL32","CreateMutexA"
def GetLastError(0) !"KERNEL32.dll","GetLastError"

proc check_doppelstart    return ist 0 si doppelstart vorliegt

    Paramètres nom$           Mutexname
    declare mutex&,error&
    nom$  = translate$(nom$ ,"\","/")   hab je irgendwo gelesen, qui / interdit sommes
    mutex& = CreateMutex(0,1,addr(nom$))
    error& = GetLastError()
    imprimer error&

    si error& = 183

        return 0

    endif

    return 1

endproc

imprimer check_doppelstart("test")
imprimer check_doppelstart("test")
imprimer check_doppelstart("c:\testAaaaaaaaaaaaaaaaaa")
imprimer check_doppelstart("c:\testAaaaaaaaaaaaaaaaaa")
waitinput

Gibts encore weitere Opportunités?

belle Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
07.09.2006  
 



[quote-part:1532fb2073=Michael Wodrich]
Gibts encore weitere Opportunités?

belle Grüße
Michael Wodrich[/quote-part:1532fb2073]
bien sûr
CreateSemaphore(...) z.B. findeste irgendwo dans MSDN ou bien PSDK
Ist mais dem Mutex pas unähnlich. Pour den Mutexstring verwende je meist une GUID.
 
07.09.2006  
 



cela Einfachste:
 $U pipe.pcu = pipe.
declare pipe&
cas pipe.is("odoku") : end
pipe&:=pipe.create("odoku")
cls
waitinput
pipe.close pipe&
 
07.09.2006  
 




Uwe
''Pascal''
Niemeier
allô gens!

ici encore une Possibilité per FileMapping.
Dabei wird pas seulement qui neue Instanz automatisch finissez, mais aussi qui laufende Instanz per Usermmessage informiert, sodass vous sich peut-être dans den Vordergrund mettons peux.
cela Prinzip peux on derart erweitern, dass mögliche paramètre, qui chez Aufruf qui 2. Instanz transfert volonté, à qui 1.Instanz weitergereicht volonté.
!
 $H Messages.ph
 $H Windows.ph
declare MapHandle&,ViewHandle&
MapHandle&=~OpenFileMapping(~FILE_MAP_ALL_ACCESS,0,"Programm 1.1")

si MapHandle&--MappedFile vorhanden (contient %hwnd de bereits laufender Instanz)

    ViewHandle&=~MapViewOfFile(MapHandle&,~FILE_MAP_ALL_ACCESS,0,0,32)
    messagebox("Programm fonctionne bereits","Meldung",0)
    sendmessage(long(ViewHandle&,0),5066,0,0)--Message à 1. Instanz
    ~UnmapViewOfFile(ViewHandle&)
    end
    d'autre--cet Instant ist qui erste > MappedFile anlegen!
    MapHandle&=~CreateFileMapping($FFFFFFFF,0,~PAGE_READWRITE,0,32,"Programm 1.1")
    ViewHandle&=~MapViewOfFile(MapHandle&,~FILE_MAP_WRITE,0,0,32)
    window 100,100-600,400----seulement ici wird cela la fenêtre erzeugt!!
    long ViewHandle&,0=%hwnd--Handle dans MappedFile écrivons

endif

usermessages 16----WM_CLOSE
usermessages 5066--Irgendein Wert, qui hoch genug ist pour selbstdefinierte Msg.

tandis que 1------------Eingabeschleife

    waitinput
    cas %umessage=16:pause--Ende

    si %umessage=5066--------Usermessage de neuer Instanz

        shownormal
        setactivewindow(%hwnd)
        setfocus(%hwnd)
        imprimer "Aktivierung par neue Instanz"

    endif

    ----Weitere Eingabeabfragen

endwhile

--Sollte chez Ende erreicht volonté:
~UnmapViewOfFile(ViewHandle&)
~CloseHandle(MapHandle&)

HTH
Pascal
 
07.09.2006  
 



Gute concept! et ici cela Selbe seulement kürzer et sans nötige Headerfiles:
 
07.09.2006  
 




Jac
de
Lad
je trouve qui beste Methode ist toujours per Mutex:
Def CreateMutex(3) !"KERNEL32","CreateMutexA"
Def GetLastError(0) !"KERNEL32","GetLastError"
CreateMutex(0,1,"PROGRAMM")
cas Equ(GetLastError(),183):end

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
07.09.2006  
 




Ragnar
Rehbein
je benutze comme mutexnamen (bzw. chez filemapping) inzwischen chez presque allen programmen par$(0), alors den programmnamen inkl. pfad.
mais aufpassen, qui qui backslsh raustranslatet wird!
j'ai presque toujours qui anforderung, qui un programm pas doppelt gestartet volonté peux, un start unterschiedlicher konfigurationen aus verschiedenen verzeichnissen bzw. par umbenenn des programms soll possible son.
pour terminalserverumgebungen ist encore qui präfix Global et Local intéressant (ici doit qui backslash beiben!).
avec cela peux z.b. verhindert volonté, qui un programm dans mehreren sitzungen fonctionnement wird (z.b. une einplatzlizenz).

r.r.
 
08.09.2006  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

9.533 Views

Untitledvor 0 min.
RudiB.28.08.2022
RICOSCH09.05.2019
AndreasS26.12.2018
PETER195618.07.2018
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie