Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выключить комп.

1.9K
21 января 2004 года
wishco
59 / / 20.01.2004
Нужен код как выключить ком под XP/
не перезагрузить, не выйти из windows,
а именно выключить.(XP)
2.6K
21 января 2004 года
Hearse
89 / / 19.01.2004
ExitWindowsEx(EWX_POWEROFF, EWX_FORCE)
1.9K
22 января 2004 года
wishco
59 / / 20.01.2004
Цитата:
Originally posted by Hearse
ExitWindowsEx(EWX_POWEROFF, EWX_FORCE)


На форме:

Option Explicit
Private Sub CmdExit_Click()
Dim mmm As Long
mmm = ExitWindowsEx(EWX_POWEROFF, EWX_FORCE)
End Sub

В Модуле:

Option Explicit
Public Const EWX_POWEROFF = 0
Public Const EWX_FORCE = 1

Declare Function ExitWindows Lib "user32" _
(ByVal dwReserved As Long, ByVal uReturnCode As Long) As Long

Комп не выключается. А снимаются все задачи и вылетает диалоговое окно смена пользователя.
А в левом нижнем углу кнопка выключить комп.

Шляпа. У меня XP может что либо ещё я пропустил.

2.6K
22 января 2004 года
Hearse
89 / / 19.01.2004
Сорри, не дочитал примечания, у процесса для выключения или перезагрузки компа должена быть привилегия SE_SHUTDOWN_NAME, чтобы его получить
сначала

BOOL OpenThreadToken(
HANDLE ThreadHandle, // handle to thread
DWORD DesiredAccess, // access to process
BOOL OpenAsSelf, // process or thread security
PHANDLE TokenHandle // handle to open access token
);
потом

BOOL AdjustTokenPrivileges(
HANDLE TokenHandle, // handle to token
BOOL DisableAllPrivileges, // disabling option
PTOKEN_PRIVILEGES NewState, // privilege information
DWORD BufferLength, // size of buffer
PTOKEN_PRIVILEGES PreviousState, // original state buffer
PDWORD ReturnLength // required buffer size
);

З.Ы. Посижу, поразбираюсь...
1.9K
25 января 2004 года
wishco
59 / / 20.01.2004
Цитата:
Originally posted by Hearse
Сорри, не дочитал примечания, у процесса для выключения или перезагрузки компа должена быть привилегия SE_SHUTDOWN_NAME, чтобы его получить
сначала

BOOL OpenThreadToken(
HANDLE ThreadHandle, // handle to thread
DWORD DesiredAccess, // access to process
BOOL OpenAsSelf, // process or thread security
PHANDLE TokenHandle // handle to open access token
);
потом

BOOL AdjustTokenPrivileges(
HANDLE TokenHandle, // handle to token
BOOL DisableAllPrivileges, // disabling option
PTOKEN_PRIVILEGES NewState, // privilege information
DWORD BufferLength, // size of buffer
PTOKEN_PRIVILEGES PreviousState, // original state buffer
PDWORD ReturnLength // required buffer size
);

З.Ы. Посижу, поразбираюсь...




Что за дела!!!!

Неужели ни кто не знает как выключить комп в Xp

Куда мир катиться.!?

2.6K
26 января 2004 года
Hearse
89 / / 19.01.2004
Цитата:
Originally posted by wishco

Куда мир катиться.!?



Действительно, куда мир катиться, трудно посмотреть что делать с этими функциями???

Держи код или мне его еще и VB переводить

Код:
HANDLE hProcess=NULL;
    HANDLE hToken=NULL;
    TOKEN_PRIVILEGES tkp;

    hProcess=GetCurrentProcess();
    OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);

    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
    tkp.PrivilegeCount=1;
    tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
   
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
   
    if (GetLastError() != ERROR_SUCCESS)
        MessageBox(NULL, "AdjustTokenPrivileges enable failed.", "Error", MB_OK);

   
    ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0);


З.Ы. Перевел бы, но у меня нет утилиты для поиска импортов API функций...
1.9K
27 января 2004 года
wishco
59 / / 20.01.2004
Что за беду написал!!!!! как выключить!?
2.6K
27 января 2004 года
Hearse
89 / / 19.01.2004
как выключить - выполнить этот код, что так трудно на VB перевести??? Скинь на мыло утилиту как она там, win api text... или что то такое.
258
28 января 2004 года
SergeySV
1.5K / / 19.03.2003
Перевожу:
Код:
'In a module
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const ANYSIZE_ARRAY = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type
Type LUID
    LowPart As Long
    HighPart As Long
End Type
Type LUID_AND_ATTRIBUTES
    pLuid As LUID
    Attributes As Long
End Type
Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (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 Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
'Detect if the program is running under Windows NT
Public Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function

'set the shut down privilege for the current application
Private Sub EnableShutDown()
    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
    ' enable shutdown privilege for the current application
    AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
End Sub

' Shut Down NT
Public Sub ShutDownNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_SHUTDOWN
    If Force Then Flags = Flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx Flags, 0
End Sub

'Restart NT
Public Sub RebootNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_REBOOT
    If Force Then Flags = Flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx Flags, 0
End Sub

'Log off the current user
Public Sub LogOffNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_LOGOFF
    If Force Then Flags = Flags + EWX_FORCE
    ExitWindowsEx Flags, 0
End Sub

'In a form
'This project needs a form with three command buttons
Private Sub Command1_Click()
    LogOffNT True
End Sub
Private Sub Command2_Click()
    RebootNT True
End Sub
Private Sub Command3_Click()
    ShutDownNT True
End Sub

Private Sub Form_Load()
    Command1.Caption = "Log Off NT"
    Command2.Caption = "Reboot NT"
    Command3.Caption = "Shutdown NT"
End Sub
2.6K
28 января 2004 года
Hearse
89 / / 19.01.2004
Спасибо огромное за перевод.
1.9K
29 января 2004 года
wishco
59 / / 20.01.2004
Цитата:
Originally posted by Hearse
Спасибо огромное за перевод.



ЧТо спасибо. А как выключить!

1.9K
29 января 2004 года
wishco
59 / / 20.01.2004
Цитата:
Originally posted by SergeySV
Перевожу:
Код:
'In a module
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const ANYSIZE_ARRAY = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type
Type LUID
    LowPart As Long
    HighPart As Long
End Type
Type LUID_AND_ATTRIBUTES
    pLuid As LUID
    Attributes As Long
End Type
Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (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 Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
'Detect if the program is running under Windows NT
Public Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function

'set the shut down privilege for the current application
Private Sub EnableShutDown()
    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
    ' enable shutdown privilege for the current application
    AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
End Sub

' Shut Down NT
Public Sub ShutDownNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_SHUTDOWN
    If Force Then Flags = Flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx Flags, 0
End Sub

'Restart NT
Public Sub RebootNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_REBOOT
    If Force Then Flags = Flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx Flags, 0
End Sub

'Log off the current user
Public Sub LogOffNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_LOGOFF
    If Force Then Flags = Flags + EWX_FORCE
    ExitWindowsEx Flags, 0
End Sub

'In a form
'This project needs a form with three command buttons
Private Sub Command1_Click()
    LogOffNT True
End Sub
Private Sub Command2_Click()
    RebootNT True
End Sub
Private Sub Command3_Click()
    ShutDownNT True
End Sub

Private Sub Form_Load()
    Command1.Caption = "Log Off NT"
    Command2.Caption = "Reboot NT"
    Command3.Caption = "Shutdown NT"
End Sub



ТЫ пробывал в Xp выключить комп?
Код выхода из Windows я знаю.
Ты лутьше скажи как отключить комп натуральным образом.

Ну нажимаю на выключение компа,
а в итоге в конце вылетает табличка -
теперь вы можете выключить комп,
как-будто у меня AT корпус, а не ATX.

Мне надо всё отключить!!! А тут горит монитор и всё такое.
Кстати как ответ об MDI!!,,,??

258
30 января 2004 года
SergeySV
1.5K / / 19.03.2003
К сожалению есть такая фишка - табличка будет выскакивать даже если у тебя БП ATX (наверное наследие win98). причем другой предлагаемый код - shell("shutdown -r") тоже приводит к такому же эффекту. Так что больше вариантов я не знаю.
1.9K
30 января 2004 года
wishco
59 / / 20.01.2004
Цитата:
Originally posted by SergeySV
К сожалению есть такая фишка - табличка будет выскакивать даже если у тебя БП ATX (наверное наследие win98). причем другой предлагаемый код - shell("shutdown -r") тоже приводит к такому же эффекту. Так что больше вариантов я не знаю.



А можно сделать код, который выполняет Ctr+Alt+Del, пауза сек.5 затем переключение раскладки на русскую смоделировать нажатия клавишь
Alt+ш,Alt+ ы.(в Диспетчере задач Windows) что-бы выключить комп.
Но всё-таки в WindowsXp есть прога которая выключает комп. Может как либо её отследить.?

2.6K
30 января 2004 года
Hearse
89 / / 19.01.2004
Внимательнее надо быть! Константа на выключение EWX_POWEROFF, а не EWX_SHUTDOWN приведенный мной код на Си прекраснейшим образом выключает компьютер, просто неточность в переводе...
1.9K
01 февраля 2004 года
wishco
59 / / 20.01.2004
Цитата:
Originally posted by Hearse
Внимательнее надо быть! Константа на выключение EWX_POWEROFF, а не EWX_SHUTDOWN приведенный мной код на Си прекраснейшим образом выключает компьютер, просто неточность в переводе...



Дык как выключить!?
Где код на Visual BasiC!,!,!,????
А ты на Си не написал.....

2.6K
01 февраля 2004 года
Hearse
89 / / 19.01.2004
Цитата:
Originally posted by wishco


Дык как выключить!?
Где код на Visual BasiC!,!,!,????



Код на VB тебе дал товарищ SergeySV, просто найди значение константы EWX_POWEROFF, и используй ее в этом коде в качестве параметра ExitWindowsEx.

1.9K
01 февраля 2004 года
wishco
59 / / 20.01.2004
Цитата:
Originally posted by Hearse


Код на VB тебе дал товарищ SergeySV, просто найди значение константы EWX_POWEROFF, и используй ее в этом коде в качестве параметра ExitWindowsEx.



Я просмотрел win32api.txt но не нашёл!
Где искать!,?

1.9K
01 февраля 2004 года
wishco
59 / / 20.01.2004
Нашёл что -то , но что это такое!?
2.6K
02 февраля 2004 года
Hearse
89 / / 19.01.2004
Нашел ты почти то же самое, только для удаленного компутера, как я понял у тебя нет определения нужной константы - держи dll там одна процедура без параметров - PowerOff - как подключить думаю догадаешься(например LoadLibrary, GetProcAddres, FreeLibrary), если нет там еще и exe, накрайняк выполнишь через WinExec(не троян);)
1.9K
02 февраля 2004 года
wishco
59 / / 20.01.2004
Цитата:
Originally posted by Hearse
Нашел ты почти то же самое, только для удаленного компутера, как я понял у тебя нет определения нужной константы - держи dll там одна процедура без параметров - PowerOff - как подключить думаю догадаешься(например LoadLibrary, GetProcAddres, FreeLibrary), если нет там еще и exe, накрайняк выполнишь через WinExec(не троян);)



Всё супер!!!
Как либо выпутаюсь.
Неужели без dll ни как не льзя...???
Может код EXE покажешь.
Большое тебе спасибо Hearse, А также SergeySV.

2.6K
03 февраля 2004 года
Hearse
89 / / 19.01.2004
Цитата:
Originally posted by wishco

Большое тебе спасибо Hearse.
Может код EXE покажешь.



Всегда пожалуйста!
Код exe к сожалению на С++:(

Код:
#include <windows.h>

typedef void(*lib_func)(void);

int main()
{
    HMODULE hLibrary;
    lib_func f;
   
    hLibrary=LoadLibrary("poweroff.dll");
    f=(lib_func)GetProcAddress(hLibrary, "PowerOff");
    f();
    FreeLibrary(hLibrary);
    return 0;
}


Код функции PowerOff которая в dll я приводил выше.

Если в VB есть возможность статического линкования кода то lib приложен.

Просто у меня седьмая студия, а в VB7 я понимаю еше меньше чем в VB6(например там нет Type, вместо него Structure, нельзя в структре определять массивы конечного размера и т.д.)

З.Ы. Переходи на С++, и MSDN юзать легче, и ваять проще, IMHO CBuilder6 намного легче VB, хотя сам пишу на MSVC++.
258
03 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Попробуй с этой константой, у меня на Xp дома заработало:

Public Const EWX_POWEROFF = &H8&
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог