Передача параметров программе

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
alex_samus
Сообщения: 5
Зарегистрирован: 04 май 2005, 17:18

Люди , помогите если кто знает.Мне нужно , чтобы при нажатии строки в контекстном меню , файл запускался в моей программе , но мне нужно получить пути к выделенным файлам . Если файл один , то путь к нему передается как параметр, а вот как получить пути к нескольким файлам?Ниже преведен мой код создания строки в контекстном меню для моего расширения. Если я открываю несколько файлов , то открывается несколько моих программ и каждой передается один путь.

Код: Выделить всё

var 
  reg: TRegistry; 
begin 
  reg := TRegistry.Create; 
  reg.RootKey := HKEY_CLASSES_ROOT; 
  reg.LazyWrite := false; 
  reg.OpenKey(edit2.Text+'\shell\open\command', true); 
  reg.WriteString('', application.ExeName+' %1'); 
  reg.CloseKey; 
  reg.OpenKey(edit2.text+'\DefaultIcon',true); 
  reg.WriteString('', application.ExeName+',0'); 
  reg.CloseKey; 
  reg.free; 
end; 
//В edit2 у меня расширение которое надо зарегистрировать  
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Посмотри как это сделано для WinAmp.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

А если при запуске программы проверять, запущена ли она уже, и если да - то передавать параметр (имя файла) ей. Как это сделать - временным файлом, или сообщениями WM это уже Вам решать.
С уважением, Lost Angel...
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

LAngel, читаешь мои мысли. Такой вариант один из первых пришел в голову, но блин, че то не очень красиво как-то получается. Хотя по другому даже не знаю, можно ли через реестр обработать запуск одной копии для нескольких выделенных файлов.
Впринципе идея реализуемая, можно попробовать.
The trurh is out there...
Nucleus
Сообщения: 29
Зарегистрирован: 06 май 2005, 12:57
Контактная информация:

Хватит языком молоть лучше б что ни будь "материальное" ему дали!!

пиши на мыло у меня есть исходник (если надо) там все что тебе нужно реализованно

Маил: shutterman@mail.ru
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

Nucleus, было бы дали, а ты считаешь что раз самому не приходилось работать с данным вопросом, то нечего и размышлять на эту тему пока самому не преспичит?
The trurh is out there...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А если при запуске программы проверять, запущена ли она уже, и если да - то передавать параметр (имя файла) ей. Как это сделать - временным файлом, или сообщениями WM это уже Вам решать.
Эта задача разбивается на три
1) проверить запущена или нет можно с помощью семафоров, (например CreateSemaphore) Обсуждалось в этом форуме.
2) найти окно запущенного экземпляра - ну это FindWindow
3) передача блока данных определенной длины - это WM_COPYDATA - самый простой и надежный способ IPC (Inter process communacation). Экземпляр, который нашел другой запущенный эекземпляр WM_делает SendMessage(WM_COPYDATA, @Data). Другой же в своей оконной процедуре ловит событие COPYDATA.
Попробуйте! Вам понравится. Если не разберетесь - пишите.
Ответить