Re[3]: Вставить чужое главное окно в своё приложение
От: Sl4v4  
Дата: 28.06.06 16:54
Оценка: +1
Хотелось бы ещё добавить, что если другая копия запускаемого приложения уже выполняется, то скорее всего программа найдёт её окно, а не той копии что нужно. Может удобнее запускать программу через CreateProcess, чтобы получть ID процесса, а потом перебирать окна, в поисках окон именно этого процесса. Наверное этот способ будет более гибким, т.к. в структуре STARTUPINFO можно указать не только способ отображения окна, но и много других параметров, которые могут оказаться полезными...
Re[2]: Вставить чужое главное окно в своё приложение
От: Andrew S Россия http://alchemy-lab.com
Дата: 30.06.06 06:52
Оценка: +1
T>>Уважаемые мастера, существует ли метод, при загрузке чужого приложения, например блокнота (моё приложение само запускает его), вставить результирующее окно (редактор текста), например на панельку, которая находится в моём приложении?

S>Запросто:

S>
S>SetParent(<дескриптор окна "редактор текста">,<дескриптор окна панельки>);
S>


The new parent window and the child window must belong to the same application

Так что не получится.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Вставить чужое главное окно в своё приложение
От: Andrew S Россия http://alchemy-lab.com
Дата: 30.06.06 07:20
Оценка: +1
AS>>

AS>> The new parent window and the child window must belong to the same application

AS>>Так что не получится.
S>Не надо верить всему что пишут в газетах. Лучше попробовать, и самому увидеть результат

Попробуйте. На всех доступных операционных системах. Я предпочитаю в таких случаях верить MSDN, нежели получаемым локальным результатам. Впрочем, дело ваше.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Вставить чужое главное окно в своё приложение
От: Thespian Украина  
Дата: 28.06.06 15:26
Оценка:
Уважаемые мастера, существует ли метод, при загрузке чужого приложения, например блокнота (моё приложение само запускает его), вставить результирующее окно (редактор текста), например на панельку, которая находится в моём приложении?
Заранее благодарен.
Re: Вставить чужое главное окно в своё приложение
От: Sl4v4  
Дата: 28.06.06 15:53
Оценка:
Здравствуйте, Thespian, Вы писали:

T>Уважаемые мастера, существует ли метод, при загрузке чужого приложения, например блокнота (моё приложение само запускает его), вставить результирующее окно (редактор текста), например на панельку, которая находится в моём приложении?


Запросто:
SetParent(<дескриптор окна "редактор текста">,<дескриптор окна панельки>);

Только нужно, естественно, дождаться создания окон запускаемого приложения. Да и покалеченное гланое окошко "жертвы", наверное, лучше потом спрятать из эстетических соображений =)
Re[2]: Вставить чужое главное окно в своё приложение
От: Thespian Украина  
Дата: 28.06.06 15:55
Оценка:
Здравствуйте, Sl4v4, Вы писали:

S>Здравствуйте, Thespian, Вы писали:


T>>Уважаемые мастера, существует ли метод, при загрузке чужого приложения, например блокнота (моё приложение само запускает его), вставить результирующее окно (редактор текста), например на панельку, которая находится в моём приложении?


S>Запросто:

S>
S>SetParent(<дескриптор окна "редактор текста">,<дескриптор окна панельки>);
S>

S>Только нужно, естественно, дождаться создания окон запускаемого приложения. Да и покалеченное гланое окошко "жертвы", наверное, лучше потом спрятать из эстетических соображений =)

А можно как-то отловить его появление? чтобы не мерцало для пользователя?
Re[3]: Вставить чужое главное окно в своё приложение
От: Sl4v4  
Дата: 28.06.06 16:19
Оценка:
Здравствуйте, Thespian, Вы писали:

T>А можно как-то отловить его появление? чтобы не мерцало для пользователя?


Отловить можно перехватом API-функций, но это слишком уж мудрёно получиться для такой задачки. Можно запускать его с помощью ShellExecute с параметром SW_HIDE, а дальше в цикле вызывать FindWindow(Ex) и ждать пока окно не будет создано...
Re[4]: Вставить чужое главное окно в своё приложение
От: Bork СССР  
Дата: 29.06.06 03:48
Оценка:
Здравствуйте, Sl4v4, Вы писали:

S> Хотелось бы ещё добавить, что если другая копия запускаемого приложения уже выполняется, то скорее всего программа найдёт её окно, а не той копии что нужно. Может удобнее запускать программу через CreateProcess, чтобы получть ID процесса, а потом перебирать окна, в поисках окон именно этого процесса. Наверное этот способ будет более гибким, т.к. в структуре STARTUPINFO можно указать не только способ отображения окна, но и много других параметров, которые могут оказаться полезными...


а WaitForInputIdle вместо перебора окон не лучше?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Вставить чужое главное окно в своё приложение
От: Sl4v4  
Дата: 29.06.06 04:22
Оценка:
Здравствуйте, Bork, Вы писали:

B>а WaitForInputIdle вместо перебора окон не лучше?


Перебор нужен для получения хэндла окна именно запущенной нами копии (если есть вероятность того, что другая копия уже запущена). Уверен что есть варианты и получше, но как сюда WaitForInputIdle пристроить — не понимаю. Тем более что есть условие: "чтобы не мерцало для пользователя".
Re[6]: Вставить чужое главное окно в своё приложение
От: Bork СССР  
Дата: 29.06.06 23:30
Оценка:
Здравствуйте, Sl4v4, Вы писали:

S>Здравствуйте, Bork, Вы писали:


B>>а WaitForInputIdle вместо перебора окон не лучше?


S>Перебор нужен для получения хэндла окна именно запущенной нами копии (если есть вероятность того, что другая копия уже запущена). Уверен что есть варианты и получше, но как сюда WaitForInputIdle пристроить — не понимаю. Тем более что есть условие: "чтобы не мерцало для пользователя".


WaitForInputIdle использовать для того что бы не крутить цикл типа while(FindWindow != NULL)

схема примерно такая...

запускаем дочерний процесс
CreateProcess // получаем хендл hProcess
WaitForInputIdle(hProcess, INFINITE) // ждем пока процесс полностью стартует
дочерний процесс запущен и готов к использованию
идем в msdn
http://msdn.microsoft.com/msdnmag/issues/02/07/CQA/
читаем как получить хендл нужного нам окна
делаем с этим окном что хотим
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Вставить чужое главное окно в своё приложение
От: Sl4v4  
Дата: 30.06.06 07:06
Оценка:
Здравствуйте, Bork, Вы писали:

B>WaitForInputIdle использовать для того что бы не крутить цикл

Да, теперь согласен. Мне просто почему-то казалось, что WaitForInputIdle не завершится если окно будут скрытым
Re[3]: Вставить чужое главное окно в своё приложение
От: Sl4v4  
Дата: 30.06.06 07:08
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>

AS> The new parent window and the child window must belong to the same application

AS>Так что не получится.
Не надо верить всему что пишут в газетах. Лучше попробовать, и самому увидеть результат
Re[3]: Вставить чужое главное окно в своё приложение
От: kero Россия  
Дата: 30.06.06 10:13
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS> The new parent window and the child window must belong to the same application

AS> Так что не получится.

Слегка раздвинем цитату:

"An application can use the SetParent function to set the parent window of a pop-up, overlapped, or child window.
The new parent window and the child window must belong to the same application."

Что можно понять и так, что к same application must belong именно child window, а к pop-up и overlapped сие не относится.
И потому вот это — может, и не локальный результат
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[3]: Вставить чужое главное окно в своё приложение
От: Thespian Украина  
Дата: 30.06.06 11:52
Оценка:
Здравствуйте, Andrew S, Вы писали:

T>>>Уважаемые мастера, существует ли метод, при загрузке чужого приложения, например блокнота (моё приложение само запускает его), вставить результирующее окно (редактор текста), например на панельку, которая находится в моём приложении?


S>>Запросто:

S>>
S>>SetParent(<дескриптор окна "редактор текста">,<дескриптор окна панельки>);
S>>


AS>

AS> The new parent window and the child window must belong to the same application

AS>Так что не получится.

Почему же, получилось, но только всё окно присутствует у меня на панельке. Его там можно перетягивать, масштабировать и т.д. Что не очень желательно.
Re[4]: Вставить чужое главное окно в своё приложение
От: Andrew S Россия http://alchemy-lab.com
Дата: 30.06.06 13:03
Оценка:
AS>> The new parent window and the child window must belong to the same application
AS>> Так что не получится.

K>Слегка раздвинем цитату:


K>"An application can use the SetParent function to set the parent window of a pop-up, overlapped, or child window.

K>The new parent window and the child window must belong to the same application."

Может и так. Но в любом случае под редактором текста я подразумевал только EDIT, а не весь блокнот (для меня это просто оказалось дикостью).

K>Что можно понять и так, что к same application must belong именно child window, а к pop-up и overlapped сие не относится.

K>И потому вот это — может, и не локальный результат

Может и так (хотя, на мой взгляд, цитата относится именно к параметрам SetParent, нежели к типу окон). Впрочем, в любом случае я не подразумевал оверлапед или попап окна под окном редактора текста, посему и привел указанную цитату.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Вставить чужое главное окно в своё приложение
От: Sl4v4  
Дата: 30.06.06 13:35
Оценка:
Здравствуйте, Thespian, Вы писали:

T> Почему же, получилось, но только всё окно присутствует у меня на панельке. Его там можно перетягивать, масштабировать и т.д. Что не очень желательно.

А зачем всё окно-то воровать? Я думал нужно только какое-то дочернее... В любом случае, можно же изменить его стиль на нужный, чтобы нельзя было, скажем, размер менять...
Re[5]: Вставить чужое главное окно в своё приложение
От: kero Россия  
Дата: 30.06.06 14:49
Оценка:
S>А зачем всё окно-то воровать? Я думал нужно только какое-то дочернее...

А вот с дочерним неприятностей долго ждать не придется.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[7]: Вставить чужое главное окно в своё приложение
От: kero Россия  
Дата: 30.06.06 22:29
Оценка:
Здравствуйте, Bork, Вы писали:

B>идем в msdn

B>http://msdn.microsoft.com/msdnmag/issues/02/07/CQA/
B>читаем как получить хендл нужного нам окна
B>делаем с этим окном что хотим

Очень ценю Paul DiLascia, но как раз CMainWindowIterator может и не сработать:
ведь он построен на EnumWindows и перебирает только top-level окна,
тогда как "нужное нам окно" может и не быть top-level !

Контрпример — все тот же

(Т.е. надо было GetDesktopWindow + EnumChildWindows).
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: Вставить чужое главное окно в своё приложение
От: Thespian Украина  
Дата: 04.07.06 09:58
Оценка:
Здравствуйте, Sl4v4, Вы писали:

S>Здравствуйте, Thespian, Вы писали:


T>> Почему же, получилось, но только всё окно присутствует у меня на панельке. Его там можно перетягивать, масштабировать и т.д. Что не очень желательно.

S>А зачем всё окно-то воровать? Я думал нужно только какое-то дочернее... В любом случае, можно же изменить его стиль на нужный, чтобы нельзя было, скажем, размер менять...

Не подскажете, как это сделать? Бо я что-то не могу врубиться в эти стили...
Re[6]: Вставить чужое главное окно в своё приложение
От: Sl4v4  
Дата: 04.07.06 10:05
Оценка:
Здравствуйте, Thespian, Вы писали:

T>Не подскажете, как это сделать? Бо я что-то не могу врубиться в эти стили...

SetWindowLong(<окно>, GWL_STYLE(или GWL_EXSTYLE), <новый слиль>);
Re[2]: Вставить чужое главное окно в своё приложение
От: Darkman_VLT Россия  
Дата: 12.07.06 21:43
Оценка:
Здравствуйте, Sl4v4, Вы писали:
S>Только нужно, естественно, дождаться создания окон запускаемого приложения. Да и покалеченное гланое окошко "жертвы", наверное, лучше потом спрятать из эстетических соображений =)

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Вставить чужое главное окно в своё приложение
От: dkotov  
Дата: 13.07.06 10:56
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>>>

AS>>> The new parent window and the child window must belong to the same application

AS>>>Так что не получится.
S>>Не надо верить всему что пишут в газетах. Лучше попробовать, и самому увидеть результат

AS>Попробуйте. На всех доступных операционных системах. Я предпочитаю в таких случаях верить MSDN, нежели получаемым локальным результатам. Впрочем, дело ваше.


Полностью согласен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.