Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.01 c
14-13413
Один из тех
2003-05-17 11:26
2003.06.05
Озабоченные всего мира, объединяйтесь!


1-13114
Apachi
2003-05-23 09:52
2003.06.05
Дочерние окна


14-13426
Ann
2003-05-19 13:34
2003.06.05
Коды


7-13488
Клавишник
2003-04-02 21:54
2003.06.05
Программирование СОМ -портов


3-13065
Tolik_tmp
2003-05-11 22:42
2003.06.05
Установка связи с Access





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский