Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.012 c
9-12986
Lamer86
2002-07-09 16:54
2003.06.05
Жуткие тормоза при прорисовке объекта


1-13175
zeppelin
2003-05-26 16:40
2003.06.05
Поиск в TList


9-12993
Jedi Knight
2002-12-26 17:33
2003.06.05
Rebellion 2


6-13359
Is
2003-03-13 18:35
2003.06.05
Кто подскажет ф-цию аналог команды net send


3-13091
Grey_g
2003-05-15 09:48
2003.06.05
Активная запись




   Наверх