Español
Fuente/ Codesnippets

Doppelstart Instanzen Mehrere Programmstarts Verhindern

 

Michael
Wodrich
Weil Yo una Weilchen brauchte, lo de el Ärmel a schütteln...
!
Keywords: mehrere Programmaufrufe/mehrere Instanzen/Mehrfachaufruf blocken/verhindern
Def $AppTitle "Mein Programmtitel"
Declarar WindowHandle&
Ventana 100,100 - %Maxx-300,%Maxy-300
a dieser Punto debería todavía kein Titel
definiert ser, sonst gehts torcido
WindowHandle& = FindWindow($AppTitle)

if WindowHandle& <> 0

    imprimir "Huch, Yo bin sí ya como."
    imprimir "Nach Tastendruck se en el 1. Instanz umgeschaltet."
    waitinput
    ShowWindow(WindowHandle&, 1)  evtl. verstecktes Ventana otra vez aktivieren
    SetWindowPos WindowHandle& = 100,100 - %Maxx-300,%Maxy-300; 0  en el Vordergrund holen
    end  ...y el 2. Instanz final

más

    imprimir "Ich bin einmalig."

endif

sólo después de el Abprüfung se el Fenstertitel gesetzt.
Título de la ventana $AppTitle
waitkey
end

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
07.09.2006  
 




Michael
Wodrich
Und después de Referencia de TS-Soft ni Mutex-Variante de el Phorum de Ragnar Rehbein.
Def CreateMutex(3) !"KERNEL32","CreateMutexA"
def GetLastError(0) !"KERNEL32.dll","GetLastError"

proc check_doppelstart    volver es 0 si doppelstart vorliegt

    Parámetros name$           Mutexname
    declarar mutex&,error&
    name$  = translate$(name$ ,"\","/")   tener Yo irgendwo gelesen, daß / verboten son
    mutex& = CreateMutex(0,1,addr(name$))
    error& = GetLastError()
    imprimir error&

    if error& = 183

        volver 0

    endif

    volver 1

ENDPROC

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

Gibts todavía weitere Möglichkeiten?

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
07.09.2006  
 



[quote:1532fb2073=Michael Wodrich]
Gibts todavía weitere Möglichkeiten?

Schöne Grüße
Michael Wodrich[/quote:1532fb2073]
Klar
CreateSemaphore(...) z.B. findeste irgendwo en MSDN oder PSDK
Pero el Mutex no unähnlich. Für el Mutexstring verwende Yo meist una GUID.
 
07.09.2006  
 



Das Einfachste:
 $U pipe.pcu = pipe.
declarar pipe&
caso pipe.is("odoku") : end
pipe&:=pipe.create("odoku")
cls
waitinput
pipe.close pipe&
 
07.09.2006  
 




Uwe
''Pascal''
Niemeier
¡Hola Personas!

Hier ni Möglichkeit por FileMapping.
Dabei no es sólo el neue Instanz automáticamente final, pero auch el laufende Instanz por Usermmessage informiert, sodass ellos se quizás en el Vordergrund conjunto kann.
El principio puede ser derart erweitern, dass mögliche Parámetro, el en Aufruf el 2. Instanz transferencia voluntad, a el 1.Instanz weitergereicht voluntad.
!
 $H Messages.ph
 $H Windows.ph
declarar MapHandle&,ViewHandle&
MapHandle&=~OpenFileMapping(~FILE_MAP_ALL_ACCESS,0,"Programm 1.1")

if MapHandle&--MappedFile disponible (enthält %hwnd de ya laufender Instanz)

    ViewHandle&=~MapViewOfFile(MapHandle&,~FILE_MAP_ALL_ACCESS,0,0,32)
    messagebox("Programm se ejecuta bereits","Meldung",0)
    sendmessage(long(ViewHandle&,0),5066,0,0)--Message a 1. Instanz
    ~UnmapViewOfFile(ViewHandle&)
    end
    más--Diese Instant es el erste > MappedFile invertir!
    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----sólo hier se el Ventana producido!!
    long ViewHandle&,0=%hwnd--Handle en MappedFile escribir

endif

usermessages 16----WM_CLOSE
usermessages 5066--Irgendein Valor, el hoch genug es para selbstdefinierte Msg.

mientras que 1------------Eingabeschleife

    waitinput
    caso %umessage=16:romper--Ende

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

        shownormal
        setactivewindow(%hwnd)
        setfocus(%hwnd)
        imprimir "Aktivierung por neue Instanz"

    endif

    ----Weitere Eingabeabfragen

endwhile

--Sollte en Ende erreicht voluntad:
~UnmapViewOfFile(ViewHandle&)
~CloseHandle(MapHandle&)

HTH
Pascal
 
07.09.2006  
 



Gute Concepto! Und hier el Selbe sólo kürzer y sin nötige Headerfiles:
 
07.09.2006  
 




Jac
de
Lad
Yo finde el beste Método es siempre todavía por Mutex:
Def CreateMutex(3) !"KERNEL32","CreateMutexA"
Def GetLastError(0) !"KERNEL32","GetLastError"
CreateMutex(0,1,"PROGRAMM")
caso 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
Yo benutze como mutexnamen (o. en filemapping) inzwischen en fast allen programmen par$(0), also el programmnamen inkl. pfad.
aber aufpassen, daß el backslsh raustranslatet se!
Yo fast siempre el anforderung, daß una programm no doppelt comenzó voluntad kann, una start unterschiedlicher konfigurationen de verschiedenen verzeichnissen o. por umbenenn des programms se posible ser.
para terminalserverumgebungen es todavía el präfix Global y Local interessant (hier muß el backslash beiben!).
así kann z.b. verhindert voluntad, daß una programm en varios sitzungen ausgeführt se (z.b. una einplatzlizenz).

r.r.
 
08.09.2006  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

9.483 Views

Untitledvor 0 min.
RudiB.28.08.2022
RICOSCH09.05.2019
AndreasS26.12.2018
PETER195618.07.2018
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie