घर
Top.Mail.Ru Yandeks.Metrika
मंच: "शुरुआती";
वर्तमान संग्रह: 2018.03.18;
डाउनलोड करें: [xml.tar.bz2];

नीचे

कमांड लाइन इसी तरह की शाखाएँ खोजें


chuxlo ©   (2016-04-02 18:22) [0]

В программе нужно принимать параметры командной строки.В цикле используя paramCount считываю значения переменных (ParamStr(n)).При запуске из Delphi заполнив строку параметров все их получаю в программе.При запуске в реале (т.е ассоциирую свою программу с mp3 файлами) выделяю группу файлов и передаю в программу
в программе получаю в параметрах только один файл.Куда копать?



Dimka Maslov ©   (2016-04-02 19:24) [1]

व्यक्तिगत रूप से, इस मामले में, मुझे एक्सटेंशन से जुड़े एप्लिकेशन के कई उदाहरण मिलते हैं। प्रत्येक उदाहरण में एक फ़ाइल स्थानांतरित की जाती है। और फिर आप पहले से ही एक प्रतिलिपि में फ़ाइलों को एकत्र कर सकते हैं।



chuxlo ©   (2016-04-02 19:40) [2]

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



Dimka Maslov ©   (2016-04-02 19:59) [3]


> Не думаю, что это выход


Венда поступает именно так - она открывает несколько экземпляров.



chuxlo ©   (2016-04-02 20:08) [4]

Хорошо буду думать в этом направлении.Но неужели при выделении 50 mp3 откры
вается 50 экземпляров WinAmp



Pavia ©   (2016-04-02 20:27) [5]

Проводник запускает несколько программ.
В каждой программе передаётся по оному файлу. Ваш код создаёт именованный мьютекс. Мьютекс создаёт тот кто первый запустился остальные проверяют есть он или нет. Если нет то он первый.
Если есть используем межпроцессный обмен данными IPC. Наиболее популярным является через проецируемый файл. Но в вашем случае почтовый ящик лучше подойдёт.
https://ru.wikipedia.org/wiki/Межпроцессное_взаимодействие

Передаём через этот ящик в главную программу свои параметры.
Далее когда получено подтверждение получения. Лишние копии закрываются остается только первая, она же основная.

И учтите что при создании мьютекса есть ряд особенносий описанных в примечаниях.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682411(v=vs.85).aspx



chuxlo ©   (2016-04-02 20:35) [6]

पाविया को धन्यवाद। मैं जानकारी चबाऊंगा।



Dmk ©   (2016-04-03 00:13) [7]

क्या .... कमांड लाइन पार्सिंग प्रक्रिया डिबगिंग के साथ एक घंटे में लिखी जाती है। शुरुआत के लिए अधिकतम 2-3। क्या म्यूटेक्स?!?!?



Leonid Troyanovsky ©   (2016-04-03 09:56) [8]


> Dmk © (03.04.16 00: 13) [7]

> Что за ....

ТС хочет получать группу файлов от проводника.
Т.е., что-то вроде http://delphimaster.net/view/4-1102448133

--
सादर, LVT



Dmk ©   (2016-04-03 14:00) [9]

> लियोनिद ट्रायोनोव्स्की © (03.04.16 09: 56) [8]
Да понятно. Просто непонятно что сложного в разборе строки состоящей из двойных и одинарных скобок. Я бы выложил, но не хочется халяву разводить. Там головой подумать час времени максимум. У меня 100+ файлов открывается без проблем, хоть с командной строки, хоть с WM_DROPFILES.



chuxlo ©   (2016-04-03 18:06) [10]

द्रमुक! समस्या यह नहीं है कि मैं कमांड लाइन को पार्स नहीं कर सकता। चयनित फ़ाइलों के एक समूह के बजाय, मुझे पार्स करने के लिए कुछ भी नहीं मिलता है।



Dmk ©   (2016-04-03 21:48) [11]

>[10] Бедный. Почитать доку лень.

Массив должен быть инициализирован до входа в процедуру.
Надеюсь сможешь под себя модифицировать.

procedure ParseParamStr(var AFiles: TFilesList);
var
 lpI: integer;
 lpComLine: string;
 lpComLen: integer;
 lpPos: integer;
 lpNDQ: integer;
 lpChar: char;
 lpZeroStr: string;
 lpNextStr: string;
 lpS: string;
 lpEndLen: integer;
 lpZB: boolean;

const
 lcDQ = #34;//"
 lcSQ = #39;//"
 lcBadChars: set of AnsiChar = [ #34, #39];

 function CharPossible(AChar: char): boolean;
 begin
   Result := not (CharInSet(AChar, lcBadChars));
 end;

begin
 lpComLine := GetCommandLine;
 lpComLen := Length(lpComLine);

 //Отладка
 //InfoMessage(0, lpComLine + " (Длина = " + IntToStr(lpComLen) + ")");

 lpNDQ := 0;
 lpPos := 0;
 lpZB := False;

 //Извлекаем нулевой параметр
 //Признак начала и конца нулевого параметра - двойные кавычки -> "ZeroStr"
 for lpI := 1 to lpComLen do
 begin
   lpChar := lpComLine[lpI];
   if lpChar = lcDQ then
   begin
     Inc(lpNDQ);
     lpZB := not lpZB; //Включим флаг открытых скобок
   end;

   //Длина нулевого параметра с кавычками
   //Потребуется для дальнейшего разбора строки
   Inc(lpPos);

   //Если скобка открыта
   if lpZB then
   begin
     //и символ не равен кавычкам
     if (lpChar <> lcSQ) and (lpChar <> lcDQ) then
       lpZeroStr := lpZeroStr + lpChar; //Извлекаем нулевую строку
   end;
   //Выйдем из цикла в конце нулевого параметра
   if (lpChar = lcDQ) and (lpZB = False) then Break;
 end;//for

 //Проверим на первый пробел
 lpChar := lpComLine[lpPos + 1];
 if lpChar = MSG_SPACE then Inc(lpPos, 2); //Начальная позиция остатков строки параметров

 //Следующая строка.
 //Может состоять из нескольких параметров
 lpNextStr := MSG_EMPTY;
 lpEndLen := 0;

 //Копируем остаток для дальнейшего разбора
 for lpI := lpPos to lpComLen do
 begin
   lpChar := lpComLine[lpI];
   lpNextStr := lpNextStr + lpChar;
   Inc(lpEndLen);
 end;

 lpS := MSG_EMPTY;
 //Разбираем остатки строки
 //с проверкой на присутствие файла
 for lpI := 1 to lpEndLen do
 begin
   lpChar := lpNextStr[lpI];

   if lpI = lpEndLen then
   begin
     //Последний символ
     if CharPossible(lpChar) then lpS := lpS + lpChar;
     if FileExist64(lpS) then
     begin
       AFiles.AddRecord(lpS);
       Break;
     end;
   end;

   //Если пробел, то возможно это конец параметра
   //Проверим есть ли такой файл
   if lpChar = MSG_SPACE then
   begin
     //Если файл есть, то добавим его в список файлов
     if FileExist64(lpS) then
     begin
       AFiles.AddRecord(lpS);
       lpS := MSG_EMPTY;
     end
     else
     begin
       //Иначе продолжаем разбирать строку
       if CharPossible(lpChar) then lpS := lpS + lpChar;
     end;
   end //if lpChar = MSG_SPACE
   else
   begin
     if CharPossible(lpChar) then lpS := lpS + lpChar;
   end;
 end;//while
end;



Dmk ©   (2016-04-03 21:51) [12]

Там используется процедура FileExist64. Надеюсь сможешь сам реализовать?
Для сведения: я вообще не программист.



chuxlo ©   (2016-04-03 22:11) [13]

द्रमुक! अब आपने जो प्रस्ताव दिया है, उससे मैं निपटूंगा। कल जवाब होगा।



Dmk ©   (2016-04-03 22:28) [14]

>с предложенным тобой
Я ничего не предлагал. Просто поделился от доброты душевной.



chuxlo ©   (2016-04-03 22:47) [15]

Dmk! Проверил правда не весь код, а часть при помощи ShowMessage вывел
lpComLine и получил только один файл, хотя передавал в программу выделенную группу.



Dmk ©   (2016-04-03 23:17) [16]

Как передавал? Куда? Код покажи.



chuxlo ©   (2016-04-03 23:25) [17]

В событии onShow формы
...
था
एन: पूर्णांक;
शुरू करना
for n:=1 to paramCount do
listbox1.items.add(paramStr(n));
अंत;
...
В системе ассоциирую файлы mp3 с моей программой.Выделяю в Windows группу
mp3 и открываю их.В результате моя программа выводит имя только одного файла.Как получить выделенную группу.



Dmk ©   (2016-04-04 00:13) [18]

Выкинь вариант Delphi. Он кривой.

FilesList := TStringList.Create;
ParseParamStr(FilesList);

//Если есть строка параметров, то откроем файлы
if FilesList.GetCount <> 0 then OpenMyFiles(FilesList);

//Список больше не нужен
FilesList.Free;


В процедуре разборки строки замени AFiles.AddRecord(lpS); на FilesList.Add(lpS);



Dmk ©   (2016-04-04 00:17) [19]

Процедура FileExists:

function FileExist64(FileName: string): boolean;
var
 lpFD: _WIN32_FIND_DATAW;
 lpH: THandle;

begin
 lpH := FindFirstFile(PWideChar(FileName), lpFD);

 if lpH = INVALID_HANDLE_VALUE then
   Result := False else
   Result := True;

 if Result then
 begin
   //Файл не должен быть директорией или устройством
   //Также не может быть скрыт
   if (lpFD.dwFileAttributes = FILE_ATTRIBUTE_ARCHIVE) or
      (lpFD.dwFileAttributes = FILE_ATTRIBUTE_NORMAL) then else Result := False;
 end;

 WinApi.Windows.FindClose(lpH);
end;



Dmk ©   (2016-04-04 00:19) [20]

У меня просто для списка фалов свой класс написан. Там параметров больше.
Замени мой класс на TStringList и все. Будет тебе счастье.



chuxlo ©   (2016-04-04 00:22) [21]

Dmk! Сейчас буду пробовать. Ответ будет завтра.Благодарю Dmk за участие в теме.



QAZ   (2016-04-04 17:04) [22]

правильный ответ в [8], так работает в часности сама дельфя
дмк вообще не понял о чем речь, не трать на него время



पन्ने: 1 पूरी शाखा

मंच: "शुरुआती";
वर्तमान संग्रह: 2018.03.18;
डाउनलोड करें: [xml.tar.bz2];

ऊपर









मेमोरी: 0.65 एमबी
समय: 0.021 c
2-1456676881
Ilya_666
2016-02-28 19:28
2018.03.18
घटकों के साथ बातचीत


15-1471210202
यूरी
2016-08-15 00:30
2018.03.18
आपको जन्मदिन की शुभकामनाएं! 15 अगस्त 2016 सोमवार


6-1263673971
zSvetik
2010-01-16 23:32
2018.03.18
नेटवर्क वीडियो प्रसारण


2-1459610574
chuxlo
2016-04-02 18:22
2018.03.18
कमांड लाइन


15-1471037402
यूरी
2016-08-13 00:30
2018.03.18
आपको जन्मदिन की शुभकामनाएं! 13 अगस्त 2016 शनिवार





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский