Возможен ли сабж? Т.е. например по какому-то событию моя программа посылает например в блокнот какой-нибудь текст, при этом окно моей программы _не перестает_ быть активным.
keybd_event работает для активного окна, не подходит. Пробовал посылать сообщения WM_KEYDOWN, WM_CHAR, WM_KEYUP — не получается (пробовал с блокнотом, не пишется в нем ничего), хотя если в винамп посылать сообщения о нажатии кнопок "z", "x", "c", то винамп реагирует.
Здравствуйте, Baator, Вы писали:
B>Возможен ли сабж? Т.е. например по какому-то событию моя программа посылает например в блокнот какой-нибудь текст, при этом окно моей программы _не перестает_ быть активным.
B>keybd_event работает для активного окна, не подходит. Пробовал посылать сообщения WM_KEYDOWN, WM_CHAR, WM_KEYUP — не получается (пробовал с блокнотом, не пишется в нем ничего), хотя если в винамп посылать сообщения о нажатии кнопок "z", "x", "c", то винамп реагирует.
А блокноту не один фиг, какую клавишу ты ему посылаешь!?
Сообщение нужно посылать текстовому полю блокнота!
Для вставки текста в чужой TextBox, можно вызывать, например EM_REPLACESEL, WM_SETTEXT:
Пример: текст будет вставлен туда, где находится каретка
Здравствуйте, sokolprog, Вы писали:
S>А блокноту не один фиг, какую клавишу ты ему посылаешь!? S>Сообщение нужно посылать текстовому полю блокнота! S>Для вставки текста в чужой TextBox, можно вызывать, например EM_REPLACESEL, WM_SETTEXT:
S>Пример: текст будет вставлен туда, где находится каретка S>::SendMessage(hwndEdit, EM_REPLACESEL, /*Undo?*/FALSE,(LPARAM)"MyText");
Понял. Спасибо.
Очень не хотел спрашивать, но действительно не понимаю почему не работает этот код для поиска контрола в котором находится каретка:
Var
wh: HWND;
TInfo: TGUITHREADINFO;
PID: Integer;
Begin
wh := FindWindow('Notepad', nil); { Окно находит }
GetWindowThreadProcessId(wh, @PID); { PID процесса получает }
GetGUIThreadInfo(PID, TInfo); { Вот тут какая-то муть, структура TInfo заполняется "не правильно" }
SendMessage(TInfo.hwndCaret, WM_SETTEXT, 0, Integer(PChar('Test!'))){ => текст никуда не пишется : ( }
End;
Или я выбрал не правильный способ для узнавания хендла контрола с кареткой?
Здравствуйте, Аноним, Вы писали: А>Очень не хотел спрашивать, но действительно не понимаю почему не работает этот код для поиска контрола в котором находится каретка:
[] А>Или я выбрал не правильный способ для узнавания хендла контрола с кареткой?
Ваш пример работает, если только notepad — активное окно. Если не активное — не работает, а мне именно это и нужно. В смысле чтоб работало когда окно не активно : )
Здравствуйте, Аноним, Вы писали:
А>Ваш пример работает, если только notepad — активное окно. Если не активное — не работает, а мне именно это и нужно. В смысле чтоб работало когда окно не активно : )
ChildINFO wi;
EnumChildWindows(hwndFore, EnumChildProc, (LPARAM)&wi);
HWND hwndEdit=wi.hTarget; // тут хендл Edit'а
::SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM)"Всего-то нужно было изменить пару строчек!!!");
... и усё будет работать!
Re[6]: Передача нажатия клавиш в нективное окно.
От:
Аноним
Дата:
13.02.04 14:08
Оценка:
Здравствуйте, sokolprog, Вы писали:
А>>Ваш пример работает, если только notepad — активное окно. Если не активное — не работает, а мне именно это и нужно. В смысле чтоб работало когда окно не активно : )
S>Так, ёшкар-ола, замени некоторые вызовы...
: )
Решение состоит в том чтобы перебором среди child окон найти окно класса Edit. А если таких окно несколько? Как узнать на каком из них установлен фокус ввода, или был установлен до того как parent окно стало не активным?
Здравствуйте, Аноним, Вы писали: А>Решение состоит в том чтобы перебором среди child окон найти окно класса Edit. А если таких окно несколько? A>Как узнать на каком из них установлен фокус ввода.
Было в примере — GetFocus! Только одно child окно может иметь фокус ввода!
A>или был установлен до того как parent окно стало не активным?
А как узнать сколько раз загорался красный свет светофора, находящегося в г. Урюпинск, в прошлую пятницу с 12:00 до 19:33:42? ... Храни хендл последнего edit'а в какой нибудь переменной!
Если окно не активно, то оно не имеет фокуса ввода. Но EM_REPLACESEL будет работать и без фокуса ввода.
И интересно, с каких это пор, Notepad стал иметь несколько Edit'ов?
Re[8]: Передача нажатия клавиш в нективное окно.
От:
Аноним
Дата:
14.02.04 08:35
Оценка:
Здравствуйте, sokolprog, Вы писали:
Так, или я совсем тупой или мы друг друга не понимаем. : ) GetFocus даст мне хэндл окна (edit'a) только если parent окно этого edit'a активно, так? Если так, то мне не подходит, я должен предавать текст в неактивное овно.
EM_REPLACESEL будет работать и без фокуса, но ему надо указать хендл того окна куда передать текст. Допустим
(а это так и есть : ) мне надо передавать текст в окно имеющее несколько child окон класс edit. Вопрос: есть ли возможность узнать на каком из этих едитов был фокус ввода когда parent окно было активно? Или по-другому если parent окно снова станет активным, то фокус ввода установится в определенный edit, на котором он (фокус) и был установлен в последний момент до того как окно пересало быть активным. Можно ли узнать на каком контроле он был установлен, не делая parent окно активным. Если что, то можно просто сказать кури такие-то и такие функции и будет тебе счастье... : )
S>И интересно, с каких это пор, Notepad стал иметь несколько Edit'ов?
Notepad я для примера взял, м/б не совсем удачный пример получился.
Здравствуйте, Аноним, Вы писали: >Можно ли узнать на каком контроле он был установлен, не делая parent окно активным.
Хмммм…..незнаю… — но как-нибудь очень просто.
Re[10]: Передача нажатия клавиш в нективное окно.
От:
Аноним
Дата:
16.02.04 06:08
Оценка:
Здравствуйте, sokolprog, Вы писали:
>>Можно ли узнать на каком контроле он был установлен, не делая parent окно активным. S>Хмммм…..незнаю… — но как-нибудь очень просто.
Спасибо, что уделил свое время, ситуция немного прояснилась. : ) Буду курить дальше...
Здравствуйте, Baator, Вы писали:
B>Возможен ли сабж? Т.е. например по какому-то событию моя программа посылает например в блокнот какой-нибудь текст, при этом окно моей программы _не перестает_ быть активным.
B>keybd_event работает для активного окна, не подходит. Пробовал посылать сообщения WM_KEYDOWN, WM_CHAR, WM_KEYUP — не получается (пробовал с блокнотом, не пишется в нем ничего), хотя если в винамп посылать сообщения о нажатии кнопок "z", "x", "c", то винамп реагирует.
Здравствуйте, sokolprog, Вы писали:
S>Здравствуйте, Аноним, Вы писали: >>Можно ли узнать на каком контроле он был установлен, не делая parent окно активным.
S>Хмммм…..незнаю… — но как-нибудь очень просто.
Не думаю что это будет просто.
Re: Передача нажатия клавиш в нективное окно.
От:
Аноним
Дата:
10.11.08 08:53
Оценка:
B>Возможен ли сабж? Т.е. например по какому-то событию моя программа посылает например в блокнот какой-нибудь текст, при этом окно моей программы _не перестает_ быть активным. B>keybd_event работает для активного окна, не подходит. Пробовал посылать сообщения WM_KEYDOWN, WM_CHAR, WM_KEYUP — не получается (пробовал с блокнотом, не пишется в нем ничего), хотя если в винамп посылать сообщения о нажатии кнопок "z", "x", "c", то винамп реагирует.
Пробовали чем? SendMessage или PostMessage? Лучше именно Post.
Здравствуйте, Аноним, Вы писали:
B>>Возможен ли сабж? Т.е. например по какому-то событию моя программа посылает например в блокнот какой-нибудь текст, при этом окно моей программы _не перестает_ быть активным. B>>keybd_event работает для активного окна, не подходит. Пробовал посылать сообщения WM_KEYDOWN, WM_CHAR, WM_KEYUP — не получается (пробовал с блокнотом, не пишется в нем ничего), хотя если в винамп посылать сообщения о нажатии кнопок "z", "x", "c", то винамп реагирует. А>Пробовали чем? SendMessage или PostMessage? Лучше именно Post.
Да ему уже всё равно 4 года назад дело было. Вы лучше мне помогите)
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Здравствуйте, NewProg, Вы писали:
NP>>Да ему уже всё равно 4 года назад дело было. Вы лучше мне помогите)
LT>Чем же тут помочь? LT>Откуда хендл окна? Что значит "pid и tid программы скрыт"? LT>Т.е., что возвращает GetLastError.
LT>И, судя по "Lineage II" там нет окон, а есть к.л. DirectX, LT>и искать надо к.л. DirectInput.
В "Lineage II" есть такая составляющая часть, называется GameGuard. На некоторых серверах она не используется (клиентом не запускается). В таком случае мой код _работает_!
Когда же GG используется, если посмотреть Spy++ то увидим "Process/Thread ID: Unknown"
П.С. буду курить DirectInput...