Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente bannato
    Registrato dal
    Feb 2000
    Messaggi
    2,006

    [VB6] Shutdown win 2000

    apro una nuova discussione perchè in quelle che ho trovato c'è una confusione incredibile. in particolare non c'è risposta alla domanda "perchè mi compare la schermata ORA SI PUO' SPEGNERE IL COMPUTER"??

    io ho provato questo codice

    codice:
    Option Explicit
    
    Private Type LUID
        UsedPart As Long
        IgnoredForNowHigh32BitPart As Long
    End Type
    
    Private Type TOKEN_PRIVILEGES
        PrivilegeCount As Long
        TheLuid As LUID
        Attributes As Long
    End Type
    
    Private Const EWX_SHUTDOWN As Long = 1
    Private Const EWX_FORCE As Long = 4
    Private Const EWX_REBOOT As Long = 2
    Private Const EWX_POWEROFF As Long = 8
    
    Private Declare Function ExitWindowsEx Lib "User32.dll" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
    
    Private Declare Function GetCurrentProcess Lib "Kernel32.dll" () As Long
    
    'Dichiarazioni per acquisire i diritti necessari all'arresto/riavvio della macchina.
    Private Declare Function OpenProcessToken Lib "Advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
    Private Declare Function LookupPrivilegeValue Lib "Advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
    Private Declare Function AdjustTokenPrivileges Lib "Advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
    Private Sub AdjustToken()
        Const TOKEN_ADJUST_PRIVILEGES = &H20
        Const TOKEN_QUERY = &H8
        Const SE_PRIVILEGE_ENABLED = &H2
        Dim hdlProcessHandle As Long, hdlTokenHandle As Long
        Dim tmpLuid As LUID
        Dim tkp As TOKEN_PRIVILEGES, tkpNewButIgnored As TOKEN_PRIVILEGES
        Dim lBufferNeeded As Long
    
        hdlProcessHandle = GetCurrentProcess()
        OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle
    
        'Get the LUID for shutdown privilege.
        LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
    
        With tkp
            tkp.PrivilegeCount = 1    ' One privilege to set
            tkp.TheLuid = tmpLuid
            tkp.Attributes = SE_PRIVILEGE_ENABLED
        End With
    
        'Enable the shutdown privilege in the access token of this process.
        AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
    
    End Sub
    Private Sub Command1_Click()
        'Acquisisce i diritti.
        AdjustToken
        'Arresta il sistema.
        ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_POWEROFF), &HFFFF
    End Sub
    il pc si spegna ma mi compare la schermata "ora si può spegnere il computer"

    come lo evito??

    gracias

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Partiamo da una informazione ...

    Quando fai lo shutdown normalmente (non da programma) il PC si spegne?

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Quanto casino!
    Usa questo semplicissimo codice

    codice:
    Public Const EWX_LOGOFF = 0 
    Public Const EWX_SHUTDOWN = 1 
    Public Const EWX_REBOOT = 2 
    Public Const EWX_FORCE = 4                 
    
    Declare Function ExitWindowsEx Lib "user32" Alias _
    "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved _
    As Long) As Long                 
    
    t& = ExitWindowsEx(EWX_FORCE OR EWX_SHUTDOWN, 0)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il "casino" in programmazione, qualche volta, ha una motivazione ...

    Non so se hai provato il codice che proponi, ma quello puo' andare bene su sistemi Win9X, non con XP o 2000.

    Se c'e' scritto nel codice

    'Dichiarazioni per acquisire i diritti necessari all'arresto/riavvio della macchina.

    vuol dire che qualche motivo ci sara' ... non credi?

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Originariamente inviato da oregon
    Non so se hai provato il codice che proponi, ma quello puo' andare bene su sistemi Win9X, non con XP o 2000.
    Per niente vero. Su Windows XP funziona bene e senza "Ora si può spegnere il sistema operativo"

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Strano XP hai ... su XP questo codice non funziona e *non puo' funzionare* ....

    Hai fatto la prova o lo pensi solamente?

    Leggi

    http://support.microsoft.com/default...b;en-us;176695

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da XWolverineX
    Per niente vero. Su Windows XP funziona bene e senza "Ora si può spegnere il sistema operativo"
    Allora avrai una macchina speciale, in quanto sul mio PC è necessario ottenere un token specifico. :rollo:

    In secondo luogo, in merito al problema specifico, credo che la visualizzazione del messaggio al posto dello spegnimento vero e proprio sia essenzialmente dovuto ad un'impostazione errata di Windows; quando il supporto ACPI è abilitato, se non ricordo male, si ottiene lo spegnimento al posto della classica schermata che segnala la possibilità di spegnere il PC in sicurezza.

    Non è, insomma, un problema specifico delle funzioni di Shutdown richiamate dall'applicativo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non è, insomma, un problema specifico delle funzioni di Shutdown richiamate dall'applicativo.
    Quoto ... avevo lo stesso sospetto e per questo ho chiesto lumi sul comportamento in seguito a uno shutdown "normale" ...

  9. #9
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Vi giuro che sul mio ha funzionato!

    Vorrei anche farvi un video ma come faccio??

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Parli di XP SP2? VB6 SP6?

    Se e' cosi' ... e' veramente strano ... sei un "caso particolare" ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.