WinAPI Library (Offline)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Eine kleine Lösung habe ich. Man kann das Programm ja per Batch starten und diesen Batch löschen. Ein kleines Problem besteht noch.
Wenn man es mit IDE startet, wird der Batch beendet, was auch so sein soll. Leider wird dieser aber nicht beendet, wenn man die IDE nicht vorher startet.

Vielleicht hat noch jemand eine Lösung um den Batch zu beenden, nachdem der Source ausgeführt wurde. 8)

Diese als Exe compilieren und dann aus dem WinAPILibraryverzeichnis starten.

Code: Alles auswählen

EnableExplicit

Define EventID,start
Define Quit
Define dir.s 
dir=Space(255)
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(1,10,10,120,20,"PureBasic Source",0)
  GetCurrentDirectory_(255,dir)
 
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
       CreateFile(0,"Start.bat")
       WriteStringN(0,"@echo off")
       WriteStringN(0,Chr(34)+dir+"\Codes\Arbeitsspeicher\Freier Arbeitsspeicher ermitteln.pb"+Chr(34))
       WriteStringN(0,"exit"); geht leider nicht,
              WriteStringN(0,"echo on")
       CloseFile(0)
       RunProgram("start.bat","","",0)
       Delay(500); Zeit lassen bevor gelöscht werden kann!!
       DeleteFile("start.bat")
      
    EndSelect
EndIf
If EventID=#PB_Event_CloseWindow
  Quit=1
EndIf
Until Quit=1
EndIf
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Sirhc.ITI hat geschrieben:Genau das hab ich vor ein paar Wochen hier auch gepostet:

http://www.purebasic.fr/german/viewtopi ... 406#233406

Bei mir stürzt das ganze unter Vista ab, hab es unter XP in einer VM probiert da scheint es zu gehen. :freak:

mfg Sirhc.ITI
Nachdem du das hier geschrieben hast, habe ich probiert, dem Runprogramm etwas Zeit zu geben. Denn im VirtuellPC wird alles viel,
viel langsamer ausgefürhrt. Darum geht es auch mit dem Source. Also das Delay(2000) scheint wohl das Problem zu beheben.

Bitte folgendes Programm compiliert im API-Verzeichnis testen. Bei mir geht es.

Code: Alles auswählen

EnableExplicit

Define EventID,start
Define Quit
Define dir.s 
dir=Space(255)
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(1,10,10,120,20,"PureBasic Source",0)
  GetCurrentDirectory_(255,dir)
 
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
      RunProgram(Chr(34)+dir+"\Codes\Arbeitsspeicher\Freier Arbeitsspeicher ermitteln.pb"+Chr(34),"","",0)
      Delay(2000); Zeit lassen damit die IDE vollständig mit Source geladen wurde!!
  EndSelect
EndIf
If EventID=#PB_Event_CloseWindow
  Quit=1
EndIf
Until Quit=1
EndIf
Gruß und gute Nacht
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Little John

Beitrag von Little John »

Falko hat geschrieben:Vielleicht hat noch jemand eine Lösung um den Batch zu beenden, nachdem der Source ausgeführt wurde. 8)
Jo. 8) Den Befehl in der Batch-Datei mit start beginnen.
Den Unterschied kann man gut sehen, wenn man einmal das testet:

Code: Alles auswählen

@echo off
calc
write
und dann das:

Code: Alles auswählen

@echo off
start calc
start write
Auf echo on kann man verzichten, also würde der Code dann so aussehen:

Code: Alles auswählen

Case 1
   CreateFile(0,"Start.bat")
   WriteStringN(0,"@echo off")
   WriteStringN(0,"start " + Chr(34)+dir+"\Codes\Arbeitsspeicher\Freier Arbeitsspeicher ermitteln.pb"+Chr(34))
   CloseFile(0)
   RunProgram("start.bat","","",0)
   Delay(500)           ; Zeit lassen bevor gelöscht werden kann!!
   DeleteFile("start.bat")
Gruß, Little John
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Falko & @Little John
Man kann doch auch direkt mit Hilfe des cmd.exe-Programms Befehle ausführen.
Also einfach so: cmd.exe /c start "" "...code.pb"

Dann erspare ich mir das Erstellen der Datei.

PS: Es funzt!

Update kommt gleich/später. \\Edit: Oder auch nicht.

\\Edit:
Komisch, wenn ich normal RunProgram() die Konsole ausführe, dann funktioniert es ohne Probleme.
Aber wenn ich #PB_Program_Hide verwende, so dass die Konsole nicht sichtbar ist, dann stürzt mein Programm plötzlich wieder ab! :evil:

Was für ein Problem hat PureBasic denn? :freak:

@All
Kann einer von euch im engl. Forum einen Thread über diesen ekligen Bug posten? Danke!


\\Edit2:
Wenn ich mein Programm vorher minimiere ( SetWindowState(0,#PB_Window_Minimize) ), dann stürzt mein Programm nicht ab, aber wieso?
Ich versteh das irgendwie nicht...
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Probier mal diesen Source nachdem es compiliert wurde.

Mit Errorausgabe im Messagerequester, welcher keinen Fehler zeigt, funktioniert es anscheinend. Nur muss man diesen dann immer bestätigen.

Lässt man den Massagerequester weg, stürzt das Programm wieder ab.

Code: Alles auswählen

EnableExplicit

Define EventID,start
Define Quit
Define dir.s , Ergebnis.s
dir=Space(255)
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(1,10,10,120,20,"PureBasic Source",0)
  GetCurrentDirectory_(255,dir)
 
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
      start=RunProgram(Chr(34)+dir+"\Codes\Arbeitsspeicher\Freier Arbeitsspeicher ermitteln.pb"+Chr(34),"","",#PB_Program_Open) ;Mit |#PB_Program_Error stürtzt es ab
      Ergebnis=ReadProgramError(start)
      MessageRequester("Ausgabe","Source geladen:"+Ergebnis); 
      CloseProgram(start)   
  EndSelect
EndIf
If EventID=#PB_Event_CloseWindow
  Quit=1
EndIf
Until Quit=1
EndIf
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Falko
OKay hab ich.

Hm...komische Sache, mit Msg geht es, aber ohne nicht....
Ich möchte mal gerne wissen, wieso das so ist...
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

zur MSG habe ich im Netz noch einige Tips gefunden, die aber in PB leider nicht das machen, was sie sollten. Vielleicht hast du dazu noch selbst eine IDEE zur API.

Es sollte eigentlich die MSG gefunden und geschlossen werden.
Zwar gab es noch andere Messages, aber damit sürtzt das PB wiederum ab. Hiermit wird aber leider alles beendet :roll: , sodass
nur noch der Source im Editor stehen bleibt.

Code: Alles auswählen

EnableExplicit

Define EventID,start,hMSB
Define Quit
Define dir.s , Ergebnis.s

dir=Space(255)
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(1,10,10,120,20,"PureBasic Source",0)
  GetCurrentDirectory_(255,dir)
 
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
       start=RunProgram(Chr(34)+dir+"\Codes\Arbeitsspeicher\Freier Arbeitsspeicher ermitteln.pb"+Chr(34),"","",#PB_Program_Open) ;Mit |#PB_Program_Error stürtzt es ab
       Ergebnis=ReadProgramError(start)
       MessageBox_(1,"Source geladen","Ausgabe",#MB_OK)
       hMSB =FindWindow_(1,"Ausgabe")
       PostMessage_(hMSB,#WM_CLOSE,0,0); Leider wird damit das ganze aufrufende Programm beendet. 
       CloseProgram(start) 
   EndSelect
EndIf
If EventID=#PB_Event_CloseWindow
  Quit=1
EndIf
Until Quit=1
EndIf
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

EnableExplicit

Define EventID
Define Quit

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(1,10,10,100,20,"PureBasic",0)

  Repeat
    EventID=WaitWindowEvent()
    If EventID=#PB_Event_Gadget
      Select EventGadget()
        Case 1
          WinExec_(#PB_Compiler_Home + "PureBasic.exe C:\...\Code.pb", #SW_SHOWNORMAL)
      EndSelect
    EndIf
    If EventID=#PB_Event_CloseWindow
      Quit=1
    EndIf
  Until Quit=1
EndIf
Pfad anpassen und testen, bei mir funktioniert es
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@ts-soft
Danke schön Thomas, es funktioniert ohne Probleme, kein Absturz, nix.
Endlich ist das nervige Problem weg :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

RSBasic hat geschrieben:@ts-soft
Danke schön Thomas, es funktioniert ohne Probleme, kein Absturz, nix.
Endlich ist das nervige Problem weg :allright:
Hatte wenig Zeit, ansonsten hat das finden eines Workarounds nur wenige
Minuten gebraucht :mrgreen:
Aber als sich hier die Postings gemehrt haben, hab ich mir die Zeit mal genommen.

PS: Bauste noch das ScintillaGadget: ScintillaGadgetPB mit ein, sieht dann schöner aus :wink:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten