Форум: "Начинающим";
Текущий архив: 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