Форум: "Начинающим";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];
ВнизОтослать сообщение окну... Найти похожие ветки
← →
SIV500 (2010-06-22 18:03) [0]Народ привет. Подскажите пожалуйста как отослать сообщения окну другой програмы, после того как я поменял родителя етого окна на свою форму.
Вот так вот меняю родителя:
///
var
wHandle : THandle;
begin
wHandle := FindWindow("OpWindow" ,nil);
Windows.SetParent(wHandle,self.Handle);
////
Не меняя родителя отсылал сообщение так: PostMessage(CurrentHandle, WM_KEYDOWN, VK_RIGHT, 0); Все работало.
/// CurrentHandle - заранее нахожу окно
← →
Вотведь (2010-06-22 18:31) [1]
PostMessage(wHandle, WM_KEYDOWN, VK_RIGHT, 0);
?
← →
SIV5000 (2010-06-22 20:10) [2]Пробовал так, но не работает. (не находит окна)
← →
Юрий Зотов © (2010-06-22 21:12) [3]Похоже, что при переназначении родителя изменился стиль окна, поэтому оно было пересоздано и получило новый хэндл. Соответственно, по старому оно уже не находится и надо искать снова (FindWindowEx)
← →
Leonid Troyanovsky © (2010-06-23 08:39) [4]
> SIV500 (22.06.10 18:03)
> Народ привет. Подскажите пожалуйста как отослать сообщения
> окну другой програмы, после того как я поменял родителя
..
> Windows.SetParent(wHandle,self.Handle);
Не надо так делать.
--
Regards, LVT.
← →
SIV5000 (2010-06-23 08:40) [5]
> Не надо так делать.
Почему?
← →
Вотведь (2010-06-23 08:47) [6]>>SIV5000 (23.06.10 08:40) [5]
>>Почему?
По качану.
В справке написано "The new parent window and the child window must belong to the same application" не для тебя?
Или ты, типа, кулхацкер?
← →
Leonid Troyanovsky © (2010-06-23 08:50) [7]
> SIV5000 (23.06.10 08:40) [5]
Потому, что чужое окно, по всей видимости, не child,
и не получит то, что может быть ему необходимо.
См. также http://support.microsoft.com/kb/89563
--
Regards, LVT.
← →
Leonid Troyanovsky © (2010-06-23 09:00) [8]
> Вотведь (23.06.10 08:47) [6]
> window must belong to the same application" не для тебя?
Уже давно, IMHO, не написано.
Но, все равно, глюков будет немало.
--
Regards, LVT.
← →
Игорь Шевченко © (2010-06-23 18:34) [9]http://www.transl-gunsmoker.ru/2010/06/postmessage.html
← →
Leonid Troyanovsky © (2010-06-23 18:41) [10]
> Игорь Шевченко © (23.06.10 18:34) [9]
Кста:
> Во-вторых, даже если вам удастся отправить нужные сообщения
> ввода в очередь ввода целевого окна, это не установит/обновит
> модификаторы клавиатуры (shift states). Когда обработчик
> клавиатурного сообщения в этом окне вызовет функцию GetKeyState
> или GetAsyncKeyState, то он увидит "настоящее" состояние
> дел, а не фальшивое, которое вы хотели ему подсунуть, отправляя
> сообщения.
можно путем AttachThreadInput установить требуемое состояние,
но, успеха оно, все равно, не принесет.
Foreground or not foreground потоки обрабатывают очереди
ввода по-разному.
--
Regards, LVT.
← →
Игорь Шевченко © (2010-06-23 18:45) [11]
> Foreground or not foreground потоки обрабатывают очереди
>
> ввода по-разному.
Поделись источником знаний
← →
Leonid Troyanovsky © (2010-06-23 19:14) [12]
> Игорь Шевченко © (23.06.10 18:45) [11]
> Поделись источником знаний
Жизненная опытность ;)
Путем личных наблюдений.
--
Regards, LVT.
← →
В школу! (2010-06-23 21:46) [13]
> Жизненная опытность ;)
> Путем личных наблюдений.
"Только мы заявляем прямо - это полная ерунда".
Для каждого потока существует виртуализированная очередь ввода, про которую недвусмысленно и без обиняков пишет Рихтер, Великий и Ужасный.
Если бы background и foreground потоки обрабатывали бы сообщения от RIT по-разному, эта концепция не стоила бы выеденного гроша.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c