Главная страница
    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.049 c
2-1143658583
Leshas
2006-03-29 22:56
2006.04.16
TabControl - поместить элементы на разные вкладки


1-1142366636
qb1k
2006-03-14 23:03
2006.04.16
RSA, криптоалгоритмы, keygen


1-1142236876
kyn66
2006-03-13 11:01
2006.04.16
Как напрвить действие на группу элементов?


15-1143085953
Pavluha
2006-03-23 06:52
2006.04.16
Компоненты XComm и XModem


2-1144168672
Volkodav
2006-04-04 20:37
2006.04.16
Можно ли заставить прогу включить комп например в 10:30?





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