![]() |
Re: Nur 1 Instanz des Programmes
Welches Betriebssystem nutzt du? Bei XP und TurboDelphi geht alles. Starte deine Projekt1.exe und anschließend startest du über Delphi die Anwendung ein zweites Mal und gehst dabei per Debugger alle Einzelschritte durch (F7). Die Anwendung sollte bei Halt() ankommen, in deinem Fall jedoch offensichtlich wo anders.
|
Re: Nur 1 Instanz des Programmes
Ich hab mir des päckchen nochma runtergeladen. Ich kann Project1.exe öffnen, sehs, kanns schliessen und wieder öffnen und sehen, also das geht. wenn aber eins offen ist und ich ein zweites starte kommt 5000ms lang eine warteuhr , aber mein bestehendes project1 fenster bleibt unverändert. in meim tskmgr unter prozesse ist Project1 nun zweimal aufgeführt. ich denkma, dass diesich mit unterschiedlichen IDs bei windows anmelden. aber warum?
nutzen tu ich XP und delphi 7 enterprise |
Re: Nur 1 Instanz des Programmes
Hats euch die sprache verschlagen?
ich versteh des problem von dem progg net, immerhin scheint es ja zu wissen, dass es schoneinmal besteht, sonst würde sihc das zweite auch zeigen. Andererseits schliesst sich instanz 2 nicht, was irgendwie ziemlich verwirrend is. und der code von dem oneinst is mir sowieso schleierhaft :cry: |
Re: Nur 1 Instanz des Programmes
Zitat:
Möglicherweise liegt es daran das unsereiner seinen Sourcecode nicht kennt und es wird ein buntes Raten veranstalted. |
Re: Nur 1 Instanz des Programmes
http://assarbad.net/de/stuff/!import/nico.old/
der link taucht oben schonmal auf. da hab ich des gezunsel her. |
Re: Nur 1 Instanz des Programmes
Und ich schrieb zwei mal, du sollest den Debugger für die Zweitinstanz benutzen, um herauszufinden, wo du landest, sonst können wir nicht helfen.
Delphi-Quellcode:
// Mutex erstellen...
// Mutex-Rückgabewert: case GetLastError of 0: begin { Wir haben den Mutex angelegt; sind also die erste Instanz. } // Debug showmessage('Hier passiert gar nichts, es ist die Erstinstanz, das Programm wird sichtbar'); end; ERROR_ALREADY_EXISTS: begin { Es gibt also schon eine Instanz - beginnen wir mit dem Prozedere. } // Debug showmessage('Es gibt bereits eine Instanz, Befehle werden übergeben'); try HandleSecondInstance; finally { was auch immer passiert, alles endet hier ;o) } { Die 183 ist nicht ganz zufällig, kleiner Spaß } Halt(10); end; end; else { Keine Ahnung warum wir hier landen sollten, } { außer Microsoft hat wiedermal die Regeln geändert. } { Wie auch immer - wir lassen das Programm starten. } // Debug showmessage('Ausnahmefehler'); end; |
Re: Nur 1 Instanz des Programmes
Dieser Code aus der OneInst.pas von Oliver kompiliert nicht unter Delphi 2010 - Compiler error "inkompatible Typen":
Delphi-Quellcode:
Ich versteh nur nicht warum, sieht doch alles wunderbar aus oder?
{ kleine Hilfsfunktion die uns die Kommandozeilenparameter entpackt }
function ParamBlobToStr(lpData: PChar): string; var pStr: PChar; begin Result := ''; pStr := lpData; while pStr[0] <> #0 do begin Result := Result + string(pStr) + #13#10; pStr := @pStr[lstrlen(pStr) + 1]; <<< "E2008 - incompatible types" end; end; { kleine Hilfsfunktion die uns die Kommandozeilenparameter einpackt } function ParamStrToBlob(out cbData: DWORD): PChar; var Loop: Integer; pStr: PChar; begin cbData := Length(ParamStr(1)) + 3; { gleich inklusive #0#0 } for Loop := 2 to ParamCount do cbData := cbData + DWORD(Length(ParamStr(Loop)) + 1); Result := GetMemory(cbData); ZeroMemory(Result, cbData); pStr := Result; for Loop := 1 to ParamCount do begin lstrcpy(pStr, PChar(ParamStr(Loop))); pStr := @pStr[lstrlen(pStr) + 1]; <<< "E2008 - incompatible types" end; end; |
Re: Nur 1 Instanz des Programmes
Zitat:
|
Re: Nur 1 Instanz des Programmes
Jo, hast natürlich recht. Ich hatte aus irgendeinem Grund in den Projekt-Optionen "Typed @ operator" auf True stehen. Mit der Default-Einstellung "False" kompiliert es.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz