Benzin-Preis-Anzeiger

Anwendungen, Tools, Userlibs und anderes nützliches.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Benzin-Preis-Anzeiger

Beitrag von spider84 »

Hallo!
Das Programm ist leider noch etwas unfertig, aber vlt hat sich sowas ja der ein oder andere gewünscht: Es zeigt den aktuellen Benzinpreis einer vorher ausgewählten Tankstelle im Tray an.
Ihr könnt gerne an den Ecken, die ich jetzt noch nicht implementieren konnte mithelfen.

Code: Alles auswählen

; Programm zum anzeigen des aktuellen Benzin-Preises
;----------------------------------------------------------------------------------
; Get text contents of an internet site
; Text einer Internetseite auslesen
Procedure.l GB_DownloadToMem ( url.s, *lpRam, ramsize.l ) 
  Protected agent.s, hINet.l, hData.l, bytes.l 

  
  ;  #INTERNET_OPEN_TYPE_DIRECT    = 1 
  ;  #INTERNET_DEFAULT_HTTP_PORT   = 80 
  ;  #INTERNET_SERVICE_HTTP        = 3 
  ;  #INTERNET_FLAG_NO_CACHE_WRITE = $4000000 
  ;  #INTERNET_FLAG_RELOAD         = $8000000 
  

  agent.s = "Mozilla/4.0 (compatible; ST)" 
  hINet.l = InternetOpen_ ( @agent.s,0,0,0,0 ) 
  hData.l = InternetOpenUrl_ ( hINet, @url.s, "", 0, $4000000, 0 ) 
  
  If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @bytes.l ) : Else : bytes = -1 : EndIf 
  
  InternetCloseHandle_ (hINet) 
  InternetCloseHandle_ (hFile) 
  InternetCloseHandle_ (hData) 
  ProcedureReturn bytes.l 
EndProcedure 

Procedure HideFromTaskBar(hWnd.l, Flag.l)
  Protected TBL.ITaskbarList

  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList, @TBL) = #S_OK
    TBL\HrInit()
    If Flag
      TBL\DeleteTab(hWnd)
    Else
      TBL\AddTab(hWnd)
    EndIf
    TBL\Release()
  EndIf
  CoUninitialize_()
 
  DataSection
    CLSID_TaskBarList:
    Data.l $56FDF344
    Data.w $FD6D, $11D0
    Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
    IID_ITaskBarList:
    Data.l $56FDF342
    Data.w $FD6D, $11D0
    Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
  EndDataSection
EndProcedure 

stdURL.s = "http://www.clever-tanken.de/showtank_payed.asp?Tankstelle=ARAL+Hafenstr.+19-21+Mannheim&secureid=5150&typ=Super&ort=681"

If OpenPreferences("Einstellungen.ini") = 0
  CreatePreferences("Einstellungen.ini") 
  PreferenceGroup("URL") 
    WritePreferenceString("clever-tanken-URL", stdURL.s) 
  PreferenceGroup("Suchstring") 
    WritePreferenceString("string","Super:") 
  PreferenceGroup("Offset") 
    WritePreferenceString("Offset","63") 
  ClosePreferences() 
EndIf
  PreferenceGroup("URL") 
    URL.s = ReadPreferenceString("clever-tanken-URL", stdURL.s)  
  PreferenceGroup("Suchstring") 
    Suchstring.s = ReadPreferenceString("string","Super:")
  PreferenceGroup("Offset") 
    Offset.s = ReadPreferenceString("Offset","63")
ClosePreferences() 


*MemoryID = AllocateMemory(50000)
If *MemoryID
  sitelength = GB_DownloadToMem(URL.s, *MemoryID, 50000)
  If sitelength > 0
    Debug "Die geladene Internetseite hat eine Größe von: " + Str(sitelength) + " Bytes"
    text$ = PeekS(*MemoryID)
    position=FindString(text$,Suchstring.s,1)
    ;Debug text$
    Debug "Position: "+Str(position)
    text$ = PeekS(*MemoryID + position + Val(Offset.s), 5)
    Debug text$
  Else
    Debug "Konnte angeforderte Internetseite nicht laden!"
  EndIf
Else
  Debug "Konnte den angeforderten Speicher nicht reservieren!"
EndIf
TrayWnd       = FindWindow_("Shell_TrayWnd", 0)
TrayNofifyWnd = FindWindowEx_(TrayWnd, 0, "TrayNotifyWnd", 0) ;für Win9x

GetWindowRect_(TrayNofifyWnd,win.RECT)

x=win\left : y=win\top
w=win\right-win\left : h=win\bottom-win\top

If OpenWindow(0,x-7,y+5,27,15,"blub", #PB_Window_BorderLess)
   CreateGadgetList(WindowID(0))
   ;ProgressBarGadget(1,0,0,10,h,0,100,#PB_ProgressBar_Smooth)
   TextGadget(1, 0, 0, 27, 15, text$) 
   SetWindowPos_(WindowID(0),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE)
   SetGadgetColor(1, #PB_Gadget_BackColor, $FF0000)
   If CreatePopupMenu(0)    ; hier beginnt das Erstellen des Menüs...
        MenuItem(1, "Wechseln")
        MenuItem(2, "Schließen"  +Chr(9)+"Ctrl+C")
    EndIf

EndIf
HideFromTaskBar(WindowID(0), 1)
;hier könnte routine für Transparenz stehen

;HideWindow(0, 1)
;MessageRequester("","Bla",#PB_MessageRequester_Ok)
;hier sollte ein wartebefehl her, der das programm z.B. immer um 15:00 uhr aktualisiert
closeapp=0
Repeat
  HideFromTaskBar(WindowID(0), 1)
  Select WaitWindowEvent()
  Case #WM_RBUTTONDOWN
    DisplayPopupMenu(0, WindowID(0))
  Case #PB_Event_Menu        ; ein Eintrag des Popup-Menüs wurde angeklickt
          Select EventMenu()       ; ermittle den angeklickten Menü-Eintrag...
            Case 1 : Debug "Wechsel..."
            Case 2 : closeapp=1
          EndSelect
  EndSelect
Until closeapp=1
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Der Sinn bei diesem CleverTanken.de ist mir fremd.... was nützen einem die Benzinpreise von vor 3 Tagen ? Aber die idee ist nett...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

Beitrag von Helmut »

Kann ich aber nicht auf Diesel anpassen, Offset?
Suchstring geändert, trotzdem immer Super-Benzin-Preis???
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Beitrag von spider84 »

@Helmut:
doch, das geht!
1. Executable erstellen, 2. 1x so ausführen, 3. In der jetzt erstellten Einstellungen.ini Suchstring in Diesel: und Offset auf 64 ändern.

Wenn du das Programm aus der Entwicklungsumgebung startest, speichert er möglicherweise eine Einstellungen.ini irgendwo hin und löscht sie danach nicht wieder. Wenn du dann die Werte im Programm selbst änderst, liest er sie aus der alten Datei weil es nur Default-Werte sind.
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

Beitrag von Helmut »

Hast recht, mit einmal exe erstellen war es ok.
Das Blaue ist mir noch zu blau, aber sonst doch ganz gut!!!!
Gute Nacht und vielen Dank!!
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Beitrag von spider84 »

Jo, PB hat irgendwo ein temp-verzeichnis.
An dem Blau hatte ich mich auch schon gestört, aber hübscher als grau find ich es schon. Aus mysteriösen Gründen musste ich aus der Farbtabelle aber ein Rot auswählen um Blau zu erhalten, also komplementär. Das sind auch die Gründe warum ich noch nach Möglichkeiten der Transparenz suche
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

spider84 hat geschrieben:Aus mysteriösen Gründen musste ich aus der Farbtabelle aber ein Rot auswählen um Blau zu erhalten
Aus der in der IDE enthaltenen Farbtabelle ? (Alt + P)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

spider84 hat geschrieben:Aus mysteriösen Gründen musste ich aus der Farbtabelle aber ein Rot auswählen um Blau zu erhalten, also komplementär.
das ist nicht misteriös, sondern völlig normal.

in einer Programm ist ein Farbwert in RGB ein 24bit wert,
der in der Reihenfolge 1byte Rot - 1byte Grün - 1byte Blau im speicher steht.

wenn man speicheradressen zu einem gesamtwert zusammenfasst,
dann beginnt man mit der niederwertigsten.

also wird der resultierende Farbwert 1*Rot + 256*Grün + 65536*Blau sein.

wenn man das als Hex-Wert schreibt,
dann steht Blau als höchstwertigstes an erster stelle der notation,
weil es an letzter stelle im speicher steht.
der Hex-Code liest also: BBGGRR

bei web-farben ist das umgekehrt: sie werden gemäß Regel in RRGGBB notiert.
tatsächlich ist eine Webfarbe also kein 24bit-Hex-Farbwert,
sondern die Web-Notation von drei 8bit-Hex-Farbkanal-Einzelwerten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Oliver1994
Beiträge: 321
Registriert: 15.06.2008 21:52

Beitrag von Oliver1994 »

Ide ist gut!

Am visuellen lässt sich noch arbeiten!

ist sehr klein und sehr schwer zu lesen!

außerdem wäre es einfacher wenn die einstellungen im programm vornehmbar sind!


gruß

JENS
Antworten