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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> наболевшая тема alt+tab 
:(
    Опции темы
ProgrammistDelphi
Дата 13.5.2005, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хочу пример, если он есть, как избавиться от сочетания клавишь alt+tab во всей системе. Можно с помощью ловушки. Плиз помогите никак не могу отловить это сочетание.
PM MAIL   Вверх
R0nin
Дата 31.7.2005, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 31.7.2005
Где: Минск (Белоруссия )

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



alt заблокируй и все smile
--------------------
Фишка есть во всем, а если фишки нет, то это и есть фишка
PM MAIL ICQ   Вверх
Albinos_x
Дата 31.7.2005, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

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



Код

SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0); // в этом режиме комбинации клавиш Alt+Tab и Ctrl+Alt+Del не работают
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);// отключение режима


включает режим экранной заставки


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Rrader
Дата 1.8.2005, 03:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Цитата

включает режим экранной заставки

И не работает в WinNT smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Song
Дата 1.8.2005, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



ProgrammistDelphi
Через низкоуровневый хук.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
ФЫГ
Дата 5.8.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



SetWindowsHookEx не поможет по-любому
PM MAIL   Вверх
Song
Дата 8.8.2005, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



ФЫГ
пробовал?


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
ФЫГ
Дата 8.8.2005, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да

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


Sysman.ru
***


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

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



Ну давай так: я перехватываю Alt-Tab хуком, а ты получаешь в репу минус за голословные утверждения.
Идёт?


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Girder
Дата 9.8.2005, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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




 ! 
 
Вот только давайте... без признаний в любви! :)
А то оба получите по репе :)


PS: Без обид! smile


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
ФЫГ
Дата 9.8.2005, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Song а давай! я те и хук напишу, надо?
Добавлено @ 18:42
да, будешь не прав, напишешь "я-глюпий", а то я то репу менять не могуsmile...
PM MAIL   Вверх
ФЫГ
Дата 9.8.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Song вот dll с хуком - пробуй
Код

library HkLib;
{//This library contains functions to help implement
 system keyboard hook.
//}
uses
  Windows;

//-----------Data Structure to be shared------------//
type THookData=record
       Handle,Msg,
       hHook,Instances:Cardinal;
     end;
     PHookData=^THookData;
const
//--------Constants (2 stupid strings)---------------------//
   MutexName='KTKeyboardHookLibraryVersion1.00UniqueMutexName';
   MemShareName='KTKHLV100MEMFILE';
//------------------Variables-------------------------//
var
   MyMutex, //Synchronization Mutex Handle
   MemShare:Cardinal;  //Memory-Mapped File handle
   MyData:PHookData;   //Library-Shared Data
//-----------------Keyboard Hook Callback---------------//
function KbdHook(hCode,wParam:LongInt;lParam:LongInt):Longint;stdcall;
var
a:smallint;
begin
     try
       WaitForSingleObject(MyMutex,INFINITE); //Synchronize
       if (MyData^.Msg<>0) and (hCode=HC_ACTION) then PostMessage(MyData^.Handle,MyData^.Msg,wParam,lParam);
       a:=GetKeyState(VK_MENU);

{!!!!!!here!!!!!!}
       if (MyData^.hHook <> 0) and not ((a and $80000000>0) and (wParam=VK_TAB) and (hCode=HC_ACTION)) then Result:=CallNextHookEx(MyData^.hHook,hCode,wParam,lParam)
          else Result:=0;


     finally ReleaseMutex(MyMutex);
     end;
end;
//-------------Function to set hook----------------//
function HookKeyboard(Hwnd,MsgID:Cardinal):LongInt;stdcall;
begin
     try
     WaitForSingleObject(MyMutex,INFINITE); //Synchronize
     if MyData^.hHook<>0 then begin
        Result:=0;ReleaseMutex(MyMutex);Exit;
     end;
     Result:=SetWindowsHookEx(WH_KEYBOARD,@KbdHook,HInstance,0);
     if Result<>0 then begin
        MyData^.hHook:=Result;
        MyData^.Msg:=MsgID;
        MyData^.Handle:=Hwnd;
     end;
     finally ReleaseMutex(MyMutex);
     end;
end;
//------------------Function to remove Hook----------------//
function UnhookKeyboard:Boolean;stdcall;
begin
     try
      WaitForSingleObject(MyMutex,INFINITE);
      Result:=True;
      if MyData^.hHook=0 then begin
         ReleaseMutex(MyMutex);Exit;
      end;
      Result:=UnhookWindowsHookEx(MyData^.hHook);
      if Result=True then begin
         MyData^.hHook:=0; MyData^.Msg:=0; MyData^.Handle:=0;
      end;
     finally ReleaseMutex(MyMutex);
     end;
end;
//-----------Function to determine, whether we are already hooked-----------//
function Hooked:Boolean;stdcall;
begin
     WaitForSingleObject(MyMutex,INFINITE);
     Result:=(MyData^.hHook<>0);
     ReleaseMutex(MyMutex);
end;
//=========================DLL Mechanics======================//
//--------------Initialization Code--------------//
procedure EnterDLL;stdcall;
var FirstInstance:Boolean;
begin
//Get a Mutex for synchronization
     MyMutex:=CreateMutex(nil,True,MutexName);
//Open Memory Share
     MemShare:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False,PChar(MemShareName));
     FirstInstance:=(MemShare=0);
//If cannot open, then create
     if MemShare=0 then MemShare:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(THookData),MemShareName);
     if MemShare<>0 then begin
        //we are opened for the first time...
        MyData:=MapViewOfFile(MemShare,FILE_MAP_ALL_ACCESS,0,0,0);
        if Firstinstance then with MyData^ do begin
           Handle:=0;Msg:=0;hHook:=0;Instances:=0;
        end;
        MyData^.Instances:=MyData^.Instances+1;
     end;
     ReleaseMutex(MyMutex);
end;
//--------------DeInitialization Code---------------//
procedure ExitDLL;stdcall;
begin
    try
//Synchronize
      WaitForSingleObject(MyMutex,INFINITE);
      MyData^.Instances:=MyData^.Instances-1;
      if (MyData^.Instances=0) then begin
//Close shared memory file and synchronization mutex
         UnmapViewOfFile(MyData);
         CloseHandle(MemShare);
         CloseHandle(MyMutex);
       end;
     finally ReleaseMutex(MyMutex);
     end;
end;
//-----------------DllEntryPoint----------//
procedure LibraryProc(Reason: Integer);
begin
 case Reason of
   DLL_PROCESS_DETACH:ExitDll;
   DLL_PROCESS_ATTACH:EnterDll;
 end;
end;
//-----------------Exports...-----------------//
exports HookKeyboard,UnhookKeyboard,Hooked;
//--------------------------------------------------------//
begin
EnterDLL;
DllProc:=@LibraryProc;
end.

библиотека старющая, из учебного приложения Keylog, я его отсюда и скачал. Изменена одна строка, чтоб альт+таб не допускался - она отмечена

Это сообщение отредактировал(а) ФЫГ - 9.8.2005, 21:51
PM MAIL   Вверх
Song
Дата 9.8.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



ФЫГ


Цитата(Song @ 1.8.2005, 10:55)
ProgrammistDelphi
Через низкоуровневый хук.




--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Song
Дата 10.8.2005, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



На вот:

DLL:

Код

library AltTab;

// © Song

uses
  SysUtils, Windows,
  Classes;

type PKbDLLHookStruct = ^KbDLLHookStruct;
     KbDLLHookStruct = record
      vkCode: DWORD;
      ScanCode: DWORD;
      Flags: DWORD;
      Time: DWORD;
      dwExtraInfo: Pointer;
     End;

Var SysHook: HHook = 0;

Function LowLevelProc(Code: Integer; WParam: LongInt; LParam: LongInt): LongInt; stdcall;
Begin
 IF Code = HC_ACTION then
  With PKbDLLHookStruct(LParam)^ Do
   IF not ((vkCode = VK_TAB) and (Flags and (KF_ALTDOWN shr 8) <> 0)) then
    Result:=CallNextHookEx(SysHook,Code,WParam,LParam);
End;

Procedure SetRemoveHook(Flag:Boolean); export; stdcall;
Const WH_KEYBOARD_LL =  13;
Begin
 IF Flag then SysHook:=SetWindowsHookEx(WH_KEYBOARD_LL,@LowLevelProc,HInstance,0) Else
  Begin
   UnhookWindowsHookEx(SysHook);
   SysHook:=0;
  End; {IF}
End;

exports SetRemoveHook;

end.



Project:

Код

unit Runner;

interface

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

type MyProcType = procedure(Flag: Boolean); stdcall;

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

var
  Form1: TForm1;
  HDLL: HWND;

  
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var Hook: MyProcType;
Begin
 @Hook:=nil;
 HDLL:=LoadLibrary(PChar('AltTab.dll'));
 IF HDLL > HINSTANCE_ERROR then
  Begin
   @Hook:=GetProcAddress(HDLL,'SetRemoveHook');
   Hook(True);
  End else ShowMessage('Îøèáêà çàãðóçêè DLL.');
End;

procedure TForm1.Button2Click(Sender: TObject);
Var Hook: MyProcType;
Begin
 IF HDLL > HINSTANCE_ERROR then
  Begin
   @Hook:=GetProcAddress(HDLL,'SetRemoveHook');
   Hook(False);
  End; {IF}
End;

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

end.



--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
ФЫГ
Дата 10.8.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Song извини, я не прав
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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