SingleApplication (windows only)

Code-Schnippsel, oder Tipps und Tricks, die einem beim Programmieren mit Qt helfen können.
Antworten
Burgpflanze
Beiträge: 89
Registriert: 24. Februar 2006 16:41
Wohnort: Dresden

SingleApplication (windows only)

Beitrag 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:
Dateianhänge
mytest.rar
Testanwendung:
VS 2005-Makefile-Projekt (mingw / QMAKESPEC: win32-g++)
(12.03 KiB) 928-mal heruntergeladen
Gruß, Peter
seneca
Beiträge: 23
Registriert: 6. Januar 2006 09:57

Beitrag 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!
Burgpflanze
Beiträge: 89
Registriert: 24. Februar 2006 16:41
Wohnort: Dresden

Beitrag 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!
Gruß, Peter
s-valve
Beiträge: 87
Registriert: 1. April 2007 15:03
Kontaktdaten:

Textnachricht bei Mac OS Programm?

Beitrag 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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

SingleApplication (windows only) +linux

Beitrag 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
.........................
speack português italiano deutsch english castellà qt
Antworten