Win32API

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> ich habe das jetzt so gemacht nur es passiert leider nichts :(

wird die Prozedur LogOffControl() denn überhaupt angesprungen?

diese drei Zeilen habe ich geändert und bei mir springt er in die Proc:

Code: Alles auswählen

  If HH$=>GetGadgetText(#String_0)
    If MM$=>GetGadgetText(#String_1)     
      If SS$=>GetGadgetText(#String_2)  
Grüße ... Kiffi

P.S.: Du hast ja noch immer ein [c]Gosub[/c] in Deinem Code! Pöse, Pöse! ;-)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Damit es NT-tauglich ist, änder mal LogoffControl so ab:

Code: Alles auswählen

;-Programm Start
Procedure EnableShutDown()
  Privileges.TOKEN_PRIVILEGES
  OpenProcessToken_(GetCurrentProcess_(), 40, @hToken)
  Privileges\PrivilegeCount           = 1
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
  CloseHandle_(hToken)
EndProcedure

Procedure LogOffControl(flag.l)
  EnableShutDown()
  Select flag.l
    Case 1
      ExitWindowsEx_(#EWX_LOGOFF,1)
    Case 2
      ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_POWEROFF,0)
    Case 3
      ExitWindowsEx_(#EWX_POWEROFF,0)
    Default
      ExitWindowsEx_(#EWX_REBOOT,0)
  EndSelect
EndProcedure
Danach nur noch die Fehlerhafte MainLoop reparieren :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

Super das klapt jetzt :D

Nur noch nicht mit dem Ruhezustand :(

;LogOffControl(0);Neustart
;LogOffControl(1);Benutzer LogOff
;LogOffControl(2);Runterfahren
;LogOffControl(3);Ruhezustand

Das sind die befehle wie ich sie alle getestet habe.
Nur bei " ;LogOffControl(3);Ruhezustand" fährt mein Rechner runter an stat in den Ruhezustand...
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Hier wird abgefragt ob der rechner den Ruhezustand unterstützt:

Code: Alles auswählen

If OpenLibrary(0,"powrprof.dll") And IsFunction(0,"SetSuspendState")
  erg=CallFunction(0,"IsPwrHibernateAllowed")
  If erg=0
    MessageRequester ("Ruhezustand wird NICHT unterstützt!","")
  Else
     MessageRequester ("Ruhezustand wird unterstützt!","")
  EndIf
  
  CloseLibrary(0)
EndIf 
Und hiermit wird er in den Ruhezustand versetzt:

Code: Alles auswählen

 CallFunction(0,"SetSuspendState",1,0,0)
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

unterstüzen tut es mein system...

aber in den ruhezustand fährt er nicht :(


hier mein text

Code: Alles auswählen

;-Programm Start

Open_Window_0()

If OpenLibrary(0,"powrprof.dll") And IsFunction(0,"SetSuspendState")
  erg=CallFunction(0,"IsPwrHibernateAllowed")
  If erg=0
    MessageRequester ("Ruhezustand","Ruhezustand wird NICHT unterstützt!")
  Else
     
  EndIf
 
  CloseLibrary(0)
EndIf

Procedure EnableShutDown() 
  Privileges.TOKEN_PRIVILEGES 
  OpenProcessToken_(GetCurrentProcess_(), 40, @hToken) 
  Privileges\PrivilegeCount           = 1 
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED 
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid) 
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0) 
  CloseHandle_(hToken) 
EndProcedure 

Procedure LogOffControl(flag.l) 
  EnableShutDown()
  Select flag.l 
    Case 1 
      ExitWindowsEx_(#EWX_LOGOFF,1) 
    Case 2 
      ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_POWEROFF,0) 
    Case 3 
      ExitWindowsEx_(#EWX_POWEROFF,0) 
    Default 
      ExitWindowsEx_(#EWX_REBOOT,0) 
  EndSelect 
EndProcedure 
Repeat
;System Zeit auslesen
                    Time.l = Date()
HH$ = FormatDate("%hh", Time)
MM$ = FormatDate("%ii", Time)
SS$ = FormatDate("%ss", Time)

;Abfrage für die Aktion die nach ereichen der zeit durchgeführt werden soll.
             If HH$=GetGadgetText(#String_0)
              If MM$=GetGadgetText(#String_1)      
                If SS$=GetGadgetText(#String_2)      
                  If go=1
;Die Aktion die durchgefürt wird
                    If GetGadgetState(#Combo_0)=0 
;                   MessageRequester("Überschrift","Herunterfahren",#PB_MessageRequester_Ok)
                    LogOffControl(3);Herunterfahren
                    ElseIf GetGadgetState(#Combo_0)=1 
;                   MessageRequester("Überschrift","Nerstart",#PB_MessageRequester_Ok)
                    LogOffControl(0); Neustart
                    ElseIf GetGadgetState(#Combo_0)=2 
                    MessageRequester("Überschrift","Ruhezustand",#PB_MessageRequester_Ok)
                    CallFunction(0,"SetSuspendState",1,0,0)

                      EndIf 
                   
                   ;MessageRequester("Überschrift","Ok Button",#PB_MessageRequester_Ok)
                    go.l=0
                    EndIf 
                  EndIf
                EndIf 
             EndIf 

;Einen moment Warten (1Milli Sekunde)
Delay(1)


 ; Event = WaitWindowEvent()
  Event = WindowEvent()
  Select event
  
;-Button abfrage 
  Case #PB_EventGadget ; verzweigung bei Gadgetevents
  
  
        Select EventGadgetID()
          Case (#Button_0) ;Button "OK"
          
                    go.l=1
                    
            Case (#Button_1)  ;Button "Abbrechen"
          
            Gosub Ende
            Return
            ;MessageRequester("Überschrift","Abbruch Button",#PB_MessageRequester_Ok)
            
        EndSelect



        EndSelect
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Versuchs mal so du must callfunction zwischen openlibary() und closelibary() anwenden!

Code: Alles auswählen

;-Programm Start

Open_Window_0()



Procedure EnableShutDown()
  Privileges.TOKEN_PRIVILEGES
  OpenProcessToken_(GetCurrentProcess_(), 40, @hToken)
  Privileges\PrivilegeCount           = 1
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
  CloseHandle_(hToken)
EndProcedure

Procedure LogOffControl(flag.l)
  EnableShutDown()
  Select flag.l
    Case 1
      ExitWindowsEx_(#EWX_LOGOFF,1)
    Case 2
      ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_POWEROFF,0)
    Case 3
      ExitWindowsEx_(#EWX_POWEROFF,0)
    Default
      ExitWindowsEx_(#EWX_REBOOT,0)
  EndSelect
EndProcedure
Repeat
  ;System Zeit auslesen
  Time.l = Date()
  HH$ = FormatDate("%hh", Time)
  MM$ = FormatDate("%ii", Time)
  SS$ = FormatDate("%ss", Time)
  
  ;Abfrage für die Aktion die nach ereichen der zeit durchgeführt werden soll.
  If HH$=GetGadgetText(#String_0)
    If MM$=GetGadgetText(#String_1)     
      If SS$=GetGadgetText(#String_2)     
        If go=1
          ;Die Aktion die durchgefürt wird
          If GetGadgetState(#Combo_0)=0
            ;                   MessageRequester("Überschrift","Herunterfahren",#PB_MessageRequester_Ok)
            LogOffControl(3);Herunterfahren
          ElseIf GetGadgetState(#Combo_0)=1
            ;                   MessageRequester("Überschrift","Nerstart",#PB_MessageRequester_Ok)
            LogOffControl(0); Neustart
          ElseIf GetGadgetState(#Combo_0)=2
            MessageRequester("Überschrift","Ruhezustand",#PB_MessageRequester_Ok)
            If OpenLibrary(0,"powrprof.dll") And IsFunction(0,"SetSuspendState")
              erg=CallFunction(0,"IsPwrHibernateAllowed")
              If erg=0
                MessageRequester ("Ruhezustand","Ruhezustand wird NICHT unterstützt!")
              Else
                 CallFunction(0,"SetSuspendState",1,0,0)
              EndIf
              
              CloseLibrary(0)
            EndIf
           
            
          EndIf
          
          ;MessageRequester("Überschrift","Ok Button",#PB_MessageRequester_Ok)
          go.l=0
        EndIf
      EndIf
    EndIf
  EndIf
  
  ;Einen moment Warten (1Milli Sekunde)
  Delay(1)
  
  
  ; Event = WaitWindowEvent()
  Event = WindowEvent()
  Select Event
    
    ;-Button abfrage
    Case #PB_EventGadget ; verzweigung bei Gadgetevents
      
      
      Select EventGadgetID()
        Case (#Button_0) ;Button "OK"
          
          go.l=1
          
        Case (#Button_1)  ;Button "Abbrechen"
          
          Gosub Ende
          Return
          ;MessageRequester("Überschrift","Abbruch Button",#PB_MessageRequester_Ok)
          
      EndSelect
      
      
      
  EndSelect 
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Antworten