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

Вниз

Как открывать любые приложения (Win32) в окне моего приложения?   Найти похожие ветки 

 
Yr2   (2002-12-02 14:46) [0]

Можно ли принципиально любые приложения (Win32) открывать в окне моего приложения? То есть как бы глобально "перенаправить" desktop Wundows в окно (форму) моей программы?


 
Игорь Шевченко   (2002-12-02 15:23) [1]

Нельзя :-)


 
Yr2   (2002-12-02 15:58) [2]

Грустно... Хорошо, попробую сузить задачу. Можно ли в окне моего "материнского" приложения открывать другие приложения (запускать exe-файлы), написанные же мною? То есть это не MDI-приложение, не простые формы, не потоки... Это - новые процессы Windows.
Если да, то что для этого нужно учесть?


 
Игорь Шевченко   (2002-12-02 16:06) [3]

Нельзя :-)


 
Yr2   (2002-12-02 16:47) [4]

Игорь, я, конечно, изначально Вас уважаю как специалиста и благодарен уже только за то, что Вы единственный, кто откликнулся. Но, Ваш ответ напоминает Эллочку-Людоедку из общеизвестного фильма, которая знала только 30 слов... А нельзя ли расширить ответ? То есть рассказать подробнее. Ведь сама Windows это "как-то" делает!?


 
Игорь Шевченко   (2002-12-02 18:39) [5]

Сама Windows этого не делает.


> изначально Вас уважаю как специалиста и благодарен уже только
> за то, что Вы единственный, кто откликнулся. Но, Ваш ответ
> напоминает Эллочку-Людоедку из общеизвестного фильма, которая
> знала только 30 слов...


Я и 30-то не знаю :-)

Лекцию об устройстве Windows читать ? Не буду. Если очень хочется, то можно почитать книги Петцольда, Рихтера и иже с ними.
На преподавание, к сожалению, нет ни времени, ни сил.

С уважением,


 
Yr2   (2002-12-03 21:42) [6]

Я всё-таки достиг положительных результатов. Сделать это можно следующим образом:
кидаете на форму кнопку Button1 и Panel1, в которой будет имитироваться наш "десктоп". По нажатию на кнопку запускается процедура Button1Click. Заданное приложение (exe-файл) запускается и отображается только в рамках панели Panel1.


Procedure TForm1.Button1Click(Sender: TObject);

VAR h : THANDLE;

begin
WinExec("C:\Program Files\Windows NT\Accessories\ImageVue\kodakimg.exe", SW_HIDE);
// или WinExec("C:\Program Files\Adobe\Acrobat 4.0\Reader\AcroRd32.exe, SW_HIDE);

h:=FindWindow(nil, "Imaging");
// или h:=FindWindow(nil, "Acrobat Reader");


if h <> 0 then begin
ShowMessage("OK!");
windows.SetParent(h, Panel1.handle);
ShowWindow(h, SW_SHOWMAXIMIZED);
end;
end;


Попробовал несколько приложений. Работает. Без Петцольда.


 
Юрий Зотов   (2002-12-03 23:10) [7]

Без Петцольда все же не получится.

Трюк с SetParent стар, как мир и для некоторых однооконных приложений приложений действительно может сработать (правда с кучей глюков, на которые Вы еще натолкнетесь, если уже не натолкнулись). Но Вы же хотели открывать в своем окне "принципиально любые приложения"?

Вот и попробуйте. А потом вспомните Петцольда.


 
Anatoly Podgoretsky   (2002-12-03 23:21) [8]

И для интереса, пусть попробует для начало запустить какую нибудь игру с ДиректИкс


 
Yr2   (2002-12-03 23:33) [9]

Ребята, насчет "принципиально любые приложения" это я действительно "загнул", потому как думал, вдруг кто-нибудь знает общий подход. На самом деле мне действительно надо запускать однооконные приложения, написанные несколькими разработчиками (исходников нет) на Delphi. Это не игры с DirectX...
Только нужно было это сделать из меню одной "материнской" программы с отображением в окне её же.
Спасибо всем за посильное участие.


 
Игорь Шевченко   (2002-12-04 09:42) [10]

Yr2 © (03.12.02 23:33)

А что за нужда в запуске "однооконных приложений, написанных несколькими разработчиками (исходников нет) на Delphi."

Может, можно найти иной способ ?


 
msts   (2002-12-04 12:20) [11]

перехвати вызов GetDesktopWindow
возвати хвнд своего окна может что получится


 
NailS   (2002-12-04 12:36) [12]


> Yr2 © (02.12.02 15:58)
> Грустно... Хорошо, попробую сузить задачу. Можно ли в окне
> моего "материнского" приложения открывать другие приложения
> (запускать exe-файлы), написанные же мною?

Ole Automation?


 
JohnnyJ   (2002-12-04 17:22) [13]


> Ole Automation


VMWare Workstation %))))

P.S. Прошу прощения, за то что вмешиваюсь в серьезный разговор, но просто очень удачная рифма, не смог удержаться.


 
Yr2   (2002-12-04 21:56) [14]

Ладно, рассказываю сказочку про моего белого бычка.
Было написано 3 десятка COM-объектов, выполняющих определенные простые действия с БД (Oracle). Каждый объект - это форма с набором кнопок (инструментарий). COM-объекты оформлены не в виде DLL, а в виде EXE-файлов. То есть, каждый такой exe-ник можно "просто запустить" и работать как с любой программой, а можно использовать его по правилам доступа через COM-интерфейс. Не хотелось изучать этот интерфейс и делать свою программу вызова COM-объектов. Хотелось по-простому позапускать их из одной проги с возможностью легкого переключения между формами и все. На сегодняшний день этот вариант работает. Но и "честный" вариант (через интерфейсы) тоже пришлось изучить и сделать второй вариант...


 
mukha   (2002-12-04 21:59) [15]

Вот пример запуска калькулятора в окне приложения, но опять же есть глюки, например, при перетаскивании за заголовок.
procedure TForm1.Button1Click(Sender: TObject);
var
Window : HWND;
begin
WinExec("calc.exe", SW_SHOWNORMAL);
Window := FindWindow("SciCalc", nil);
if Window <> 0 then
Windows.SetParent(Window, Handle);
end;


 
Yr2   (2002-12-04 22:07) [16]

To mukha
Так в моем примере ж то же самое!


 
BIN   (2002-12-05 08:19) [17]

2 mukha
а что за глюки ??? вроде нормально перетаскивается и калькулятор и форма???



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

Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.008 c
14-51959
vopros
2002-11-26 13:33
2002.12.16
Как заставить себя не спать?


1-51716
volph7777
2002-12-04 15:39
2002.12.16
Почему не извеняется запись в TTable


14-51883
greenrul
2002-11-21 20:44
2002.12.16
Переустановил систему (ХР) - как восстановить Delphi??


6-51870
boolean
2002-10-07 13:40
2002.12.16
Help


1-51722
vasilly
2002-12-06 11:13
2002.12.16
Как встроить форму из DLL в любой контрол, например TPanel????:(





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