Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Shell_TrayWND in WinXP   Найти похожие ветки 

 
spogi   (2004-04-20 22:59) [0]

Хочу чтобы при открытии моей программы происходило следующее:
1) Убрать панель задач (пуск и т.д.)
2) Очищать рабочий стол (скрыть все)
3) Чтобы система не отвечал на системных команд, т.к. Нажатия клавиша Win (или Ctrl+Esc), Нажатия Alt+F4, или что-либо еще...
СУТЬ:
Хочу написать программу которая будет ждать ввода пароля без какого вход в систему не удалось бы...
ОС:
В Win98 кое-что получается, но WinXP ничего конкретнего...
Желательно с примерами, или ссылку откуда можно читать...


 
ASvencim ©   (2004-04-20 23:04) [1]

Удалено модератором


 
easy ©   (2004-04-20 23:11) [2]

program Project1;

uses
 windows;

begin
 LockWorkStation;
end.


 
Gero ©   (2004-04-20 23:20) [3]

И не пытайтесь даже.
Не получится все равно.


 
Игорь Шевченко ©   (2004-04-20 23:42) [4]


> Хочу чтобы при открытии моей программы происходило следующее


Хотят ли этого пользователи твоей программы ?

> СУТЬ:
> Хочу написать программу которая будет ждать ввода пароля
> без какого вход в систему не удалось бы...


Уже написана, называется Windows XP (Win+L, говорят, работает), и в разделе "Пользователи" в панели управления вставь обязательный ввод пароля.


 
DVM ©   (2004-04-21 00:21) [5]

program Project1;

uses
 Windows,
 Messages,
 Classes,
 SysUtils,
 ShellAPI,
 StdCtrls,
 Dialogs,
 Forms;

{$R *.res}

const
C_ClubDesktop = "ClubDesktop!";

type
TTest = class(TComponent)
  procedure Close(Sender: TObject);
  procedure Open(Sender: TObject);
end;

TSwitchDesktopThread = class(TThread)
private
  FDesk    : HDESK;
protected
  procedure Execute; override;
public
  constructor Create(ADesk : HDESK);
end;

var
Form : TForm;
Test : TTest;

function GetDesktopName(ADesk : HDESK) : string;
var
lpnLengthNeeded : Cardinal;
pvInfo : PChar;
begin
result := "";
pvInfo := nil;
GetUserObjectInformation(ADesk,UOI_NAME,pvInfo,0,lpnLengthNeeded); // çäåñü âîçâðàùàåòñÿ 2xN à íèæå N (lpnLengthNeeded)
pvInfo := StrAlloc(lpnLengthNeeded);                               // ïî÷åìó? õç
try                                                                // íàâåðíîå ñíà÷àëà äóìàåò âåðíóòü äëÿ Unicode
 if GetUserObjectInformation(ADesk,UOI_NAME,pvInfo,lpnLengthNeeded,lpnLengthNeeded) then begin
   SetString(result,pvInfo,lpnLengthNeeded-1);
 end;
finally
 StrDispose(pvInfo);
end;
end;

function IsClubDesktop : boolean;
var
hObj : HDESK;
begin
hObj := GetThreadDesktop(GetCurrentThreadId);
result := GetDesktopName(hObj)=C_ClubDesktop;
end;

procedure CreateClubDesktop;
var
hObj : HDESK;
begin
hObj := CreateDesktop(C_ClubDesktop,nil,nil,DF_ALLOWOTHERACCOUNTHOOK,
                      DESKTOP_CREATEMENU or
                      DESKTOP_CREATEWINDOW or
                      DESKTOP_ENUMERATE or
                      DESKTOP_JOURNALPLAYBACK or
                      DESKTOP_JOURNALRECORD or
                      DESKTOP_HOOKCONTROL or
                      DESKTOP_READOBJECTS or
                      DESKTOP_SWITCHDESKTOP or
                      DESKTOP_WRITEOBJECTS,
                      nil);
if hObj=0 then raise Exception.Create(SysErrorMessage(GetLastError));
end;

procedure StartClubShell;
var
SI : STARTUPINFO;
PI : TPROCESSINFORMATION;
begin
FillMemory(@SI, sizeof(SI), 0);
FillMemory(@PI, sizeof(PI), 0);
SI.cb := sizeof(SI);
SI.lpDesktop := PChar("WinSta0\"+C_ClubDesktop);
if not CreateProcess(pchar(Application.ExeName), nil, nil, nil, false, NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE,
                        nil, nil, SI, PI) then begin
  raise Exception.Create(SysErrorMessage(GetLastError));
end;
end;

function SwitchDesktopExt(ADesk : HDESK) : boolean;
begin
with TSwitchDesktopThread.Create(ADesk) do try
  WaitFor;
  Result := Boolean(ReturnValue);
finally
  Free;
end;
end;

procedure ShowClubDesktop;
var
hObj : HDESK;
begin
hObj := OpenDesktop(C_ClubDesktop,DF_ALLOWOTHERACCOUNTHOOK,true,
                    DESKTOP_CREATEMENU or
                    DESKTOP_CREATEWINDOW or
                    DESKTOP_ENUMERATE or
                    DESKTOP_HOOKCONTROL or
                    DESKTOP_READOBJECTS or
                    DESKTOP_SWITCHDESKTOP or
                    DESKTOP_WRITEOBJECTS);
SwitchDesktopExt(hObj);
CloseDesktop(hObj);
end;

procedure ShowDefaultDesktop;
var
hObj : HDESK;
begin
hObj := OpenDesktop("Default",DF_ALLOWOTHERACCOUNTHOOK,true,
                    DESKTOP_CREATEMENU or
                    DESKTOP_CREATEWINDOW or
                    DESKTOP_ENUMERATE or
                    DESKTOP_HOOKCONTROL or
                    DESKTOP_READOBJECTS or
                    DESKTOP_SWITCHDESKTOP or
                    DESKTOP_WRITEOBJECTS);
SwitchDesktopExt(hObj);
CloseDesktop(hObj);
end;

{ TTest }

procedure TTest.Close(Sender: TObject);
begin
Form.Close;
end;

procedure TTest.Open(Sender: TObject);
begin
with TOpenDialog.Create(nil) do try
  if Execute then ShellExecute(Form.Handle,"open",PChar(FileName),nil,nil,SW_SHOW);
finally
  Free;
end;
end;

{ TSwitchDesktopThread }

constructor TSwitchDesktopThread.Create(ADesk: HDESK);
begin
inherited Create(false);
FDesk   := ADesk;
end;

procedure TSwitchDesktopThread.Execute;
begin
ReturnValue := Integer(false);
if SetThreadDesktop(FDesk) then
  if SwitchDesktop(FDesk) then ReturnValue := Integer(false);
end;

begin
Application.Initialize;
if IsClubDesktop then begin
  Application.CreateForm(TForm, Form);
 Test := TTest.Create(Form);
  with TButton.Create(Form) do begin
    Parent:=Form;
    Visible:=true;
    Caption := "Close";
    SetBounds(10,10,100,20);
    OnClick := Test.Close;
  end;
  with TButton.Create(Form) do begin
    Parent:=Form;
    Visible:=true;
    Caption := "Open";
    SetBounds(10,40,100,20);
    OnClick := Test.Open;
  end;
  Application.Run;
  Test.Free;
  ShowDefaultDesktop;    
end else begin
  CreateClubDesktop;
  StartClubShell;
  ShowClubDesktop;
end;
end.


 
Anatoly Podgoretsky ©   (2004-04-21 00:37) [6]

Делов то поставь пароль в БИОСе, очень надежно


 
spogi   (2004-04-21 00:53) [7]

Ogromnoe spasibo vsem, daje samim pessimistam! :))
Polzovateli moey programmi po suti doljni bit sobstvenno Admini, princip poxoj na zastavku, kotoraya pri vixode zaprashivaet parol...


 
spogi   (2004-04-25 02:07) [8]

Privet!
Eto opyat ya!
LockWorkStation ne pomoglo, potomu cto ya ne xocu viyti iz sistemi...Zanoqo opisivayu situaciyu!
Есть прога. Form1.windowState:=wsMaximized; i StayOnTop, i eshe vse BorderIcons имеют значения False. Есть едит куда пишем пароль и заходим в рабочий стол... все ясно только, Альт+Ф4 и Контрол+Ескейп или Клавиш винда можно нажать... а я хочу отключить все это...


 
Игорь Шевченко ©   (2004-04-26 11:33) [9]

spogi   (25.04.04 02:07)

Тебе же DVM (21.04.04 00:21)написал вполне работающий код ? :)


 
evvcom ©   (2004-04-26 11:42) [10]

LockWorkStation - это не выход из системы, это блокировка рабочей станции.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1080139485
satron
2004-03-24 17:44
2004.04.11
Как получить конкретный символ в Memo ?


3-1079080323
Str_alex
2004-03-12 11:32
2004.04.11
Заблокирована таблица FOXа после ее создания/заполнения


14-1082286528
Мдя-ужж
2004-04-18 15:08
2004.04.11
96 кило игрулька , и нехилая ....


14-1080142691
panov
2004-03-24 18:38
2004.04.11
Двадцатка самых популярных вопросов.


1-1082464357
V l a d i m i r
2004-04-20 16:32
2004.04.11
Исключительная ситуация Try ... except