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

Вниз

Handle чужого окна.   Найти похожие ветки 

 
Neznaika   (2003-04-04 11:49) [0]

Пользователь щёлкает мышью по чужому окну. Как получить его handle?


 
Игорь Шевченко ©   (2003-04-04 13:51) [1]

WindowFromPoint ?


 
Songoku ©   (2003-04-04 14:23) [2]

Удалено модератором
Примечание: Если отвечать, то в тему вопроса


 
Songoku ©   (2003-04-04 18:50) [3]

Удалено модератором
Примечание: Материться - в детсад


 
Songoku ©   (2003-04-04 18:51) [4]

Удалено модератором
Примечание: Offtopic


 
Songoku ©   (2003-04-04 18:59) [5]

Удалено модератором
Примечание: Тебе предупреждение


 
Songoku ©   (2003-04-04 20:20) [6]

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


 
Songoku ©   (2003-04-04 20:20) [7]

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


 
Song ©   (2003-04-05 10:29) [8]

Если щелчок по окну привёл к установлению фокуса ввода с этим окном, то можно GetFocus()


 
Songoku ©   (2003-04-05 10:44) [9]

Удалено модератором
Примечание: Отправляешься в ReadOnly на время


 
Diamond Cat ©   (2003-04-06 04:06) [10]


> Songoku ©
маразм

при потере (и при получении) фокуса твое окно получает сообщение wm_activate, в нем может содержаться( а может и не содержаться) хэндл окна получившего фокус, если хэндла нет то в реакции на wm_activate делай windowfrompoint


 
DVM ©   (2003-04-06 16:23) [11]

Да не мучайтесь вы поставьте хук на WH_SHELL там все что надо есть. Циклы, таймеры - это все извращения. В винде и так "одни циклы", зачем свои городить поверх них.


 
DVM ©   (2003-04-06 18:29) [12]


> Если Hook ставить то тогда придётся делать DLL.

Это не так! Длл не обязательно нужна именно с WH_SHELL.


> А в любой проге есть главный цикл, вот него можно и вставить
> проверку работу с мышкой.

Главный цикл сообщений? Я бы его не стал трогать, программа может замедлится сильно. К тому же в Delphi (VCL) до него так просто не добраться.



 
Snap ©   (2003-04-06 21:56) [13]

Да таких исходников по всему интернету тьма тьмущая, а вы "покожи"!


 
DVM ©   (2003-04-07 09:56) [14]

> Songoku
По мойму это раздел называется Win_API.
это ты правильно подметил.

Поэтому пример будет на WinApi.
Разбирайся. Это подправленный кусок из другой программы, но после небольшой доработки должен заработать.

Именно так панель задач (Windows TaskBar) отлавливает факт появления/исчезновения/изменения top-level окон.

program shelhookdemo;

uses

Windows,
Messages;

const

szName : PChar = "shellhookdemo";
szClass : PChar = "shellhookdemo_class";
magicDWord = $49474541;

RSH_DEREGISTER = 0;
RSH_REGISTER = 1;
RSH_REGISTER_PROGMAN = 2;
RSH_REGISTER_TASKMAN = 3;

HSHELL_ACTIVATESHELLWINDOW = 3;
HSHELL_WINDOWCREATED = 1;
HSHELL_WINDOWDESTROYED = 2;
HSHELL_WINDOWACTIVATED = 4;
HSHELL_GETMINRECT = 5;
HSHELL_REDRAW = 6;
HSHELL_TASKMAN = 7;
HSHELL_LANGUAGE = 8;

cOsUnknown = -1;
cOsWin95 = 0;
cOsWin98 = 1;
cOsWin98SE = 2;
cOsWinME = 3;
cOsWinNT35 = 4;
cOsWinNT4 = 5;
cOsWin2000 = 6;
cOsXP = 7;

var
wc : TWndClassEx;
hMainWnd : HWND;
Mesg :TMsg;
WM_SHELLHOOK : Integer;

function MainWndProc(wnd:HWND; Msg:Integer; wParam:wParam; lParam:lParam):lResult; stdcall;
begin
if Msg = WM_SHELLHOOK then
begin
case wParam of
HSHELL_WINDOWCREATED: ;
HSHELL_WINDOWDESTROYED: ;
HSHELL_WINDOWACTIVATED: ;
HSHELL_REDRAW: ;
end;
end;
case Msg of
WM_CREATE:
begin
result:=DefWindowProc(Wnd, Msg, wParam, lParam);
end;
WM_DESTROY :
begin
Result:=0;
postquitmessage(0);
exit;
end;
else Result:=DefWindowProc(Wnd, Msg, wParam, lParam);
end;
end;
begin
wc.cbSize:=sizeof(wc);
wc.lpfnWndProc:=@MainWndProc;
wc.hInstance:=hInstance;
wc.lpszClassName:=szClass;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);

if RegisterClassEx (wc) = 0 then
begin
MessageBox (0, "Error!", "Error!", MB_OK);
exit;
end;

hMainWnd:=CreateWindowEx(
WS_EX_TOOLWINDOW,
szClass,
szName,
WS_POPUP,
0,0,0,0,0,0,
hInstance,
nil
);
if hMainWnd = 0 then
begin
MessageBox (0, "Error!", "Error!", MB_OK);
UnregisterClass(szClass, hInstance);
exit;
end;

WM_SHELLHOOK := RegisterWindowMessage("SHELLHOOK");
if WM_ShellHook<>0 then
begin
RegisterShellHook(0, 1);
if GetOperatingSystemType <= cOsWinMe then
RegisterShellHook(hMainWnd, RSH_REGISTER)
else
RegisterShellHook(hMainWnd, RSH_REGISTER_TASKMAN);
end;

while GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;

end.


 
DVM ©   (2003-04-07 09:59) [15]

Вот еще забыл:
procedure RegisterShellHook(Wnd:hWnd;n:dword); stdcall; external "shell32.dll" index 181;


 
Neznaika   (2003-04-07 11:35) [16]

Всем спасибо.


 
DVM ©   (2003-04-07 20:16) [17]

Форум глючит. В этой ветке снаружи больше сообщений чем внутри



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

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

Наверх




Память: 0.51 MB
Время: 0.021 c
8-13331
[MGS]~Vic
2003-02-12 14:07
2003.06.05
MDL


14-13394
nevalex
2003-05-13 15:41
2003.06.05
Как сделать чтоб работала моя процедура


3-13022
Dimaz-z
2003-05-16 12:02
2003.06.05
Как выстроить записи в базе данных по алфавиту? Помогите!!!


1-13313
Юрий Федоров
2003-05-23 10:39
2003.06.05
навесить обычную процедуру на обработчик события


3-13100
Pat
2003-05-18 23:24
2003.06.05
Опять Access+ADO под ХР