Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2011, 17:47   #1
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию Передача сообщения программе

Всем доброго времени суток.

Нужно открывать файлы в моей программе через окно "Открыть с помощью".
Открывать надо несколько файлов.
Использую вот этот код: http://programmersforum.ru/showpost....75&postcount=9

Проблема в том, что пути файлов-то передаются, но т к форма открывается не мгновенно (много действий в oncreate), то этой форме сообщения из копий программы не успевают прийти.

У кого какие предложения? Думал все что в oncreate в поток отправить, но по многим причинам такое решение не устраивает.

У кого какие предложения? Заранее благодарен.
Anfall вне форума Ответить с цитированием
Старый 11.08.2011, 18:22   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
sleep(); 
????
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 11.08.2011, 19:25   #3
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
Код:
sleep(); 
????
Ну не с секундомером же мне засекать сколько форма открывается. У кого-то откроется за секунду, у кого-то быстрее.
Да и вообще программа считывает данные при старте, а их объемы могут быть разными.
Anfall вне форума Ответить с цитированием
Старый 11.08.2011, 20:42   #4
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

ну можно отловить появление этой формы по её заголовку (хендлу)..и как появится передать.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 11.08.2011, 20:46   #5
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
ну можно отловить появление этой формы по её заголовку (хендлу)..и как появится передать.
Воо, спасибо. Вопрос только, как отследить? Использую Findwindow().
Anfall вне форума Ответить с цитированием
Старый 11.08.2011, 21:03   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Какое отношение
Цитата:
окно "Открыть с помощью"
имеет к
Цитата:
копий программы
?
mss вне форума Ответить с цитированием
Старый 12.08.2011, 00:01   #7
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Какое отношение
А дело в том, что если мы выделим несколько файлов и попробуем их открыть нашей программой. То откроется ровно столько копий программы, сколько файлов. И в каждой копии будет один файл. Суть сводится к тому что бы если копия нашла уже открытую программу - передать ей свой параметр и самоуничтожиться.
Anfall вне форума Ответить с цитированием
Старый 12.08.2011, 07:27   #8
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
...
var
   H: HWND;
   Zagolovok:array[0..255] of Char;
...
begin
   H:= GetActiveWindow // - узнаем текущее активное окно
   GetWindowText(H, Zagolovok, SizeOf(Zagolovok)); //- считываем заголовок
ну типо так
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 12.08.2011, 08:22   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Поиск по окнам? О, боже...

Посмотрите нормальный пример кода: http://dl.dropbox.com/u/201788/Proje...stanceDemo.zip
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2011, 10:12   #10
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
если копия нашла уже открытую программу - передать ей свой параметр и самоуничтожиться
Такие вещи делаются с использованием мьютекса и MMF.

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

Последующий стартовавший экз-р при попытке создания мьютекса получает диагностику "мьютекс уже существует" и ждет на занятии мьютекса. Как только мьютекс будет занят экз-р открывает MMF, берет оттуда PID и/или хенд окна - теперь "координаты" первого экз-ра известны, можно любым удобным способом коммуницировать с ним для передачи параметров, после чего можно спокойно закруглиться.

Ну и разумеется перед завершением работы каждый экземпляр должен освободить мьютекс и закрыть его хендл, равно как и с MMF.
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прием передача сообщения от сервера клиенту и на оборот Lokos Работа с сетью в Delphi 4 24.08.2010 18:24
Передача параметров программе Granus Общие вопросы C/C++ 3 02.03.2010 17:49
Передача сообщения о нажатии клавиши в DOSBox Gerzs Общие вопросы Delphi 3 15.11.2009 19:02
Передача сообщения из программы в свою Dll SergeySK Общие вопросы Delphi 3 01.11.2007 14:42
Передача параметров программе при её запуске troo Общие вопросы Delphi 7 13.05.2007 21:22