Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запретить Alt-CTRL-DEL, Для Windows'XP 
:(
    Опции темы
Zero
  Дата 24.1.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Вообщем САБЖ. Только не направляйте на ФАКУ, я там уже смотрел, вот этот пример
Код

var  
 i : integer;  
begin  
 i := 0;  
{запрещаем Ctrl-Alt-Del}  
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @i, 0);  
end.  
// необходим unit WinProcs
// для Alt-Tab: SPI_SETFASTTASKSWITCH
не работает у меня на W'XP. Точнее компилится, но на ALT-CTRL-DEL, всё равно открывается диспетчер задач.
Да и в том числе желательно запретить любые попытки свернуть программу, или закрыть.
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.1.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



А через поиск? тама есть неплохое решение специально для ХР....
PM   Вверх
Zero
Дата 25.1.2005, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Где? Я видал одно решение, оно тоже не работает. Может покажеш ссылку...
PM MAIL ICQ   Вверх
ДЫМ
Дата 25.1.2005, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Код

//********************
// Отключение диспетчера задач в WindowsXP
//
//
//
procedure DisableTaskMgr(bTF: Boolean);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;

reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True);

if bTF = True then
begin
  reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
  reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;

// Example Call:
procedure TForm1.Button1Click(Sender: TObject);
begin
DisableTaskMgr(True);
end;


PM MAIL WWW   Вверх
Zero
Дата 25.1.2005, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



ДЫМ спасибо!!! А ты где это нашёл? (скинь ссылку плиз, если это из топиков форума) Не знаешь как ещё ALT-TAB запретить? И всё что может искуственно остановить приложение...
Добавлено @ 02:26
Блин, а как его теперь включить?
PM MAIL ICQ   Вверх
Zero
Дата 25.1.2005, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



А всё, последнее уладил. Как Alt-Tab, отключить.
PM MAIL ICQ   Вверх
Nicholas
Дата 25.1.2005, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



Цитата(Zero @ 25.1.2005, 02:37)
А всё, последнее уладил. Как Alt-Tab, отключить.


Alt-Tab я запретил, а как запретить Ctrl+Ecs????????? И еще клавиша Windows есть!

Короче мне панель задач надо заблокировать????
PM MAIL ICQ   Вверх
Snowy
Дата 25.1.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ну так просто сделай ее невидимой и все...
PM MAIL   Вверх
Zero
Дата 25.1.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Nicholas @ 25.1.2005, 13:09)
Alt-Tab я запретил,
Покажи пример плиз!!!
PM MAIL ICQ   Вверх
Akella
Дата 25.1.2005, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Находишь окно и посылаешь ему сообщение
Имя окна не помню
PM MAIL   Вверх
Ripper
Дата 25.1.2005, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Дык.... можно и без реестра. Есть способ. В факе в DRKB есть статья как стать невидимым в NT.
вот что я давно находил на форуме:
Код

library Hide;

uses
Windows,
TlHelp32;

type

SYSTEM_INFORMATION_CLASS = (
SystemBasicInformation,
SystemProcessorInformation,
SystemPerformanceInformation,
SystemTimeOfDayInformation,
SystemNotImplemented1,
SystemProcessesAndThreadsInformation,
SystemCallCounts,
SystemConfigurationInformation,
SystemProcessorTimes,
SystemGlobalFlag,
SystemNotImplemented2,
SystemModuleInformation,
SystemLockInformation,
SystemNotImplemented3,
SystemNotImplemented4,
SystemNotImplemented5,
SystemHandleInformation,
SystemObjectInformation,
SystemPagefileInformation,
SystemInstructionEmulationCounts,
SystemInvalidInfoClass1,
SystemCacheInformation,
SystemPoolTagInformation,
SystemProcessorStatistics,
SystemDpcInformation,
SystemNotImplemented6,
SystemLoadImage,
SystemUnloadImage,
SystemTimeAdjustment,
SystemNotImplemented7,
SystemNotImplemented8,
SystemNotImplemented9,
SystemCrashDumpInformation,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemContextSwitchInformation,
SystemRegistryQuotaInformation,
SystemLoadAndCallImage,
SystemPrioritySeparation,
SystemNotImplemented10,
SystemNotImplemented11,
SystemInvalidInfoClass2,
SystemInvalidInfoClass3,
SystemTimeZoneInformation,
SystemLookasideInformation,
SystemSetTimeSlipEvent,
SystemCreateSession,
SystemDeleteSession,
SystemInvalidInfoClass4,
SystemRangeStartInformation,
SystemVerifierInformation,
SystemAddVerifier,
SystemSessionProcessesInformation
);


_IMAGE_IMPORT_DESCRIPTOR = packed record
case Integer of 0:(
Characteristics: DWORD);
1:(
OriginalFirstThunk:DWORD;
TimeDateStamp:DWORD;
ForwarderChain: DWORD;
Name: DWORD;
FirstThunk: DWORD);
end;
IMAGE_IMPORT_DESCRIPTOR=_IMAGE_IMPORT_DESCRIPTOR;
PIMAGE_IMPORT_DESCRIPTOR=^IMAGE_IMPORT_DESCRIPTOR;

PFARPROC=^FARPROC;


const ImagehlpLib = 'IMAGEHLP.DLL';

function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
DirectoryEntry: Word; var Size: ULONG): Pointer; stdcall; external ImagehlpLib name 'ImageDirectoryEntryToData';

function AllocMem(Size: Cardinal): Pointer;
begin
GetMem(Result, Size);
FillChar(Result^, Size, 0);
end;


procedure ReplaceIATEntryInOneMod(pszCallerModName:Pchar;pfnCurrent:FarProc;pfnNew:FARPROC;hmodCaller:hModule);
var ulSize:ULONG; pImportDesc:PIMAGE_IMPORT_DESCRIPTOR;pszModName:PChar;
 pThunk:PDWORD; ppfn:PFARPROC;ffound:LongBool;written:DWORD;
begin
pImportDesc := ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
if pImportDesc = nil then exit;
while pImportDesc.Name<>0 do
begin
pszModName := PChar(hmodCaller + pImportDesc.Name);
if (lstrcmpiA(pszModName, pszCallerModName) = 0) then break;
Inc(pImportDesc);
end;
if (pImportDesc.Name = 0) then exit;
pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
while pThunk^<>0 do
begin
ppfn := PFARPROC(pThunk);
fFound := (ppfn^ = pfnCurrent);
if (fFound) then
 begin
  VirtualProtectEx(GetCurrentProcess,ppfn,4,PAGE_EXECUTE_READWRITE,written);
  WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew), Written);
  exit;
 end;
Inc(pThunk);
end;
end;

var
addr_NtQuerySystemInformation:Pointer;
mypid:DWORD;
fname:PCHAR;
mapaddr:PDWORD;
hideOnlyTaskMan:PBOOL;

{ By Wasm.ru}
function myNtQuerySystemInfo(SystemInformationClass:SYSTEM_INFORMATION_CLASS;SystemInformation:Pointer;
      SystemInformationLength:ULONG;ReturnLength:PULONG):LongInt;stdcall;
label onceagain,getnextpidstruct,quit,fillzero;
asm
push ReturnLength
push SystemInformationLength
push SystemInformation
push dword ptr SystemInformationClass
call dword ptr [addr_NtQuerySystemInformation]
or eax,eax
jl quit
cmp SystemInformationClass,SystemProcessesAndThreadsInformation
jne quit
onceagain:
mov esi,SystemInformation
getnextpidstruct:
mov ebx,esi
cmp dword ptr [esi],0
je quit
add esi,[esi]
mov ecx,[esi+44h]
cmp ecx,mypid
jne getnextpidstruct
mov edx,[esi]
test edx,edx
je fillzero
add [ebx],edx
jmp onceagain
fillzero:
and [ebx],edx
jmp onceagain
quit:
mov Result,eax
end;


procedure InterceptFunctions;
var hSnapShot:THandle;me32:MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
if hSnapshot=INVALID_HANDLE_VALUE then exit;
try
ZeroMemory(@me32,sizeof(MODULEENTRY32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);
repeat
ReplaceIATEntryInOneMod('ntdll.dll',addr_NtQuerySystemInformation,@MyNtQuerySystemInfo,me32.hModule);
until not Module32Next(hSnapShot,me32);
finally
CloseHandle(hSnapShot);
end;
end;

procedure UninterceptFunctions;
var hSnapShot:THandle;me32:MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot(TH32CS_SNAPMODULE,GetCurrentProcessId);
if hSnapshot=INVALID_HANDLE_VALUE then exit;
try
ZeroMemory(@me32,sizeof(MODULEENTRY32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);
repeat
ReplaceIATEntryInOneMod('ntdll.dll',@MyNtQuerySystemInfo,addr_NtQuerySystemInformation,me32.hModule);
until not Module32Next(hSnapShot,me32);
finally
CloseHandle(hSnapShot);
end;
end;


var HookHandle: THandle;

function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
Result:=0;
end;

procedure InstallHook; stdcall;
begin
HookHandle:=SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;

var hFirstMapHandle:THandle;

function HideProcess(pid:DWORD;HideOnlyFromTaskManager:BOOL):BOOL;stdcall;
var addrMap:PDWORD;ptr2:PBOOL;
begin
mypid:=0;
result:=false;
hFirstMapHandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,8,'NtHideFileMapping');
if hFirstMapHandle=0 then exit;
addrMap:=MapViewOfFile(hFirstMapHandle,FILE_MAP_WRITE,0,0,8);
if addrMap=nil then
begin
CloseHandle(hFirstMapHandle);
exit;
end;
addrMap^:=pid;
ptr2:=PBOOL(DWORD(addrMap)+4);
ptr2^:=HideOnlyFromTaskManager;
UnmapViewOfFile(addrMap);
InstallHook;
result:=true;
end;


exports
HideProcess;

var
hmap:THandle;

procedure LibraryProc(Reason: Integer);
begin
if Reason=DLL_PROCESS_DETACH then
if mypid>0 then
UninterceptFunctions() else
CloseHandle(hFirstMapHandle);
end;


begin
hmap:=OpenFileMapping(FILE_MAP_READ,false,'NtHideFileMapping');
if hmap=0 then exit;
try
mapaddr:=MapViewOfFile(hmap,FILE_MAP_READ,0,0,0);
if mapaddr=nil then exit;
mypid:=mapaddr^;
hideOnlyTaskMan:=PBOOL(DWORD(mapaddr)+4);
if hideOnlyTaskMan^ then
begin
fname:=allocMem(MAX_PATH+1);
GetModuleFileName(GetModuleHandle(nil),fname,MAX_PATH+1);
// if not (ExtractFileName(fname)='taskmgr.exe') then exit;
end;
InterceptFunctions;
finally
UnmapViewOfFile(mapaddr);
CloseHandle(Hmap);
DLLProc:=@LibraryProc;
end;
end.




А вот пример проги, с испольщованием hide.dll:
Код

program HideProj;


uses
windows,messages;

function HideProcess(pid:DWORD;HideOnlyFromTaskManager:BOOL):BOOL; stdcall; external 'hide.dll';

function ProcessMessage(var Msg: TMsg): Boolean;
var
Handled: Boolean;
begin
Result := False;
begin
 Result := True;
 if Msg.Message <> WM_QUIT then
 begin
   Handled := False;
   begin
     TranslateMessage(Msg);
     DispatchMessage(Msg);
   end;
 end
end;
end;

procedure ProcessMessages;
var
Msg: TMsg;
begin
while ProcessMessage(Msg) do {loop};
end;


begin
HideProcess(GetCurrentProcessId,false);
while true do
begin
ProcessMessages;
end;
end.


HideProcess(GetCurrentProcessId,false); - одной строкой прячеш когда надо. А в реестре навсегда останется.. надо после зварешения проги восстановлять все записи. У меня этот код работал .. я точно помню smile


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Akella
Дата 25.1.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



мне кажется после установки SP1 или SP2 нормально работать не будет
PM MAIL   Вверх
Ripper
Дата 25.1.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Щас на буттон повесил HideProcess(GetCurrentProcessId,false);
и работало тока на кнопку тыркнул а потом на окошко с CAD ) И надпись project1.exe пропала smile
У меня SP2 стоит


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Ripper
Дата 25.1.2005, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Кстати, вопрос заключается в том чтобы не появлялся диспетчер задач или в том как спрятать программу из дичпетчера?) Это разные вещи)


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Zero
Дата 25.1.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Ripper @ 25.1.2005, 19:03)
Кстати, вопрос заключается в том чтобы не появлялся диспетчер задач или в том как спрятать программу из дичпетчера?)

Вопрос заключался, "Как сделать чтобы на ALT-TAB, ничего не происходило"
И ещё <Windows>+D, тоже надо чтобы отключить.
PM MAIL ICQ   Вверх
Ripper
Дата 26.1.2005, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Ну хз.... может с помощью хуков? Поищи на форуме
Я помню что записывал нажатия клавиш хуками. вроде как можно отловить и другие клавиши. хотя хз... насчет СaD первый пример хорошо подходит


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Zero
Дата 27.1.2005, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Поднимаю тему. Только тут дополнение, не ALT-CTRL_DEL, т.к. это сделано, а ALT-TAB, точнее как его запретить для Windows'XP.
PM MAIL ICQ   Вверх
ДЫМ
Дата 27.1.2005, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



А может hook на клавиатуру? Сам я в этом не силен, но знающие люди, думаю, подскажут.
PM MAIL WWW   Вверх
Akella
Дата 27.1.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Мне кажется, что все эти клавиши и сочетания можно отключить в реестре или в политиках
PM MAIL   Вверх
Akella
Дата 27.1.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



зависит, конечно от ОС

Это сообщение отредактировал(а) dsergey - 27.1.2005, 11:52
PM MAIL   Вверх
Bes
Дата 27.1.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Если задача - спрятать программу, (а я так думаю, задача именно такая):
1) Не подозрительно ли будет отсутствие таких замечательных клавиш? :-)
2) чтобы убрать прогу отовсюду (кроме диспетчера задач, где можно подобрать красивое имя типа "ntkernel32" чтобы руки не чесались закрыть) надо свойство Application.showmainform:=false;
3) идеальный вариант прицепляться к другим процессам типа explorer.exe только я так не пробовал
PM MAIL   Вверх
Zero
Дата 27.1.2005, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(dsergey @ 27.1.2005, 11:38)
Мне кажется, что все эти клавиши и сочетания можно отключить в реестре или в политиках

dsergey а ты не знаешь, какой ключь надо использовать.
Цитата(dsergey @ 27.1.2005, 11:52)
зависит, конечно от ОС

W'XP+SP2
Добавлено @ 18:04
Да, <Windows>+D тоже бы надо обрать как-нибудь.
PM MAIL ICQ   Вверх
W_A_K_E
Дата 30.1.2005, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 14.1.2005

Репутация: нет
Всего: нет



У меня такой компонент был просто ставишь его на форму и настраиваешь параметры невидимости
У меня был пока жесткий не полетелsmile...
Извени название не помню

А еще в виде паса на какомто сайте валялся...

Это сообщение отредактировал(а) W_A_K_E - 30.1.2005, 01:29
PM MAIL   Вверх
ДЫМ
Дата 30.1.2005, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Если надо просто отключить клавишу Windows Logo в приложении, то вот, что я придумал. Проверял, - работает железно. smile

Выставляем KeyPreview=True
Код


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
// если нажали Windows Logo эмулируем нажатие Esc
if Key in [VK_LWIN,VK_RWIN]  then  keybd_event(VK_ESCAPE, 1, 0, 0);
end;


Если надо запретить реакцию на Win+D, то делаем так:
кидаем на форму ApplicationEvents, и пишем обработчик события OnDeactivate
Код

procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
  ShowWindow(Form1.Handle,SW_SHOW);
  SetForegroundWindow(Form1.Handle);
end;


Вдобавок можно отменить реакцию на минимизацию формы
(взято из DRKB)
Код


type
 TForm1 = class(TForm)
...
private
   { Private declarations }
   procedure WMSysCommand(var Msg: TWMSysCommand);
   message WM_SYSCOMMAND;
 public
   { Public declarations }
 end;
...

procedure TForm1.WMSysCommand;
begin
 if (Msg.CmdType <> SC_MINIMIZE) then inherited;
end;



PM MAIL WWW   Вверх
Zero
Дата 30.1.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата
Если надо запретить реакцию на Win+D, то делаем так:
кидаем на форму ApplicationEvents, и пишем обработчик события OnDeactivate

ДЫМ а я когда на форму кидаю ApplicationEvents, то у меня появляется такое:
Код

procedure TForm1.ApplicationEvents1ActionExecute(Action: TBasicAction;
 var Handled: Boolean);
begin

end;

Точнее сказать ApplicationEvents1ActionExecute, а не ApplicationEvents1Deactivate
И кстати, мне нужно именно запретить Win+D, а не для отдельных прог, чтобы не работала.
PM MAIL ICQ   Вверх
ДЫМ
Дата 31.1.2005, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Цитата

ДЫМ а я когда на форму кидаю ApplicationEvents, то у меня появляется такое:
Код 
Код


procedure TForm1.ApplicationEvents1ActionExecute(Action: TBasicAction;
var Handled: Boolean);
begin

end;  


Точнее сказать ApplicationEvents1ActionExecute, а не ApplicationEvents1Deactivate


Если я правильно понял, то ты дважды кликаешь на ApplicationEvents1, вот и появляется обработчик OnActionExecute. Надо в инспекторе объектов найти строчку OnDeactivate, на вкладке Events и кликать на ней.

А вообще-то, еще та оказалась задачка. Попробовал последнее средство - поставил глобальный хук на клавишу Windows и сочетание Win+D.

Одиночное нажатие блокируется начисто (что тоже немало), но для Win+D происходит следующее:
сначала все окна сворачиваются, а затем событие уже попадает в мою ловушку.
Выходит, что по-любому система сама сначала обрабатывает комбинацию Win+D, и только затем событие передается в ловушку.

Единственное, что можно сделать, так это восстановить все окна после нажатия Win+D. Получается такое мигание, сначала все сворачивается, а затем восстанавливается. Вот код:

Ловушка

Код

library DisableKey;

uses
 SysUtils,
 Classes,
 Windows,
 Messages;

const
{handle для ловушки}
 HookHandle: hHook = 0;

function Key_Hook(Code: integer; wParam: word;
 lParam: Longint): Longint; stdcall; export;

begin
 case wParam of
  // Клавиша 'D'
  68:
   // если одновременно нажаты клавиши Windows
   if (GetKeyState(VK_LWIN)<1) or (GetKeyState(VK_RWIN)<1) then
      // эмулируем нажатие 'D' (все окна снова восстанавливаются)
      keybd_event(68, 1, 0, 0);
  // одиночные нажатия клавиш Windows
  VK_LWIN,VK_RWIN:
     //эмулируем нажатие Esc
     keybd_event(VK_ESCAPE, 1, 0, 0);
 end;//case

 Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
end;

procedure Hook(lRun:Boolean); export; stdcall;
begin
if lRun then
 HookHandle:=SetWindowsHookEx(WH_KEYBOARD,@Key_Hook,HInstance,0)
else
 begin
  UnhookWindowsHookEx(HookHandle);
  HookHandle:=0;
 end;
end;

exports Hook;

begin
end.



А это вызов Dll в модуле формы

Код


...

implementation

{$R *.dfm}

// Ловушка
procedure Hook(lRun:Boolean) stdcall; external 'DisableKey' name 'Hook';


procedure TForm1.FormCreate(Sender: TObject);
begin
// устанавливаем ловушку
Hook(True);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// отключаем ловушку
Hook(False);
end;
...


Цитата

dsergey

Мне кажется, что все эти клавиши и сочетания можно отключить в реестре или в политиках 



Вот еще почитай (только работает это кажется после перезагрузки) :

Цитата

Запрещение горячих клавиш с Windows Logo

В конце статьи я приведу недокументированную системную политику, отключающую использование горячих клавиш Windows, которая поддерживается в Windows 9.x, Millenium, 2000 и XP.
Эта системная политика блокирует обработку клавиши "Windows Logo" в горячих клавишах. Однако после того как эта политика будет активизирована, одиночное нажатие клавиши "Windows Logo", которое вызывает меню "Пуск", будет отрабатываться. Также, необходимо отметить, что с этой включенной политикой нажатие "Windows Logo" в комбинациях клавиш будет игнорироваться, остальные нажатия будут обрабатываться как обычно.
Для ее активизации необходимо создать параметр "NoWinKeys" типа DWORD в следующей ветви системного реестра: "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" и установить его значение в 1. Установка параметра "NoWinKeys" в 0 или его отсутствие отключает политику.
Этот параметр может храниться в реестре Windows как в разделе HKEY_CURRENT_USER, так и в разделе HKEY_LOCAL_MACHINE и иметь область действия либо на весь "Компьютер" (Local Machine), либо на "Текущего пользователя" (Current User) соответственно.
Политика, имеющая область действия весь "Компьютер", хранящаяся в разделе системного реестра HKEY_LOCAL_MACHINE имеет приоритет над, политикой хранящейся в разделе HKEY_CURRENT_USER и имеющей область действия "Текущего пользователя".






PM MAIL WWW   Вверх
Zero
Дата 31.1.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Спасибо!!! Понял.
PM MAIL ICQ   Вверх
ДЫМ
Дата 5.2.2005, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1239 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.