Userabmeldung feststellen

Für allgemeine Fragen zur Programmierung mit PureBasic.
glubschi90
Beiträge: 274
Registriert: 04.09.2004 01:43
Wohnort: Würzburg

Userabmeldung feststellen

Beitrag von glubschi90 »

Hi Leute! :-)

Wie kann man feststellen, ob der user sich gerade abmeldet oder sich abgemeldet hat?

Falls welche Fragen, hier der Grund: ;-)

Mein Kumpel hat sich einen PC gekauft und möchte, dass sein Bruder nicht zu oft hingeht.
Darum möchte er wissen, wie oft er am PC ist (also wann er sich ein und ausgeloggt hat)

Das einloggen ist ja kein Problem (mach ich per Autostart) aber das Ausloggen halt... :roll: :)

Schonmal im Vorraus: Danke! :D
PureBasic 4.30
Benutzeravatar
diGGa
Beiträge: 249
Registriert: 01.04.2005 11:00
Kontaktdaten:

Beitrag von diGGa »

kann man nich einfach ne datei schreiben die alle zb 5min oder so in eine txt datei schreibt und beim nächsten start wird einfach die differenz ausgerechnet und das ganze beginnt von vorn?

gibt bestimmt ne bessere lösung, wäre aber mein ansatz
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Naja dein Prog läuft die ganze Zeit im hintergrund. -> Programmende -> Zeit wird in eine TXT geschrieben. :D
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

öh... also willst du wissen, wie lange er am PC war, nicht wie oft?

...sorry, dein erstes post hat mich etwas verwirrt...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag von Pelagio »

:mrgreen:
@glubschi90
ich habe schon vor einiger Zeit mir ein Programm geschrieben das die Zeit erfasst die ich am Rechner verbringe. Das Programm wird mit "Dateiname.exe Start" im Autostart Ordner positioniert und legt sich in die Tray. beim DoppelKlick erscheint eine Tabelle mit den Ein- und Ausgängen.

Code: Alles auswählen

; PCRun
;~~~~~~~

;- Konstanten
Enumeration ;Fenster
#Window_0
EndEnumeration

Enumeration ;Gadget
#LISTGRID
#SYSTRAY
#IMAGEVIEW
EndEnumeration

#False        = 0
#True         = 1
#Real         = -1
#BASEFILENAME = "PCRun"
#SEPERATOR    = ";"
#DATAEXT      = ".dat"

;- Variablen
NewList DS.s()
Global baseQuit.b

;- Daten
DataSection
SetupData:
Data.s "User", "Datum", "Zeit", "Art"
EndDataSection

;- Source
                        
Declare DataWrite(Value.s)
Declare.l WindowCallBack(WindowID, Message, wParam, lParam)
Declare.l TrayCallBack(WindowID, Message, wParam, lParam)
Declare Main(Value.b)
Declare DataRead()
Declare Open_Window_Base(Value.b)
                                 

Procedure Main(Value.b)
   Protected baseEvent.l
   baseQuit = #False

   Open_Window_Base(Value)
   If (Value = #True)
      DataWrite("ON")
      SetWindowCallback(@TrayCallBack())
   Else
      SetWindowCallback(@WindowCallBack())
      ;PureCOLOR_SetGadgetColorEx(#LISTGRID, $000000, $FFFFFF, $FFFF80, #PureCOLOR_LV_AlternateColors)
      ;If (PureLVSORT_SelectGadgetToSort(#LISTGRID, #True) = #PureLVSORT_Ok)
      ;   PureLVSORT_SetColumnType  (#LISTGRID, 0, #PureLVSORT_String)
      ;   PureLVSORT_SetColumnType  (#LISTGRID, 1, #PureLVSORT_DateDDMMYYYY)
      ;   PureLVSORT_SetColumnType  (#LISTGRID, 2, #PureLVSORT_NoSorting)
      ;   PureLVSORT_SetColumnType  (#LISTGRID, 3, #PureLVSORT_String)
      ;   PureLVSORT_SortListIconNow(#LISTGRID, 1, #Real)
      ;EndIf
   EndIf
   Repeat
      baseEvent = WaitWindowEvent()
      Select baseEvent
         Case #PB_Event_CloseWindow
            baseQuit = #True
         Case  #PB_Event_SysTray
         If (EventType() = #PB_EventType_LeftDoubleClick)
            RunProgram(#BASEFILENAME + ".exe", "", "")
         EndIf
      EndSelect
   Until(baseQuit = #True)
EndProcedure

Procedure.l TrayCallBack(WindowID, Message, wParam, lParam)
   If (Message = #WM_QUERYENDSESSION)
      DataWrite("OFF")
      baseQuit = #True
      ProcedureReturn #True
   Else
      ProcedureReturn #PB_ProcessPureBasicEvents
   EndIf
EndProcedure

Procedure.l WindowCallBack(WindowID, Message, wParam, lParam)
      ReturnValue.l = #PB_ProcessPureBasicEvents
      ;ReturnValue = PureLVSORT_CallBack(WindowID, Message, wParam, lParam, ReturnValue)
      ;ReturnValue = PureCOLOR_CallBack (WindowID, Message, wParam, lParam, ReturnValue)
      ProcedureReturn ReturnValue
EndProcedure

Procedure DataWrite(Value.s)
   Protected Text.s, User.s
   Buffer.s = Space(1024)
   bufsize.l = 1024

   GetUserName_(@Buffer, @bufsize)
   User = PeekS(Buffer,bufsize)
   Text = User + #SEPERATOR + FormatDate("%dd.%mm.%yyyy", Date()) + #SEPERATOR + FormatDate("%hh:%ii", Date()) + #SEPERATOR + Value
   If  OpenFile(0, #BASEFILENAME + #DATAEXT)
      FileSeek(Lof())
      WriteStringN(Text)
      CloseFile(0)
   EndIf
EndProcedure
                            
Procedure Open_Window_Base(Value.b)
   Protected Text.s

   If Value
      If OpenWindow(#Window_0, 0, 0, 0, 0,  #PB_Window_SystemMenu | #PB_Window_Invisible, "Computerlaufzeit")
         AddSysTrayIcon(#SYSTRAY, WindowID(), LoadImage(#IMAGEVIEW, #BASEFILENAME + ".ico"))
         SysTrayIconToolTip(#SYSTRAY, #BASEFILENAME)
         HideWindow(#Window_0, #True)
      EndIf
   Else
      If OpenWindow(#Window_0, 216, 0, 314, 300,  #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_TitleBar , "Computerlaufzeit")
         If CreateGadgetList(WindowID())
            Restore SetupData: Read Text
            ListIconGadget(#LISTGRID,  5, 5, (WindowWidth() - 10), (WindowHeight() - 10), Text, 100, #PB_ListIcon_GridLines)
            Read Text: AddGadgetColumn(#LISTGRID, 1, Text, 100)
            Read Text: AddGadgetColumn(#LISTGRID, 2, Text, 050)
            Read Text: AddGadgetColumn(#LISTGRID, 3, Text, 050)
            DataRead()
         EndIf
      EndIf
   EndIf
EndProcedure

Procedure DataRead()
   Protected Count.l, Zaehler.l, Result.s

   If  ReadFile(0,#BASEFILENAME + #DATAEXT)
      While (Eof(0) = #False)
         AddElement(DS())
         DS() =ReadString()
      Wend
      CloseFile(0)
      Count = (CountList(DS()) - 1)
      LastElement(DS())
      For Zaehler = 0 To Count
         Result = ReplaceString(DS(), #SEPERATOR, #LF$)
         AddGadgetItem(#LISTGRID, -1, Result)
         PreviousElement(DS())
      Next Zaehler
      ClearList(DS())
   Else
      MessageRequester("Infobox", "Keine Daten vorhanden.")
   EndIf
EndProcedure

If (ProgramParameter() = Trim("")): Main(#False): Else: Main(#True): EndIf

End
Ich hoffe es hilft dir bei deinen eigenen Programm.
glubschi90
Beiträge: 274
Registriert: 04.09.2004 01:43
Wohnort: Würzburg

Beitrag von glubschi90 »

Cool, dankschön! :)
(hab keine Zeit, muss ins bett ^^)
PureBasic 4.30
Antworten