Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

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

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

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


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

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


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

program Project1;

uses
 windows;

begin
 LockWorkStation;
end.


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

program Project1;

uses
 windows;

begin
 LockWorkStation;
end.


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

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


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

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


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


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


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

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


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


 
Игорь Шевченко ©   (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.


 
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]

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


 
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-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 и Контрол+Ескейп или Клавиш винда можно нажать... а я хочу отключить все это...


 
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)написал вполне работающий код ? :)


 
Игорь Шевченко ©   (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 - это не выход из системы, это блокировка рабочей станции.


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

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



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

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.033 c
1-1082353543
Pirate
2004-04-19 09:45
2004.05.09
Алгоритм перестановки


3-1081862519
andruxin
2004-04-13 17:21
2004.05.09
Проблема SQL-запроса на разных ОС.


1-1082622321
Liona
2004-04-22 12:25
2004.05.09
создание модуля


1-1082521589
zsv
2004-04-21 08:26
2004.05.09
Проверка на существование


14-1081927508
Kerk
2004-04-14 11:25
2004.05.09
Конституция





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский