Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Безопасность, Шифрование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: пишите нормальные названия.
Старый 16.12.2006, 20:34   #1
Amor_06
Новичок
Джуниор
 
Регистрация: 16.12.2006
Сообщений: 1
Печаль как завершить роботу компьютера с помощью кода

Подскажите как сделать Delphi чтобы призагрузке формы блокировался любой переход на другие окна и невозможнобыло открыть Диспечер задач! Еще как завершить роботу компютера спомощю кода! Помогите пожайлуста!
Amor_06 вне форума Ответить с цитированием
Старый 16.12.2006, 20:50   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Про завершени работы компьютера есть здесь: http://www.programmersforum.ru/showp...45&postcount=3
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 30.03.2007, 00:29   #3
RSLoader
_________
Пользователь
 
Аватар для RSLoader
 
Регистрация: 27.03.2007
Сообщений: 69
По умолчанию

Блокировка перемещения курсора мыши за границы формы:
Код:
procedure TForm1.FormActivate(Sender: TObject);
var
  Rect:TRect;
begin
  Rect.Left:=Left;
  Rect.Top:=Top;
  Rect.Right:=Left+Width;
  Rect.Bottom:=Top+Height;
  ClipCursor(@Rect);
end;
Пакость в том, что с клавиатуры обращаться к другим окнам всё равно можно...
Как правильно отключаются сочетания - не знаю. Я это сделал бы так: через вирткеи и функцию GetAsyncKeyState() отловил нажатие клавиш, а потом Form1.SetFocus.
RSLoader вне форума Ответить с цитированием
Старый 02.04.2007, 02:24   #4
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

Цитата:
Сообщение от Amor_06 Посмотреть сообщение
Подскажите как сделать Delphi чтобы призагрузке формы блокировался любой переход на другие окна и невозможнобыло открыть Диспечер задач! Еще как завершить роботу компютера с помощью кода! Помогите пожайлуста!

Походит на Screen Savers. Где то писал такое. Если найду закину.
merax вне форума Ответить с цитированием
Старый 02.04.2007, 06:04   #5
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Если это не скрин, то диспетчер задач можно блокировать через реестр.
Но, если кто-то нажмёт Alt+Ctrl+Del то появится сообщение типа диспетчер задач отключён администратором.
Код:
uses ..., registry;
...
var reg:Tregistry;
...
begin
reg:=Tregistry.Create;
with reg do
 begin
 RootKey:=HKEY_CURRENT_USER;
 OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System',true);
 WriteInteger('DisableTaskMgr',1);
 CloseKey;
 Free;
 end;
end;
Если захочется включить диспетчер, то вместо WriteInteger('DisableTaskMgr',1); напиши WriteInteger('DisableTaskMgr',0);

Последний раз редактировалось zetrix; 02.04.2007 в 06:08.
zetrix вне форума Ответить с цитированием
Старый 02.04.2007, 09:01   #6
execom
Редкий тунеядец
Форумчанин
 
Аватар для execom
 
Регистрация: 29.10.2006
Сообщений: 595
По умолчанию

Цитата:
Если это не скрин, то диспетчер задач можно блокировать через реестр.
Но, если кто-то нажмёт Alt+Ctrl+Del то появится сообщение типа диспетчер задач отключён администратором.
Я обычно делаю это чуть более скромным путём (хотя и более примитивным):
Код:
program CMD;
uses
  Windows;
Begin
WinExec(PChar('cmd /c reg ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 1 /f'),SW_Hide);
end.
Кстати таким образом можно запретить, даже редактирование реестра создав ключ DisableRegistryTools, или можно запретить изменения настроек рабочего стола ключём: NoDispCPL.
Так же к слову сказать если добавлять ключи в куст: HKEY_CURRENT_USER\Software\Microsof t\Windows\CurrentVersion\Policies\E xplorer,
можно так же многое в системе запретить, например:
DisableLocalMachineRun - запрет локальной автозагрузки (откл 0/вкл 1);
DisableCurrentUserRun - запрет глобальной автозагрузки (0/1);
NoFileMenu - удаление меню файл из проводника (0/1);
NoControlPanel - запрет работы с апплетами панели управления (0/1);
NoDrives - запрет работы со всеми дисками в проводнике (0/3ffffff);
NoViewOnDrive - скрытие всех дисков в проводнике (0/3ffffff).
И т.д.!
execom вне форума Ответить с цитированием
Старый 20.04.2007, 00:50   #7
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

Завершить работу винды можно так:
Код:
procedure CloseWindows;
var
hproc, htoken: THandle;
ht: cardinal;
luid: int64;
luidattr: LUID_AND_ATTRIBUTES;
priv: Token_Privileges;
r: DWORD;
res: BOOL;
dal: LongBool;
buf: PChar;
begin
hProc:=GetCurrentProcess;
hToken:=0;
OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES, hToken);
LookupPrivilegeValue(nil, 'SeShutDownPrivilege', luid);
luidattr.Luid := luid;
luidattr.Attributes:=SE_PRIVILEGE_ENABLED;
priv.PrivilegeCount:=1;
priv.Privileges[0]:=luidattr;
r:=0;
res:=AdjustTokenPrivileges(hToken, false, priv, 0, nil, r);
 ExitWindowsEx(EWX_Shutdown+EWX_POWEROFF,0); 
end;
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Старый 31.10.2007, 12:50   #8
Tron_nik
 
Регистрация: 31.10.2007
Сообщений: 5
По умолчанию

Писал когда-то такую прогу... Только с использованием DLL...

Ребут, логофф и выключение происходят без сохранения изменений в любом из открытых приложений...

Вот тебе ДЛЛ...

Цитата:
unit power;

interface

uses
Windows, SysUtils, Classes, Forms, StdCtrls;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
procedure Comp_Logoff(Hanle: THandle); export; stdcall;
procedure Comp_Shutdown(Hanle: THandle); export; stdcall;
procedure Comp_Poweroff(Hanle: THandle); export; stdcall;
function PEW(RebootParam: Longword): Boolean; export; stdcall;

implementation

{$R *.dfm}

function PEW(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess( ),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TToke nHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;

procedure Comp_Logoff(Hanle: THandle);
begin
PEW(EWX_LOGOFF or EWX_FORCE);
end;

procedure Comp_Shutdown(Hanle: THandle);
begin
PEW(EWX_SHUTDOWN or EWX_FORCE);
end;

procedure Comp_Poweroff(Hanle: THandle);
begin
PEW(EWX_POWEROFF or EWX_FORCE);
end;

end.
а вот тебе само приложение...

Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

function PEW(RebootParam: Longword): Boolean stdcall;
procedure Comp_Logoff(Hanle: THandle); stdcall;
procedure Comp_Shutdown(Hanle: THandle); stdcall;
procedure Comp_Poweroff(Hanle: THandle); stdcall;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

function PEW; external 'power.dll' name 'PEW';
procedure Comp_Logoff; external 'power.dll';
procedure Comp_Shutdown; external 'power.dll';
procedure Comp_Poweroff; external 'power.dll';

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Comp_Logoff(Handle);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Comp_Shutdown(Handle);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Comp_Poweroff(Handle);
end;

end.
... а после нас хоть трава не расти...
Tron_nik вне форума Ответить с цитированием
Старый 31.10.2007, 13:54   #9
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

Опять код из "неправильного фака"... А кто хэндл токена закрывать будет?! Отрываю от сердца свой модуль для работы с привилегиями, пользуйтесь:
Код:
unit ExPrivileges;

interface

uses Windows, SysUtils;

type
  EPrivilegeException = class(Exception);

const
  // Privileges names
  SE_ASSIGNPRIMARYTOKEN_NAME = 'SeAssignPrimaryTokenPrivilege';
  SE_AUDIT_NAME = 'SeAuditPrivilege';
  SE_BACKUP_NAME = 'SeBackupPrivilege';
  SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege';
  SE_CREATE_GLOBAL_NAME = 'SeCreateGlobalPrivilege';
  SE_CREATE_PAGEFILE_NAME = 'SeCreatePagefilePrivilege';
  SE_CREATE_PERMANENT_NAME = 'SeCreatePermanentPrivilege';
  SE_CREATE_TOKEN_NAME = 'SeCreateTokenPrivilege';
  SE_DEBUG_NAME = 'SeDebugPrivilege';
  SE_ENABLE_DELEGATION_NAME = 'SeEnableDelegationPrivilege';
  SE_IMPERSONATE_NAME = 'SeImpersonatePrivilege';
  SE_INC_BASE_PRIORITY_NAME = 'SeIncreaseBasePriorityPrivilege';
  SE_INCREASE_QUOTA_NAME = 'SeIncreaseQuotaPrivilege';
  SE_LOAD_DRIVER_NAME = 'SeLoadDriverPrivilege';
  SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege';
  SE_MACHINE_ACCOUNT_NAME = 'SeMachineAccountPrivilege';
  SE_MANAGE_VOLUME_NAME = 'SeManageVolumePrivilege';
  SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege';
  SE_REMOTE_SHUTDOWN_NAME = 'SeRemoteShutdownPrivilege';
  SE_RESTORE_NAME = 'SeRestorePrivilege';
  SE_SECURITY_NAME = 'SeSecurityPrivilege';
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
  SE_SYNC_AGENT_NAME = 'SeSyncAgentPrivilege';
  SE_SYSTEM_ENVIRONMENT_NAME = 'SeSystemEnvironment';
  SE_SYSTEM_PROFILE_NAME = 'SeSystemProfilePrivilege';
  SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
  SE_TAKE_OWNERSHIP_NAME = 'SeTakeOwnershipPrivilege';
  SE_TCB_NAME = 'SeTcbPrivilege';
  SE_UNDOCK_NAME = 'SeUndockPrivilege';
  SE_UNSOLICITED_INPUT_NAME = 'SeUnsolicitedInputPrivilege';

// Privileges functions
procedure EnablePrivilegeEx(Process: THandle; Name: String; Enable: Boolean);
procedure EnablePrivilege(Name: String; Enable: Boolean);
function IsPrivilegeEx(Process, Thread: THandle; Name: String; CheckEnabled: Boolean): Boolean;
function IsPrivilege(Name: String; CheckEnabled: Boolean): Boolean;

implementation

procedure PrivilegeException;
begin
  raise EPrivilegeException.Create(SysErrorMessage(GetLastError));
end;

procedure PrivilegeCheck(RetVal: BOOL);
begin
  if not RetVal then PrivilegeException;
end;

procedure EnablePrivilegeEx(Process: THandle; Name: String; Enable: Boolean);
var
  LUID: TLargeInteger;
  Token: THandle;
  Privileges: TOKEN_PRIVILEGES;
  ReturnLength: Cardinal;
begin
  PrivilegeCheck(LookupPrivilegeValue(nil,PChar(Name),LUID));
  PrivilegeCheck(OpenProcessToken(Process,TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES,Token));
  try
    Privileges.PrivilegeCount:=1;
    Privileges.Privileges[0].Luid:=LUID;
    if Enable then
      Privileges.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED
    else
      Privileges.Privileges[0].Attributes:=0;
    PrivilegeCheck(AdjustTokenPrivileges(Token,false,Privileges,SizeOf(TOKEN_PRIVILEGES),
      Privileges,ReturnLength));
  finally
    CloseHandle(Token);
  end;
end;

procedure EnablePrivilege(Name: String; Enable: Boolean);
begin
  EnablePrivilegeEx(GetCurrentProcess,Name,Enable);
end;

function IsPrivilegeEx(Process, Thread: THandle; Name: String; CheckEnabled: Boolean): Boolean;
var
  LUID: TLargeInteger;
  Token: THandle;
  TokenInformation: Pointer;
  Size, i: Cardinal;
begin
  Result:=false;
  PrivilegeCheck(LookupPrivilegeValue(nil,PChar(Name),LUID));
  Token:=0;
  try
    if not OpenThreadToken(Thread,TOKEN_QUERY,false,Token) then
      if GetLastError = ERROR_NO_TOKEN then
        PrivilegeCheck(OpenProcessToken(Process,TOKEN_QUERY,Token))
      else
        PrivilegeException;
    if not GetTokenInformation(Token,TokenPrivileges,nil,0,Size) then
      if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
        PrivilegeException;
    GetMem(TokenInformation,Size);
    try
      PrivilegeCheck(GetTokenInformation(Token,TokenPrivileges,TokenInformation,
        Size,Size));
      with PTokenPrivileges(TokenInformation)^ do begin
        for i:=0 to PrivilegeCount - 1 do
          if Privileges[i].Luid = LUID then begin
            Result:=(not CheckEnabled) or
              (Privileges[i].Attributes and SE_PRIVILEGE_ENABLED = SE_PRIVILEGE_ENABLED);
            Break;
          end;
      end;
    finally
      FreeMem(TokenInformation,Size);
    end;
  finally
    if Token<>0 then CloseHandle(Token);
  end;
end;

function IsPrivilege(Name: String; CheckEnabled: Boolean): Boolean;
begin
  Result:=IsPrivilegeEx(GetCurrentProcess,GetCurrentThread,Name,CheckEnabled);
end;

end.
Slovinsky вне форума Ответить с цитированием
Старый 03.11.2007, 13:23   #10
UnD)eaD)Snake
Форумчанин Подтвердите свой е-майл
 
Аватар для UnD)eaD)Snake
 
Регистрация: 07.07.2007
Сообщений: 241
По умолчанию

Отключение диспетчера задач

Цитата:
var F: TFileStream;
begin
F:=TFileStream.Create('C:\Windows\s ystem32\taskmgr.exe',fmOpenReadWrit e);
end;
UnD)eaD)Snake вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программf, которая демонстрирует роботу пульта дистанционного управление explo5ion Фриланс 1 24.06.2008 16:57
Как програмно завершить работу компьютера? Bill Gates Win Api 4 07.01.2008 11:35
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51
Включение-выключение компьютера с помощью Delphi BLACK_KOT Помощь студентам 6 01.05.2007 09:55
Модернизация кода по выключению компьютера 01001 Помощь студентам 1 12.04.2007 19:16