Seite 1 von 1

Programmabsturz

Verfasst: 11.11.2004 16:10
von KeyKon
Ich habe ein Problem mit einem kleinen Programm:
Wenn man das Hauptprogramm per Hand startet läuft es wunderbar, doch wenn ich die Exe mit einem PB-Programm starte bleibt das Programm einfach hängen!
Warum?

Hauptprogramm:

Code: Alles auswählen

Procedure SetWallpaper(FileName.s) 
  SystemParametersInfo_(#SPI_SETDESKWALLPAPER, 0, FileName, #SPIF_UPDATEINIFILE | #SPIF_SENDWININICHANGE) 
EndProcedure 
If InitSprite()
  Delay(1000)
  NewList names.s()
  AddElement(names())
  names() = "C:\Eigene Dateien\Bild1024x768.bmp"
  SelectElement(names(),Random(0))
  date.s = FormatDate("%dd.%mm.%yyyy",Date())
  day = DayOfWeek(Date())
  If Day = 0
    day$ = "So"
  ElseIf Day = 1
    day$ = "Mo"
  ElseIf Day = 2
    day$ = "Di"  
  ElseIf Day = 3
    day$ = "Mi"
  ElseIf Day = 4
    day$ = "Do"  
  ElseIf Day = 5
    day$ = "Fr"  
  ElseIf Day = 6
    day$ = "Sa"
  EndIf    
  OpenScreen(1024,768,32,"DateTop")
  If LoadImage(0,names())
    StartDrawing(ImageOutput())
    LoadFont(0,"Westminster",32)
    DrawingFont(UseFont(0))
    DrawingMode(1)
    FrontColor(0,255,0)
    Locate(5,5)
    DrawText(day$+"-"+date)
    Locate(1024-TextLength(day$+"-"+date)-5,5)
    DrawText(day$+"-"+date)  
    Locate(5,700)
    DrawText(day$+"-"+date)
    Locate(1024-TextLength(day$+"-"+date)-5,700)
    DrawText(day$+"-"+date)
    StopDrawing()
    ResizeImage(0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
    name.s = Mid(names(),1,Len(names())-12)+Str(GetSystemMetrics_(#SM_CXSCREEN))+"x"+Str(GetSystemMetrics_(#SM_CYSCREEN))+"New.bmp"
    SaveImage(0,name)
    SetWallpaper(name)
  Else
    MessageRequester("Error","DateTop")
  EndIf
  CloseScreen()
EndIf
Das PB-StartProgramm:

Code: Alles auswählen

date.s = FormatDate("%dd",Date())
If RunProgram("C:\Eigene Dateien\DateTop.exe") = 0
  MessageRequester("Error(1)","Konnte DateTop nicht starten!",#MB_ICONERROR)
  End
EndIf
Delay(100000)
Repeat
  Delay(60000)
  If date <> FormatDate("%dd",Date())
    If RunProgram("C:\Eigene Dateien\DateTop.exe") = 0
      MessageRequester("Error(2)","Konnte DateTop nicht starten!",#MB_ICONERROR)
      End
    EndIf
    date.s = FormatDate("%dd",Date())
    Delay(3600000*24-60000)
  EndIf
ForEver
KeyKon

Re: Programmabsturz

Verfasst: 11.11.2004 16:28
von Kiffi
> doch wenn ich die Exe mit einem PB-Programm starte bleibt das
> Programm einfach hängen!

bleibt Dein Hauptprogramm hängen oder Dein Startprogramm?

Code: Alles auswählen

 If RunProgram("C:\Eigene Dateien\DateTop.exe") = 0
diese Zeile wird also definitiv ausgeführt?

Grüße ... Kiffi

Verfasst: 13.11.2004 13:30
von KeyKon
Ja RunProgram wird ausgeführt und es bleibt das Hauptprogramm hängen,
Ich hab jetzt allerdings rausgefunden ,dass das Hauptprogramm auch alleine abstürzt allerdings nur selten (bis jetzt 1 mal), wenn man mit dem StartProgramm startet stürzt es immer ab.

KeyKon

Verfasst: 13.11.2004 16:00
von Deeem2031
Wieso öffnest du überhaupt einen screen wenn du ihn garnicht brauchst? :?

Verfasst: 13.11.2004 16:11
von Danilo
Was soll das denn mal werden, KeyKon?

Das InitSprite, OpenScreen, CloseScreen und SelectElement(names(),Random(0))
kannst Du rausnehmen, da daß keinen Sinn macht.
OpenScreen() könnte man auch mal testen, da ein CloseScreen
nicht unbedingt Sinn macht, ohne Screen.

Das Bild vergrößern kannst Du auch ohne die obigen Befehle.

If StartDrawing() und If LoadFont() könntest Du auch prüfen,
genauso ob das Bild gespeichert werden konnte.

Irgendwie seltsamer Code, aber sonst sieht es korrekt aus... ;)

Verfasst: 13.11.2004 18:32
von KeyKon
Was soll das denn mal werden, KeyKon?
Ein Programm das jeden Tag ein anderes Hintergrundbild auswählt, auf die Richtige größe bringt und Tag+Datum Draufpinselt
Das InitSprite, OpenScreen, CloseScreen und SelectElement(names(),Random(0))
kannst Du rausnehmen, da daß keinen Sinn macht.
Der Code ist gekürzt und er wählt normalerweise mit SelectElement() ein Bild zufällig aus. Aber ich brauche den Screen doch um 2D-Drawing Operationen auszuführen, oder?
OpenScreen() könnte man auch mal testen, da ein CloseScreen
nicht unbedingt Sinn macht, ohne Screen. If StartDrawing() und If LoadFont() könntest Du auch prüfen,
genauso ob das Bild gespeichert werden konnte.
Hab ich jetzt so gemacht, aber der Code stürzt trotzdem ab (jetzt immer :cry: )

KeyKon

Verfasst: 13.11.2004 18:49
von DarkDragon
KeyKon hat geschrieben:Der Code ist gekürzt und er wählt normalerweise mit SelectElement() ein Bild zufällig aus. Aber ich brauche den Screen doch um 2D-Drawing Operationen auszuführen, oder?
Nur bei ScreenOutput() und SpriteOutput(). Bei Image und Windowoutput nicht.