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

Вниз

Запуск программы в модальном режиме   Найти похожие ветки 

 
q1485   (2008-01-24 19:34) [0]

Мне нужно написать программулину, которую что-то будет вызывать, передавая ей параметры в консоли.
После вызова будет появляться окно моей программы и нужно сделать так, чтобы оно было модальным, то есть лочило до своего завершения приложение, которое его запустило. Подскажите пожалуйста, как?


 
Юрий Зотов ©   (2008-01-24 21:08) [1]

А почему бы запускалке не лочить саму себя?

if CreateProcess(..., ProcessInformation) then // Запустили
begin
 CloseHandle(ProcessInformation.hThread); // Отпускаем ненужный ресурс
 WaitForSingleObject(ProcessInformation.hProcess, INFINITE); // Ждем завершения
 CloseHandle(ProcessInformation.hProcess) // Отпускаем ненужный ресурс
end


 
q1485   (2008-01-24 23:18) [2]

Спасибо. Про WaitForSingleObject я знаю, но к сожалению нужен именно описанный вариант. Чтобы моя программулина лочила...


 
palva ©   (2008-01-24 23:55) [3]

> которую что-то будет вызывать, передавая ей параметры в консоли
что-то - это программа или человек?
этот что-то будет запускать вашу программу из консоли?
или это что-то должна быть консольная программа?

>чтобы оно было модальным, то есть лочило до своего завершения приложение
объясните что значит лочить и как окно может лочить. Почему модальность окна означает, что оно кого-то лочит.

>Чтобы моя программулина лочила...
Так что же должно лочить окно или программулина.


 
bobr   (2008-01-25 17:50) [4]


> palva ©   (24.01.08 23:55) [3]


Зачем разводить глупую философию. Человек все понятно изложил. Или нужно составить ТЗ и опубликовать его здесь?

программу вызывают с параметрами, программа должна появиться визуально как модальное окно вызывающего приложения и до своего закрытия не отпускать вызывающие приложение.

как сделать я лично не знаю.


 
clickmaker ©   (2008-01-25 17:56) [5]

EnableWindow(ParentWindowHandle, FALSE)


 
Dib@zol ©   (2008-01-25 18:01) [6]

А если главное окно проги назначить дочерним и модальным относительно окна "родительской" проги? Вообще я однажды делал нечто подобное... q1485, если ты сможешь разобраться в WinAPI, попробую сляпать пример. Единственная проблема - как обеспечить собсно модальность. Скорее всего, раз первая, "вызывающая" прога - твоя, то в ней проще всего создать пустое окно и прописать его хендл в параметры вызова (а запускаемая должна "принять" его как своё главное окно и весь свой GUI выводить в нем, проставив ему собственную оконную процедуру), чтоб не париться с отловом и остановкой потока обработки сообщений родительской проги через мессадж-хуки.


 
palva ©   (2008-01-25 18:14) [7]

> Зачем разводить глупую философию. Человек все понятно изложил.
Ну раз я спросил, значит мне непонятно. Наверно, я недостаточно крут для той фени, на котором написано [0]. Тем более что автор противоречит сам себе. А вы поняли его еще как-то иначе. Оказывается, программа должна заставить то приложение, которое ее вызвало, показать модальное окно. Ну к примеру, я поставил эту программу в автозагрузку, а она должна заблокировать какой-нибудь системный процесс Windows, да еще чтобы окно появилось. А если в этом системном процессе даже кода такого нет, который мог бы показывать модальные окна? Что же, эта программа должна внедрить код?

Если автор заинтересован в ответе, он должен участвовать в обсуждении и отвечать на вопросы.


 
palva ©   (2008-01-25 18:18) [8]


> Скорее всего, раз первая, "вызывающая" прога - твоя

Ну вот, еще одна версия... Буду тренировать телепатор на досуге.


 
Anatoly Podgoretsky ©   (2008-01-25 18:52) [9]


> Ну к примеру, я поставил эту программу в автозагрузку, а
> она должна заблокировать какой-нибудь системный процесс
> Windows, да еще чтобы окно появилось

Это уже вирус.


 
q1485   (2008-01-26 22:12) [10]


> программу вызывают с параметрами, программа должна появиться
> визуально как модальное окно вызывающего приложения и до
> своего закрытия не отпускать вызывающие приложение.


Тут все верно... Причем запускать программулину будет стороннее (не мое) Win32 приложение..


> Dib@zol ©   (25.01.08 18:01) [6]

Думаю, WinAPI будет сложновато..


> EnableWindow(ParentWindowHandle, FALSE)


Тогда, вопрос, как узнать Handle родителя?


 
palva ©   (2008-01-27 09:49) [11]


> Причем запускать программулину будет стороннее (не мое)
> Win32 приложение..

Ага. Причем это приложение сначала запустит консоль. (Как же иначе оно "будет вызывать, передавая ей параметры в консоли" (см. [0])) Затем в эту консоль через pipe введет имя этой "программулины" с нужными параметрами и нажмет Enter. Правильно я понимаю?

> Тогда, вопрос, как узнать Handle родителя?
Что такое родитель и чего родитель? Если у вас есть окно, то функцией GetParent можно узнать Handle родительского окна.


 
q1485   (2008-01-28 09:42) [12]


> palva ©   (27.01.08 09:49) [11]


Не знаю что за pipe...
Я под консолью имел ввиду вызов исполняемого файла с параметрами.
Т.е.
"имя exe" "параметры"

и не более...

Ведь программу запустит какой то процесс. Надо узнать его PID, а потом по PID узнать handle и потом залочить EnableWindow(ParentWindowHandle, FALSE)

Под Handle родителя я это и имел ввиду......


 
ketmar ©   (2008-01-28 09:48) [13]

как всё запущено… может, ты всё-таки пояснишь, нафига оно надо? и чем не подходит [1]? если приложение не твоё, и код туда не добавишь — с чего тебе понадобилось что-то там «лочить»? зачем? мне за 10 лет вот ни разу не понадобился такой изврат.


 
q1485   (2008-01-28 09:54) [14]

Ну могу пояснить...
Запускающее приложение не мое, поэтому [1] не подходит.
Мое приложение принимает параметры и выполняет определенные действия. Во время выполнения оно рисует окно с неким прогресс баром информируя пользователя о статусе выполнения операции. Нужно чтобы вызывающее приложение было заблокировано пока ползунок не добежит до конца..
Это так тяжело представить?


 
ketmar ©   (2008-01-28 10:00) [15]

да, тяжело. если ты не можешь пояснить — значит задача не имеет практического смысла. следовательно, нечего заниматься цереброизвращениями.


 
q1485   (2008-01-28 10:16) [16]

Я тебе не поянил? Где увидел изврат?


 
palva ©   (2008-01-28 10:34) [17]

> Под Handle родителя я это и имел ввиду......
Тогда читайте обсуждение этой темы здесь:
http://forum.sources.ru/index.php?showtopic=209024&st=15&hl=


 
ketmar ©   (2008-01-28 11:10) [18]

>[16] q1485 (28.01.08 10:16)
вся задача — один большой изврат.


 
q1485   (2008-01-28 15:55) [19]


> palva ©   (28.01.08 10:34) [17]


Спасибо!


 
Игорь Шевченко ©   (2008-01-28 16:18) [20]

В древнем Китае желающим странного отрубали голову. Мудро.


 
palva ©   (2008-01-28 17:08) [21]

Так выпьем же за то, чтобы наши странные желания совпадали с нашими интеллектуальными возможностями.



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

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

Наверх





Память: 0.5 MB
Время: 0.052 c
2-1201578558
Думатель
2008-01-29 06:49
2008.02.24
Как принудительно уменьшить объем памяти, занимаемый программой?


15-1200837022
Nous Mellon_
2008-01-20 16:50
2008.02.24
Рандомный вывод массива


2-1201628983
iwik
2008-01-29 20:49
2008.02.24
Передать данные в dll


2-1201801065
Artem
2008-01-31 20:37
2008.02.24
Сохранить строку в ресурсе


11-1179211668
WindLord
2007-05-15 10:47
2008.02.24
Проблема с отображением компонентов в KOL/МСК 2.60, Delphi 7





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