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

Вниз

Handle поля ввода чужого приложения   Найти похожие ветки 

 
Nostradamus   (2006-01-29 18:19) [0]

Имеется следующая проблема: нужен хэндл поля ввода чужого приложения, причем именно того контрола который последний имел фокус перед тем как юзер переключился на мою программу. Это должно работать с любой чужой прогой и любым контролом ввода текста т.е. Edit, Memo, Rich Edit, ComboBox и т.д.
Пробовал ставить хук на EN_KILLFOCUS и на WM_COMMAND - что-то ловилось, но толко не то что нужно :( Пробовал ставит следуюшие хуки: WH_CALLWNDPROCRET, WH_CALLWNDPROC, WH_GETMESSAGE, WH_MSGFILTER, WH_SYSMSGFILTER. Что характерно с WM_COMMAND оно таки работало, но только с котролами моей программы...
Такое ощущение, что я близок к правилному решению, но я к сожалению не могу доперет, что нужно изменить :(
Плюс когда я так делаю я не знаю как определить тип контрола хэндл которого я получаю
.

Заранее благодарен.

Вот как я делал:

function ShellHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM): LRESULT; stdcall;
var
pMsg : PHookMsg;
begin
pMsg := Pointer(ParamL);
if (pMsg^.Msg = WM_COMMAND)  then
 SendMessage(Data^.AppWnd, WM_USER, ParamW, pMsg^.LPARAM);
Result := CallNextHookEx(Data^.OldHook, Code, ParamW, ParamL)
end;

function SetShellHook(Wnd: HWND): BOOL; stdcall;
begin
 if Data <> nil then
 begin
   Data^.AppWnd := Wnd;
   Data^.OldHook := SetWindowsHookEx(WH_CALLWNDPROCRET, @ShellHook, HInstance, 0);
   Result := Data^.OldHook <> 0
 end
 else Result := False
end;


 
Nostradamus   (2006-01-30 13:11) [1]

Блин, не ужели нет ни у кого никаких идей?

После долгих проб и ошибок решил сделать по-другому:
Поставил хук WH_SHELL и ловлю им когда активируется чужое окно, там уже можно с помощью FindWindowEx или EnumChildWindows найти нужный мне контрол. Только теперь проблема определить
1. Поле ввода найденый котрол или нет и
2. Иммет ли он сейчас фокус

Думаю насчет фокуса должно получитсиа если буду хуком ловить WM_SETFOCUS,
а вот как определить действително ли контрол для ввода текса - ума не приложу.

Подскажите пожалуйста как решить эту проблему.
Буду рад если меня пошлют в MSDN :)

P.S. Может я не понятно объяснил задачу?


 
kaZaNoVa ©   (2006-01-30 13:14) [2]


> 1. Поле ввода найденый котрол или нет и

может тип какой-нить глянуть?


 
Nostradamus   (2006-01-30 13:20) [3]

В том то и дело, что не понятно куда глядеть :(
Можно получить имя класса (GetClassName), но оно ничего не даст :(


 
Игорь Шевченко ©   (2006-01-30 13:29) [4]

AttachThreadInput + GetFocus не поможет ?


 
Nostradamus   (2006-01-30 13:40) [5]

К сожалению не могу сейчас попробовать, но звучит не плохо.
Спасибо. Как сделаю - отпишусь получилось или нет.


 
Nostradamus   (2006-01-30 13:44) [6]

Остаётся вопрос как определить тип контрола?


 
Игорь Шевченко ©   (2006-01-30 13:50) [7]


> как определить тип контрола?


GetClassName.

А если не секрет, в связи с чем такая задача возникла ?


 
Nostradamus   (2006-02-01 12:37) [8]

Огромное спасибо!!! AttachProcessInput оказалось именно то, что нужно.
Определять тип контрола мне уже не нужно - я придумал как без этого обойтись.

> А если не секрет, в связи с чем такая задача возникла ?

Делаю программу которая должна ускорять ввод часто повторяющихся кусков текста, т.е. как скажем в Ворде автозамена и шаблоны, только должно работать везде где можно вводить текст.



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

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

Наверх





Память: 0.46 MB
Время: 0.037 c
1-1142331796
Экспериментатор
2006-03-14 13:23
2006.04.16
Как отправить Email с аттачем


15-1143444399
zeff
2006-03-27 11:26
2006.04.16
Сохранить иконку с новыми параметрами


2-1143798876
KyRo
2006-03-31 13:54
2006.04.16
Фильтрация


2-1144232434
Std
2006-04-05 14:20
2006.04.16
РАбота с несколькими формами


1-1142417495
КиТаЯц
2006-03-15 13:11
2006.04.16
OpenOffice вместо MSExcel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский