Форум: "Основная";
Текущий архив: 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.006 c