Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Открытие файла своей программой.


Страницы:   1 2 3

vlad ©   (2013-02-07 14:44:00) 

Подскажите как отловить это момент в своей программе, чтобы выполнить нужные действие (Имеется введу "открыть с помощью" через правую кнопку мыши)


Rouse_   (2013-02-07 19:53:00) [21]


> Плохиш ©   (07.02.13 19:46) [32]
> А ведь действительно...

Угу, и Enter в жесткую блокируется :))


Плохиш   (2013-02-07 19:46:00) [22]


> Anatoly Pogoretsky   (07.02.13 17:47) [23]
> > vlad  (07.02.2013 16:09:13)  [13]
>
> Если отмечено несколько
> файлов то никакого
> “открыть с помощью” не
> будет.

А ведь действительно...


Плохиш   (2013-02-07 19:42:00) [23]


> vlad   (07.02.13 17:49) [24]
> а старую копию как закрывать?

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

А так поддерживаю совет о найме программиста.


Rouse_   (2013-02-07 19:39:00) [24]

ЗЫ: но лучше, если предполагается постоянно работать с большим списком открываемых файлов (тот же плеер), крайне желательно реализовать собственное расширение оболочки.

Старт сотни процессов только для того чтобы передать главному экземпляру некие данные - ни разу не легкая прогулка для системы и тормоза могут наблюдаться даже на достаточно производительных машинах.


Rouse_   (2013-02-07 19:35:00) [25]


> vlad   (07.02.13 17:49) [24]
> а старую копию как закрывать?

Если ты работаешь без ShellExt то старую копию закрывать не нужно. Нужно найти текущий экземпляр программы и ему отправить уведомление о том что нужно обработать новый файл, после чего завершить свой процесс.

Вариантов поиска оригинального экземпляра ну просто море,
на вскидку некий уникальный класс окна который будет в единственном экземпляре на всю систему + FindWindow или именованный MMF в котором прописан хэндл окна принимающий уведомления от чужих процессов.
В обоих случаях SendMessage + WM_COPYDATA где и передаем данные.
Еще вариант - именованные каналы (пайпы), через которые так же можно перегнать данные.
Да и вообще вариантов на коленке можно целую кучу накидать.


vlad   (2013-02-07 18:46:00) [26]


> brother ©   (07.02.13 18:17) [27]
>
> найми программиста...


Хоть нанимай, хоть нет. Кроме как FindWindow, метода я не знаю.
Но так можно закрыть не то что надо.


 HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'CdpApp');
 if (HM <> 0) then
 begin
   SendMessage((FindWindow(nil, 'MyProgram')), WM_CLOSE, 0, 0);
   //ShowMessage('Уже запущено');
 end;


brother   (2013-02-07 18:17:00) [27]

найми программиста...


vlad   (2013-02-07 18:07:00) [28]


> brother ©   (07.02.13 17:56) [25]

А окно старое как искать? через FindWindow?


brother   (2013-02-07 17:56:00) [29]

послать окну wm_close


vlad   (2013-02-07 17:49:00) [30]



а старую копию как закрывать?
begin
 HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'CdpApp');
 if (HM <> 0) then
 begin
   ShowMessage('Уже запушено');
  //КАК ЗДЕСЬ ЗАКРЫТЬ "СТАРУЮ КОПИЮ"
 end;

 if HM = 0 then
   HM := CreateMutex(nil, false, 'CdpApp');
end;


Anatoly Pogoretsky   (2013-02-07 17:47:00) [31]

> vlad  (07.02.2013 16:09:13)  [13]

Если отмечено несколько
файлов то никакого
“открыть с помощью” не
будет.


брат Птибурдукова   (2013-02-07 17:23:00) [32]

Вот блин, хотел накатать злобный комментарий, а в [18] таки правильный вариант уже высказали.


vlad   (2013-02-07 17:09:00) [33]


> sniknik ©   (07.02.13 16:32) [20]


> не уверен, ни по моему они (плейры) так и делают...


Тот же Windows Media открывает все равно только один


sniknik   (2013-02-07 16:32:00) [34]

> набор MP3 файлов нужно открывать одной прогрммой, так чтобы они попали в список воспроизведение, а не открылся каждый одтельной копией MP3-плеера.
смотреть на параметр, если есть, и есть открытая копия, то посылать параметр ей, а самой закрываться...
не уверен, ни по моему они (плейры) так и делают...


Inovet   (2013-02-07 16:29:00) [35]

> [16] vlad   (07.02.13 16:28)

На это я уже ответил.


Ega23   (2013-02-07 16:29:00) [36]

Розыч поправил, не так всё.
Если программа просто зарегистрирована под расширение (open a) и выбрано 10 файлов, то запустится 10 копий программы, каждая со своим.
Если программа зарегистрирована как ShellExtention, то тогда там унутре можно получить count файлов и дальше по индексу решать, что там с ними делать.


Inovet   (2013-02-07 16:29:00) [37]

> [15] Ega23 ©   (07.02.13 16:23)

Это какие-то неправильные параметры. Как из командной строки так сделать?


vlad   (2013-02-07 16:28:00) [38]


> Inovet ©   (07.02.13 16:23) [14]
>
> > [13] vlad   (07.02.13 16:09)
>
> Всю читал. Открвть с помощью для нескольких файлов у меня
> нет, есть открыть, и открывается лоя txt несколько блокнотов.
>


Ну это смотря кому какое поведение программы нужно - текстовые файлы можно открыть только в разных программах.
А вот, к примеру, набор MP3 файлов нужно открывать одной прогрммой, так чтобы они попали в список воспроизведение, а не открылся каждый одтельной копией MP3-плеера.


Inovet   (2013-02-07 16:23:00) [39]

> [13] vlad   (07.02.13 16:09)

Всю читал. Открвть с помощью для нескольких файлов у меня нет, есть открыть, и открывается лоя txt несколько блокнотов.


Ega23   (2013-02-07 16:23:00) [40]


> Вопрос в том, что если выделено несколько файлов, то при
> "открыть с помошью" ParamCount все равно = 1, а ParamStr
> - содержит путь к только одному из файлов


Я очень сильно подозреваю, что данном случае идёт передача нескольких файлов через "мультистринг" (или как там оно называется? Короче, когда есть буфер строк, каждая из которых оканчивается терминирующим нулём, а концом буфера служит ещё один терминирующий ноль).
Может Розыч поправит...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо