externes Programm zusammen mit der PB-IDE beenden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: externes Programm zusammen mit der PB-IDE beenden

Beitrag von Josh »

SDL hat geschrieben:... welchen Sinn soll das haben?
Macht Sinn, wenn ich einen Code schreibe und den Code in einer anderen Pb-Version testen will. Oder ich schreiben einen Code in x32 und will ihn in x64 testen.

Dann kommt noch eine blöde Eigenschaft von Pb hinzu. Wenn ich ein Pb-File anklicke, dann wird das mit der zuletzt geschlossenen Pb-Version geöffnet, unabhängig davon, ob noch eine andere Pb-Version geöffnet ist. Das kann zu verwirrenden Situationen führen, da auf einmal eine zweites Pb-Fenster öffnet, obwohl ich das eigentlich gar nicht will.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: externes Programm zusammen mit der PB-IDE beenden

Beitrag von RSBasic »

Josh hat geschrieben:
SDL hat geschrieben:... welchen Sinn soll das haben?
Macht Sinn, wenn ich einen Code schreibe und den Code in einer anderen Pb-Version testen will. Oder ich schreiben einen Code in x32 und will ihn in x64 testen.
Dafür gibt es doch eigentlich die Einstellung "Zusätzliche Compiler".
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: externes Programm zusammen mit der PB-IDE beenden

Beitrag von Josh »

RSBasic hat geschrieben:Dafür gibt es doch eigentlich die Einstellung "Zusätzliche Compiler".
Da hab ich meinen Preprocessor eingetragen :freak:
Benutzeravatar
SDL
Beiträge: 65
Registriert: 15.09.2006 05:19
Computerausstattung: MSI 990FXA-GD80
AMD FX-8350(3,1GHz) 4-4,4GHz
Corsair Dominator Platinum 8GB 2133 (2240)
2 Nvidia GeForce GTX 550Ti
Xilence XQ semipassives Netzteil 750Watt
SATA III WDC WD10 1TB
SATA III SSD Toshiba 128 GB
SATA III SSD Samsung 840 EVO 250 GB
eSATA WDC WD SE16 500 GB

Wassergekühlt

Win 7 pro
Leistungsindex 7,8
Wohnort: Hansestadt Stendal

Re: externes Programm zusammen mit der PB-IDE beenden

Beitrag von SDL »

Hey, Jungs,

darf ich mal hier an dieser Stelle abschließen.
Ich habe durch die Diskussion viele Hinweise erhalten und an was ich alles Denken muß.

Super :bounce:

Ich tüftel und pack meine Lösung rein.

Danke noch einmal :praise: :allright:
Zu meiner Schulzeit war die Bildung kostenlos, für einige aber Umsonst.
Benutzeravatar
SDL
Beiträge: 65
Registriert: 15.09.2006 05:19
Computerausstattung: MSI 990FXA-GD80
AMD FX-8350(3,1GHz) 4-4,4GHz
Corsair Dominator Platinum 8GB 2133 (2240)
2 Nvidia GeForce GTX 550Ti
Xilence XQ semipassives Netzteil 750Watt
SATA III WDC WD10 1TB
SATA III SSD Toshiba 128 GB
SATA III SSD Samsung 840 EVO 250 GB
eSATA WDC WD SE16 500 GB

Wassergekühlt

Win 7 pro
Leistungsindex 7,8
Wohnort: Hansestadt Stendal

Re: externes Programm zusammen mit der PB-IDE beenden

Beitrag von SDL »

Ich hab nach den Hinweisen/Diskussion folgende Lösung gefunden.

Dazu hab ich den Code von "PureLust" benutzt um nur eine Programminstanz zu erlauben, egal wie viele PB IDE's geöffnet sind.
Und in der WinAPI Library habe ich den Code unter "Prozesse/Alle offene Anwendungen anzeigen" gefunden und angepasst.
Somit wird das Programm beendet wenn alle IDE's geschlossen sind.

Somit benötige ich nur ein Werkzeugeintrag beim IDE-Start.

Bei mir hat das Programm in Ruhe 0,07% CPU-Zeit und in Aktion, je nach Mausaktivitäten, kurzzeitig bis zu 2,9% (1,3% im Durchschnitt). Und das ist für mich akzeptabel.

Code: Alles auswählen

Global g_hMutexAppRunning
Global xx.b = 0

;<comment>
; <summary> AppInstanceExists() : Ermittelt ob ein Programm schon gestartet ist<br>; Autor:  PureLust </summary>
; http://www.purebasic.fr/german/viewtopic.php?p=260173#p260173
; <param> AppInstanceExists() </param>
; <return> () </return>
; < example> AppInstanceExist() </example>
;</comment>

Procedure AppInstanceExists()
  Protected bAppRunning = #False
  g_hMutexAppRunning = CreateMutex_( #Null, #Null, "Global\MyApplication1")
  If (g_hMutexAppRunning <> #Null) And (GetLastError_() = #ERROR_ALREADY_EXISTS)
    CloseHandle_( g_hMutexAppRunning )
    g_hMutexAppRunning = #Null
  EndIf
  If g_hMutexAppRunning
    ProcedureReturn #False
  Else
    ProcedureReturn #True
  EndIf
EndProcedure
 
;********************************************************************
; der erste Aufruf vor alle anderen Programmschritte
;
If AppInstanceExists()
    MessageRequester("", "Die Anwendung läuft bereits."+Chr(13)+"Die zweite Instanz wird beendet.",#MB_ICONERROR)
    CloseHandle_(g_hMutexAppRunning)
    End
EndIf

;********************************************************************

;<comment>
; <summary> ListWindows(hwnd,Param) : Alle offene Anwendungen anzeigen (WinAPI Library) </summary>
; <return> #True/#False </return>
; < example> EnumChildWindows_(FindWindow_("ToolbarWindow32",#Null),@ListWindows(),0) </example>
;</comment>

; And GetWindowLongPtr_(hwnd,#GWL_STYLE) & #WS_VISIBLE kann weggelassen werden; erfasst dann alle

Procedure ListWindows(hwnd,Param)

  If GetWindowLongPtr_(hwnd,#GWL_EXSTYLE) ! #WS_EX_TOOLWINDOW And GetWindowLongPtr_(hwnd,#GWL_STYLE) & #WS_VISIBLE
   String$ = Space(250)
   GetWindowText_(hwnd,String$,250)
   If Not String$=""
       
       If FindString(String$,"PureBasic",1,#PB_String_NoCase)
        xx+1   
       EndIf

   EndIf
  EndIf
  ProcedureReturn #True
EndProcedure


;********************************************************************
; in der Ereignisschleife

Repeat
.......
       xx = 0
       EnumChildWindows_(FindWindow_("ToolbarWindow32",#Null),@ListWindows(),0)
       If xx = 0
           quitForm1 = 1
       EndIf
        
Until quitForm1
Tips und Hinweise willkommen
Zu meiner Schulzeit war die Bildung kostenlos, für einige aber Umsonst.
Antworten