Jag försöker få en dator att stänga av via skärmsläckare. Använd ExitWindowsEx. Om du använder NT-system måste din applikation ha avstängningsprevilegium. har för mig att jag har kört ExitWindowsEx men hur ser man att sitt program har rättigheter att stänga av. Kanske köra den som tjänst? Du behöver inte göra en tjänst. Ha bara en timer som räknar ner, och parallellt en rutin som kontrollerar eventuella indata (användarinmatade), och stäng sedan av datorn om inga sådana data matats in. Som standard har en applikation inte avstängnings- eller omstartsrättigheter i NT-system, utan du måste sätta dessa previlegium själv. Jag har hittat ett script som ställer in i API previlegier men samma problem. Om du skall stänga av om skärmsläckaren aktiveras UTAN att någon loggat in så måste du ha en tjänst, eftersom inga vanliga exekverbara filer körs för användaren loggar in. > händer det inget mer en att skärmsläckaren räknar ner till 0. Hmm, om du använder NT-system så har du ju tillgång till "shutdown.exe" i windows. Använd den i sådana fall. Skapa en schemalagd aktivitet till shutdown.exe som finns i system32-mappen. Schemat ändrar du till "Vid inaktivitet". Det borde lösa ditt problem.Varken shutdown eller API fungerar för att stänga av datorn
Det går bra när en person är inloggad men när det är dags och ingen är inloggad och inloggnings rutan syns så händer det inget.
Skärmsläckaren kommer fram men inget händer när det är dagsSv: Varken shutdown eller API fungerar för att stänga av datorn
Sv:Varken shutdown eller API fungerar för att stänga av datorn
Det är ju samma program som stänger av perfekt när någon är inloggadSv: Varken shutdown eller API fungerar för att stänga av datorn
Är ju inget grafisk utan den då läser av musen och tagentbordet och har inget hänt efter 30 min så stängs det ner men vet inte om ens det fungerar.
Är ju ingen ide att försöka om risken finns att det inte går?Sv: Varken shutdown eller API fungerar för att stänga av datorn
Nedan följer en fingervisning hur du fixar detta på ett NT-system (som en rutin förslagsvis):
Dim hProc As Long
Dim hToken As Long
Dim mLUID As LUID
Dim mPriv As TOKEN_PRIVILEGES
Dim mNewPriv As TOKEN_PRIVILEGES
hProc = GetCurrentProcess()
OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID
mPriv.PrivilegeCount = 1
mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
mPriv.Privileges(0).pLuid = mLUID
AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
När du sen ska stänga av så ANVÄNDER DU ExitWindowsEx Flaggor, 0
Där Flaggor förslagsvis är t.ex. EXW_REBOOT + EXW_FORCE, eller EXW_SHUTDOWN för att stänga av.
För att testa om användaren har ett NT-system kan du t.ex. ha en funktion:
Public Function IsWinNT() As Boolean
Dim myOS As OSVERSIONINFO
myOS.dwOSVersionInfoSize = Len(myOS)
GetVersionEx myOS
IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function
Om du behöver hjälp med deklarationer till funktionerna eller något annat så får du fråga.Sv:Varken shutdown eller API fungerar för att stänga av datorn
Alltså när någon är inloggad och skärmsläckaren kommer fram så stängs datorn av när det är dags.
Men när skärmsläckaren kommer fram vid inloggningsrutan till domänet där man skriver in användarnamn och lösenord så händer det inget mer en att skärmsläckaren räknar ner till 0.
Har fått info att det ska gå med Policy så jag ska läsa om det nu.Sv:Varken shutdown eller API fungerar för att stänga av datorn
Sv: Varken shutdown eller API fungerar för att stänga av datorn
Användaren som kör skärmsläckaren har säkert inte rättigheter att stänga datorn. Du får köra någon form av impersonation till en användare med högre behörighet innan du stänger av burken.Sv: Varken shutdown eller API fungerar för att stänga av datorn
Sv: Varken shutdown eller API fungerar för att stänga av datorn
Thomas