Форум: "Основная";
Текущий архив: 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.036 c