Seite 1 von 1

programm läuft nach autostart nicht richtig

Verfasst: 18.08.2005 18:54
von sen-me
ja das programm ins autostart eingefügt
(Microsoft\windows\currentversion\run)

und wenn ich neustarte, dan öfnets das programm, aber ich kann dan nicht in datein schreiben.
wieso nicht?

wen ich es dan schließe und amnuell nochmal aufrufe, dan gehts auf einmal

Code: Alles auswählen

Procedure Save(is.b)
 If CreateFile(0,link$+"data.dat")=0
  MessageRequester("Laufzeitfehler","Es trat ein Fehler bei der Ausführung des Programmes auf.",0)
 Else
  as.w=GetGadgetState(0)
  For x.b=0 To CountGadgetItems(0)-1
   If is=1 And as=x
    RemoveGadgetItem(0,as)
    is=0
   EndIf
   If CountGadgetItems(0)<>x
    WriteStringN(Trim(GetGadgetItemText(0,x,0)))
    WriteStringN(Trim(GetGadgetItemText(0,x,1)))
   EndIf
  Next
  CloseFile(0)
 EndIf
EndProcedure
ps.
Save() wird natürlich am bestimmten zeitpunkt aufgerufen

Verfasst: 18.08.2005 18:56
von Christi
der relative pfad wird nicht richtig gesetzt
machs so:

Code: Alles auswählen

puffer.l = AllocateMemory(1024)
GetModuleFileName_(0, puffer.l, 1023)
hier.s = GetPathPart(PeekS(puffer.l))
FreeMemory(puffer.l)

OpenFile(0, hier.s + "text.txt")

Verfasst: 18.08.2005 20:48
von vonTurnundTaxis
Besser wäre vielleicht:

Code: Alles auswählen

puffer.l = AllocateMemory(1024)
GetModuleFileName_(0, puffer.l, 1023)
hier.s = GetPathPart(PeekS(puffer.l))
FreeMemory(puffer.l)
SetCurrentDirectory_(hier)

OpenFile(0, "text.txt")

Verfasst: 18.08.2005 21:05
von Christi
ja, danke für den tip

Verfasst: 18.08.2005 21:13
von vonTurnundTaxis
Es würde noch kürzer gehen:

Code: Alles auswählen

hier.s = Space(1000) 
GetModuleFileName_(0,@hier, 999)
SetCurrentDirectory_(GetPathPart(hier))
2 (bzw. 1) Zeile(n) eingespart! ;)

Verfasst: 18.08.2005 21:18
von Christi
Wie ist das in diesem Fall mit dem Speicher den der String einnimmt ? Wird mitten in den String eine Null geschrieben und der speicherbereich belassen ? Ich vermute das. Desswegen verwende ich diese Methode ungern aber vieleicht kann mich ja jemand aufklären ?

Verfasst: 18.08.2005 21:47
von vonTurnundTaxis
Du kannst ja danach

Code: Alles auswählen

hier = ""
schreiben ;)

Verfasst: 19.08.2005 01:04
von sen-me
hab rausgefunden das es daran gar nicht liegt...

Code: Alles auswählen

Repeat
   EventID=WaitWindowEvent()
   If EventID=#PB_EventGadget
    Select EventGadgetID()
     Case 1
      File$=OpenFileRequester("Datei wählen","","Alle (*.*)|*.*",0)
      If File$
       endung$=GetExtensionPart(File$)
       name$=GetFilePart(File$)
       name$=Trim(name$)
       If name$<>""
        ReplaceString(name$,"."+endung$,"",3)
        AddElement(ExeIcons())
        ExeIcons()\Exe = File$
        ExeIcons()\Icon = ExtractIcon_(GetModuleHandle_(0), @ExeIcons()\Exe, 0)
        AddGadgetItem(0,CountGadgetItems(0),name$+Chr(10)+File$,ExeIcons()\Icon)
        Save(0)
       EndIf
      EndIf
;.....

Code: Alles auswählen

Procedure Save(is.b)
 puffer.l=AllocateMemory(1024)
 GetModuleFileName_(0,puffer,1023)
 hier.s=GetPathPart(PeekS(puffer))
 FreeMemory(puffer)
 If CreateFile(0,hier+"data.dat")=0
  MessageRequester("Laufzeitfehler","Es trat ein Fehler bei der Ausführung des Programmes auf.",0)
 Else
  MessageRequester("Link:",link$+" link: "+hier+" Select: "+Str(GetGadgetState(0))+" Count: "+Str(CountGadgetItems(0)),0)
  as.w=GetGadgetState(0)
  For x.b=0 To CountGadgetItems(0)-1
   If is=1 And as=x
    RemoveGadgetItem(0,as)
    is=0
   EndIf
   If CountGadgetItems(0)<>x
    WriteStringN(Trim(GetGadgetItemText(0,x,0)))
    WriteStringN(Trim(GetGadgetItemText(0,x,1)))
   EndIf
  Next
  CloseFile(0)
 EndIf
EndProcedure
er bint gar keine message aus(was es ja anch dem script nach dem befehl Save() tun sollte), aber das hinzufügen funktioniert...
es wäre so als würde er den Save(0) befehl ignorieren