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

Вниз

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

 
vlad   (2013-02-07 14:44) [0]

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


 
Медвежонок Пятачок ©   (2013-02-07 15:09) [1]

Как только тебя запустили - так значит момент этот и настал.


 
vlad   (2013-02-07 15:12) [2]


> Медвежонок Пятачок ©   (07.02.13 15:09) [1]


Это понятно. как это выглядет в программе?


 
Медвежонок Пятачок ©   (2013-02-07 15:13) [3]

Никак на выглядет.


 
Медвежонок Пятачок ©   (2013-02-07 15:14) [4]

Или выглядет так:
программа такая лежала леджала и вдруг ее запустили.
Она такая смотрит - ё! мне параметры в командной строке передали!
Етить колотить!


 
brother ©   (2013-02-07 15:21) [5]

программа запускается, создается ее главная форма, в ее OnCreate смотри, передали ли парамеры...


 
vlad   (2013-02-07 15:39) [6]


> brother ©   (07.02.13 15:21) [5]


Спасибо за подсказку. С одним файлом все понятно, а вот как быть если пытаться открыть сразу несколько файлов, в этом случае ParamCount все равно равен "1" (как в случае с MP3 плеером)


 
Ega23 ©   (2013-02-07 15:44) [7]


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

call notepat.exe test.txt


 
brother ©   (2013-02-07 15:46) [8]

http://www.cyberforum.ru/delphi/thread560198.html


 
Медвежонок Пятачок ©   (2013-02-07 15:50) [9]

а вот как быть если пытаться открыть сразу несколько файлов

Ты не поверишь!
Надо посмотреть что же там в этом параметре пришло.
Возможно там сразу несколько файлов.


 
vlad   (2013-02-07 15:58) [10]


> Медвежонок Пятачок ©   (07.02.13 15:50) [9]


Это возможно, а на самом деле там только первый.


> brother ©   (07.02.13 15:46) [8]



> Ega23 ©   (07.02.13 15:44) [7]


Это немного не то, я с вашей помощью разобрался что к чему.

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


 
vlad   (2013-02-07 15:59) [11]


> Надо посмотреть что же там в этом параметре пришло.

Ты сам смотрел?


 
Inovet ©   (2013-02-07 15:59) [12]

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


 
vlad   (2013-02-07 16:09) [13]


> Inovet ©   (07.02.13 15:59) [12]


Нет, ну вы извините, но вы не поняли вопрос - конечно понятно, что не хочется читать  всю ветку.


> Ну или запустится несколько копий программы.

Это вообще не то.

Копия только одна.

Действия такие:
1) заходим через проводник в папку
2) выделяем несколько файлов, (с одним файлом все работает)
3) через правую кнопку мыши ("открыть с помощье") открываем эти файлы через свою программу.

A ParamCount = 1, ParamStr - содержит ссылку только на один файл из выделенного набора.


 
Inovet ©   (2013-02-07 16:23) [14]

> [13] vlad   (07.02.13 16:09)

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


 
Ega23 ©   (2013-02-07 16:23) [15]


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


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


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


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


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


 
Inovet ©   (2013-02-07 16:29) [17]

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

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


 
Ega23 ©   (2013-02-07 16:29) [18]

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


 
Inovet ©   (2013-02-07 16:29) [19]

> [16] vlad   (07.02.13 16:28)

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


 
sniknik ©   (2013-02-07 16:32) [20]

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


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


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


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


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


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

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


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

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

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


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



а старую копию как закрывать?
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;



 
brother ©   (2013-02-07 17:56) [25]

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


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


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

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


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

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


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


> 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;


 
Rouse_ ©   (2013-02-07 19:35) [29]


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

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

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


 
Rouse_ ©   (2013-02-07 19:39) [30]

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

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


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


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

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

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


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


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

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


 
Rouse_ ©   (2013-02-07 19:53) [33]


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

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


 
Inovet ©   (2013-02-07 21:27) [34]

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

Тебе 2 (два) раза сказали - закрывать новую. Писатель не читатель?


 
Inovet ©   (2013-02-07 21:29) [35]

> [29] Rouse_ ©   (07.02.13 19:35)

Уже 4 раза сказали.


 
Inovet ©   (2013-02-07 21:31) [36]

> [31] Плохиш ©   (07.02.13 19:42)

5 раз. Теперь дойдёт.


 
Inovet ©   (2013-02-07 21:33) [37]

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

В общем так: или автор не читает сообщения, или темнит, или что-то ещё, не буден это называть.


 
имя   (2013-02-07 21:47) [38]

Удалено модератором


 
Rouse_ ©   (2013-02-07 22:03) [39]


> Inovet ©   (07.02.13 21:29) [35]
> Уже 4 раза сказали.

Лучше 1 раз разжевать, чем 4 раз рассказать :)


 
имя   (2013-02-07 22:07) [40]

Удалено модератором
Примечание: может лучше сразу бан по IP, как думаешь?



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

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

Наверх





Память: 0.55 MB
Время: 0.008 c
6-1269926058
alekseyi
2010-03-30 09:14
2013.11.10
TClientSocket 10022 Error


15-1369035927
Skyle
2013-05-20 11:45
2013.11.10
Вакансия "Программист Delphi". г. Новосибирск


15-1369388271
Дмитрий СС
2013-05-24 13:37
2013.11.10
Удаленный доступ к рабочему столу телефона (Android).


15-1369476584
Новичок
2013-05-25 14:09
2013.11.10
Язык программирования для ИИ.


15-1369487360
О-Сознание
2013-05-25 17:09
2013.11.10
Плавно преобразовать один цвет в другой.





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