Seite 1 von 1

SingleApplication (windows only)

Verfasst: 20. Juli 2007 15:39
von Burgpflanze
Wie der Titel vermuten lässt, handelt es sich um eine Klasse, um den Mehrfachstart einer Anwendung zu verhindern.
Zusätzlich ist es möglich, an die bereits laufende Instanz eine Textnachricht zu schicken, z. B. eine Pfadangabe, die der zweiten Instanz als Argument mitgegeben wurde.
Die Klasse selbst ist eine Ableitung von QApplication.

Das Archiv enthält eine Testanwendung, die selbsterklärend sein sollte.

Bei Fragen oder Problemen bitte hier melden. :wink:

Verfasst: 23. Juli 2007 18:14
von seneca
Ich erhalte ich beim Compilieren mit VS2005 Prof + SP1 an 2 Stellen einen Fehler. Du allozierst da einen Puffer mit

Code: Alles auswählen

char buf[len];
wobei jedoch len keine Konstante ist, sondern eine Variable die zur Laufzeit ermittelt wird. Ich habe das so ersetzt und nun funktioniert es:

Code: Alles auswählen

char *buf = new char[len];

// .... code der buf verwendet ....

delete[] buf;
Besten Dank für den Code!

Verfasst: 25. Juli 2007 11:30
von Burgpflanze
Bei mir funkioniert es mit mingw aber ohne Probleme, deshalb kann ich das nicht nachvollziehen.
Zwar ist "len" eine Laufzeitvariable, jedoch weise ich ihr ja vorher einen Wert zu, somit sollte das eigentlich keine Rolle spielen, oder doch :?:
Besten Dank für den Code!
Danke!

Textnachricht bei Mac OS Programm?

Verfasst: 19. April 2008 14:29
von s-valve
Hallo,

gibt es auch eine Möglichkeit unter Mac OS X dem laufenden Programm eine Pfadangabe mitzuteilen, bspw. dass eine Datei geöffnet werden soll?
Unter Windows ist das ja sehr komfortable mit Deinem Code eine Datei per Rechtsklick darauf öffnen zu lassen.

Gruß,
M

SingleApplication (windows only) +linux

Verfasst: 4. Mai 2008 16:00
von patrik08
Mit Linux geht es auch durch di socket
der vorteil man kann dann auch file senden zum oeffnen oder andere meldungen....

Code: Alles auswählen


#ifdef Q_OS_UNIX
/* kurzer name der application */
#define _UNIX_SOCKET_ "/tmp/layeres.sock"

#include <stddef.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>

int  make_local_app_socket()
{
    struct sockaddr_un name;
    int sock;
    size_t size;
    sock = socket (PF_LOCAL, SOCK_DGRAM, 0);
       if (sock < 0)
         {
           return 0;
         }
    name.sun_family = AF_LOCAL;
    strncpy (name.sun_path, _UNIX_SOCKET_, sizeof (name.sun_path));
    name.sun_path[sizeof (name.sun_path) - 1] = '\0';
    size = (offsetof (struct sockaddr_un, sun_path) + strlen (name.sun_path) + 1);

       if (bind (sock, (struct sockaddr *) &name, size) < 0)
         {
           /* bereits offen andere apps ! */
           return 0;
         }
    return sock;
}



#endif
int unix_sock = 0;
unix_sock = make_local_app_socket();
bool Apps_Offen = unix_sock == 0 ?  true :  false;



Als reales beispiel:
http://fop-miniscribus.googlecode.com/s ... t/main.cpp
http://www.qt-apps.org/content/show.php ... tent=80234