Главная страница
    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.042 c
15-1200760437
cartman315
2008-01-19 19:33
2008.02.24
Delphi и flash.ocx


8-1173158554
OlegM
2007-03-06 08:22
2008.02.24
Склеить несколько WAV в один


2-1201868796
Danco
2008-02-01 15:26
2008.02.24
форма


2-1201890405
Urvin
2008-02-01 21:26
2008.02.24
Вторая копия приложения в CodeGear


2-1201556635
Звоновский
2008-01-29 00:43
2008.02.24
тупое неравенство - не мгу разобраться





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