Seite 1 von 1

GetHTTPHeader /-> freeze für weinige sek.

Verfasst: 06.10.2012 08:54
von Pr0fessor
huhu...

Ich habe mir nen kleines hilfsprogrämmchen gebastelt dass mir das ewige drücken des Knopfes meines NAS erspart - funktioniert auch soweit ganz gut aber immer wenn ich nen Button drücke dann friert die Anwendung für ein paar sekunden ein und es ist kein bewegen o.ä. des fensters möglich. Warum? bzw. was kann man machen um dem entgegenzuwirken?
(ist auch noch nicht ganz fertig, deshalb haben herunterfahren und neustarten beinahe die gleiche funktion)


Code: Alles auswählen

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_1
  #Button_3
  #Button_2
  #Status
  #Text_1
EndEnumeration

;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Tahoma", 11)

If InitNetwork()
  If OpenWindow(#Window_0, 634, 420, 312, 153, "NAS Shutdown",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ButtonGadget(#Button_1, 10, 110, 90, 30, "Ausschalten")
    ButtonGadget(#Button_3, 210, 110, 90, 30, "Abbrechen")
    ButtonGadget(#Button_2, 110, 110, 90, 30, "Neustarten")
    TextGadget(#Status, 10, 60, 290, 20, "")
    TextGadget(#Text_1, 10, 10, 290, 20, "CH3WNAS herunterfahren oder neustarten?", #PB_Text_Center)
    SetGadgetFont(#Text_1, FontID1)
  EndIf
EndIf


Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget
      If EventGadget() = #Button_1
        SetGadgetText(#Status, "Einloggen...")
        If GetHTTPHeader("http://ch3wnas/goform/formLogin?f_LOGIN_NAME=admin&f_LOGIN_PASSWD=&f_login_type=0")
          SetGadgetText(#Status, "Eingeloggt")
          If GetHTTPHeader("http://ch3wnas/goform/sysShootDown")
            SetGadgetText(#Status, "Ausgeschaltet")
          Else
            SetGadgetText(#Status, "Ausschalten fehlgeschlagen")
          EndIf
        Else
          SetGadgetText(#Status, "Einloggen fehlgeschlagen")
        EndIf
      EndIf
      If EventGadget() = #Button_2
        SetGadgetText(#Status, "Einloggen...")
        If GetHTTPHeader("http://ch3wnas/goform/formLogin?f_LOGIN_NAME=admin&f_LOGIN_PASSWD=&f_login_type=0")
          SetGadgetText(#Status, "Eingeloggt")
           If GetHTTPHeader("http://ch3wnas/goform/sysShootDown")
            SetGadgetText(#Status, "Ausgeschaltet")
          Else
            SetGadgetText(#Status, "Ausschalten fehlgeschlagen")
          EndIf
        Else
          SetGadgetText(#Status, "Einloggen fehlgeschlagen")
        EndIf
      EndIf
      If EventGadget() = #Button_3
        End
      EndIf
  EndSelect
ForEver

Re: GetHTTPHeader /-> freeze für weinige sek.

Verfasst: 06.10.2012 09:15
von ts-soft
Pr0fessor hat geschrieben:aber immer wenn ich nen Button drücke dann friert die Anwendung für ein paar sekunden ein und es ist kein bewegen o.ä. des fensters möglich. Warum?
Die Funktion GetHTTPHeader braucht nun mal ca. 1 - 3 sekunden, solange können keine Ereignisse abgearbeitet
werden. Außer Fenster oder Buttons zu deaktivieren, während dieser Zeit wirste nicht viel machen können.

Re: GetHTTPHeader /-> freeze für weinige sek.

Verfasst: 06.10.2012 11:41
von Pr0fessor
hmm - was kann man denn anstatt GetHTTPHeader nehmen?
es soll ja praktisch nur ne url angesurft werden....

Re: GetHTTPHeader /-> freeze für weinige sek.

Verfasst: 06.10.2012 12:59
von Bisonte
was brauchst du denn von der seite ?

Also welche daten vom Header ?

Re: GetHTTPHeader /-> freeze für weinige sek.

Verfasst: 06.10.2012 15:05
von Pr0fessor
Ich brauch keinerlei daten. Es geht nur darum die Seite kurz aufzurufen damit das NAS sich ausschaltet.

Re: GetHTTPHeader /-> freeze für weinige sek.

Verfasst: 06.10.2012 15:22
von HeX0R
Dann nimm doch ein Webgadget (kannst es ja auch unsichtbar machen).
Via Timer überprüfst du ob das Gadget noch lädt (#PB_Web_Busy).

Re: GetHTTPHeader /-> freeze für weinige sek.

Verfasst: 06.10.2012 17:16
von Kiffi
eigentlich braucht man für solch eine Art Tools keine GUI.

Ein paar Zeilen, die entsprechend auf einen Kommandozeilenparameter reagieren, zwei Verknüpfungen ('deine.exe on' und 'deine.exe off') anlegen. Und fertig :-)

Code: Alles auswählen

InitNetwork()
Select LCase(ProgramParameter())
  Case "on"
    ; einschalten
    GetHTTPHeader("...
  Case "off"
    ; ausschalten
    GetHTTPHeader("...
EndSelect
Grüße ... Kiffi

Re: GetHTTPHeader /-> freeze für weinige sek.

Verfasst: 06.10.2012 20:27
von Macros
Du könntest GetHTTPHeader auch in einem Thread aufrufen,
also einfach in eine Prozedur verpacken und Create Thread verwenden.