Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/75: Рейтинг темы: голосов - 75, средняя оценка - 4.51
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
1

Параметры запуска приложения

27.09.2013, 22:38. Показов 13952. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
решил написать mp3 плеер и столкнулся с такой проблемой: я задал ассоциацию с файлами mp3. по 1 файлу плеер прекрасно открывает, но если выделить несколько, то открывается несколько окон и в каждом свой файл. затем я создал мутекс на запрет запуска 2й копии и передачу paramstr(1) первому окну, вроде бы все стало работать, но максимально можно выделить добавить 15 файлов и иногда добавляются не все файлы, как можно исправить мой код или заставить передавать больше чем 1 параметр при запуске?
Вложения
Тип файла: rar player.rar (338.8 Кб, 23 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2013, 22:38
Ответы с готовыми решениями:

Не удается получить параметры запуска файла
Здравствуйте, нужно запустить EXE файл с несколькими параметрами. Вот мой вариант (не работает,...

Как получить параметры запуска процесса?
Просто меня заинтересовало как такое делать, т.к. прога T@sk_inspect0r умеет это получать. В инете...

Интервал запуска приложения
Подскажите пожалуйста как запустить приложение с интервалом, скажем этак минут через 10-15. Через...

Кнопка запуска приложения
У меня есть приложение.exe. как мне сделать функцию кнопки чтоб по ёё нажатию запускалось...

32
angstrom
27.09.2013, 22:43 2
Цитата Сообщение от artemka2008 Посмотреть сообщение
больше чем 1 параметр при запуске?
Через пробел, как и положено.
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
27.09.2013, 22:48  [ТС] 3
Цитата Сообщение от angstrom Посмотреть сообщение
Через пробел, как и положено.
приведите пожалуйста пример кода) я уже устал читать разные темы, так и не нашел решения

вы имели ввиду дописать сюда?

Delphi
1
2
Reg.OpenKey('command\', true);
  s:='"'+Application.ExeName+'" "%1"';
чтобы было

Delphi
1
2
Reg.OpenKey('command\', true);
  s:='"'+Application.ExeName+'" "%1" "%2"';
так?
0
angstrom
27.09.2013, 22:51 4
Причём тут реестр и параметры запуска? Параметры запуска определяют через ParamStr/ParamCount.
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
27.09.2013, 22:53  [ТС] 5
Цитата Сообщение от angstrom Посмотреть сообщение
Причём тут реестр и параметры запуска? Параметры запуска определяют через ParamStr/ParamCount.
голова забилась уже, покажите пример пожалуйста
0
angstrom
27.09.2013, 23:21 6
Открываем справку Дельфи и читаем оттуда пример использования
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 1 to ParamCount do
  begin
    if LowerCase(ParamStr(i)) = 'beep' then
      Beep
    else if LowerCase(ParamStr(i)) = 'exit' then
      Application.Terminate;
  end;
end;
или вас интересует как другие используют эту функцию?
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
28.09.2013, 00:39  [ТС] 7
Цитата Сообщение от angstrom Посмотреть сообщение
Открываем справку Дельфи и читаем оттуда пример использования
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 1 to ParamCount do
  begin
    if LowerCase(ParamStr(i)) = 'beep' then
      Beep
    else if LowerCase(ParamStr(i)) = 'exit' then
      Application.Terminate;
  end;
end;
или вас интересует как другие используют эту функцию?
мои знания делфи далеки от идеала, я изучаю его на примере написания этого плеера.
если объяснить просто, то мне надо сделать так, чтобы при дабл клике на файл он открывался в моей проге(я это реализовал), но я не знаю как сделать, чтобы добавлялись все выделенные файлы.
у меня используется такой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.FormShow(Sender: TObject);
var i:integer;
begin
if ParamCount>=1 then begin
for i := 1 to ParamCount do
begin
f:=ParamStr(i);
addfiles(f);
playitem(pl2.ItemIndex);
end;
end;
end;
0
angstrom
28.09.2013, 00:48 8
Выделенные где?
{c0Der}
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
28.09.2013, 00:57 9
Цитата Сообщение от artemka2008 Посмотреть сообщение
if ParamCount>=1 then begin
for i := 1 to ParamCount do
begin
f:=ParamStr(i);
addfiles(f);
playitem(pl2.ItemIndex);
end;
end;
попробуй так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//...
var ad:boolean;
//...
f:='';
ad:=false;
for i := 1 to ParamCount do begin
  if ad then f:=f+#32+ParamStr(i) else f:=ParamStr(i);
  if not FileExists(f)then begin
    ad:=true;
    continue;
  end else ad:=false;
  addfiles(f);
  playitem(pl2.ItemIndex);
end;
//...
0
angstrom
28.09.2013, 01:05 10
Судя по вопросам, ТС не командная строка нужна, а TOpenDialog.
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
28.09.2013, 01:06  [ТС] 11
Markus_13, не работает

angstrom, я не прописывал выделение(если правильно понял), на передачу файлов основному окну у меня такой код:

project1:
Delphi
1
2
3
4
5
6
7
8
9
RestoreOldInstance: Cardinal;
  begin
  CreateMutex(nil, True, '{C68C1DD9-2CB0-4B2F-9A6A-29F4ADE5707D}');
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
  SendString(findwindow('TForm1', nil), ParamStr(1));
  PostMessage(HWND_BROADCAST, RestoreOldInstance, 0, 0);
  Exit;
  end;
unit1:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
function TForm1.ApplicationMessage(var Message: TMessage): Boolean;
var
  hWnd, hCurWnd, dwThreadID, dwCurThreadID: THandle;
  OldTimeOut: Cardinal;
  AResult: Boolean;
begin
  Result := False;
  if Message.Msg = RestoreOldInstance then
  begin
    Application.Restore;
    hWnd := Application.Handle;
    SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @OldTimeOut, 0);
    SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(0), 0);
    SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
    hCurWnd := GetForegroundWindow;
    AResult := False;
    while not AResult do
    begin
      dwThreadID := GetCurrentThreadId;
      dwCurThreadID := GetWindowThreadProcessId(hCurWnd);
      AttachThreadInput(dwThreadID, dwCurThreadID, True);
      AResult := SetForegroundWindow(hWnd);
      AttachThreadInput(dwThreadID, dwCurThreadID, False);
    end;
    SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
    SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(OldTimeOut), 0);
  end;
  inherited;
end;
 
procedure TForm1.WMCopyData(var Msg: TWMCopyData);
var
  str_tmp: string;
begin
  if (Msg.CopyDataStruct^).lpData = nil then str_tmp:='';
  setLength(str_tmp, Msg.CopyDataStruct^.cbData);
  str_tmp:=pChar((Msg.CopyDataStruct^).lpData);
  addfiles(str_tmp);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
RestoreOldInstance:=RegisterWindowMessage('{FC9D27F6-D173-4CF6-8A9A-3A2197C72390}');  //Нужная нам строка
Application.HookMainWindow(ApplicationMessage);  //нужна нам строка
spectrum := Tspectrum.Create(pb1.Width, pb1.Height, 0, 200);
IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Config.ini');
volume.position:=IniFile.ReadInteger('Volume','volume.position',50);
if Bass_Init(-1, 44100, 0, handle, nil) = false then
ShowMessage('не удалось инициализировать поток');
volume.Min:=0;
volume.Max:=100;
DragAcceptFiles(handle, true);
end;
 
function SendString(TargetWnd: THandle; const S: string): integer;
var
  CD: TCopyDataStruct;
begin
  CD.cbData:=length(S) + 1;
  if CD.cbData = 1 then
    CD.lpData := nil
  else
    CD.lpData:=pChar(s);
  result:=SendMessage(TargetWnd, WM_COPYDATA, 0, LParam(@CD))
end;
0
angstrom
28.09.2013, 01:31 12
Непонятно зачем это нужно?
Delphi
1
SendString(findwindow('TForm1', nil), ParamStr(1));
FormCreate и сам прекрасно прочитает командную строку. Если вы всё же передаёте открываеиые файлы в командной строке, то учтите, по утверждению Microsoft:
На компьютерах под управлением Microsoft Windows XP или более поздняя версия, максимальная длина строки, который можно использовать в командной строке 8191 символов.
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
28.09.2013, 01:33  [ТС] 13
Цитата Сообщение от angstrom Посмотреть сообщение
Непонятно зачем это нужно?
Delphi
1
SendString(findwindow('TForm1', nil), ParamStr(1));
FormCreate и сам прекрасно прочитает командную строку. Если вы всё же передаёте открываеиые файлы в командной строке, то учтите, по утверждению Microsoft:
у меня не через командную строку, я пытаюсь сделать через нее, у меня настроен хук на второе окно и мутекс передачей сообщения запущенному окну с paramstr(1), работает очень криво
0
angstrom
28.09.2013, 02:16
  #14

Не по теме:

Цитата Сообщение от artemka2008 Посмотреть сообщение
у меня не через командную строку, я пытаюсь сделать через нее
Оригинально.

191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
28.09.2013, 02:41  [ТС] 15
Цитата Сообщение от angstrom Посмотреть сообщение

Не по теме:


Оригинально.

мне кажется, что вполне нормально. я пытаюсь переписать код под передачу параметров из командной строки. возможно вы меня не правильно поняли
0
{c0Der}
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
28.09.2013, 04:25 16
Цитата Сообщение от artemka2008 Посмотреть сообщение
Markus_13, не работает
значит в твоем коде есть ошибки =(
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
28.09.2013, 14:00  [ТС] 17
Цитата Сообщение от Markus_13 Посмотреть сообщение
значит в твоем коде есть ошибки =(
просто я не умею задавать параметры запуска через делфи и никто не скажет как мне сделать это
0
angstrom
28.09.2013, 16:00 18
Чего там знать: MuSuperProga.exe MyParameter. Как разбирать поступающие параметры уже сказали.
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
28.09.2013, 16:11 19
Чего там знать
У автора никак не получается драг'n'дропнуть из проводника в свою программу несколько файлов одновременно.
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
28.09.2013, 16:14  [ТС] 20
Цитата Сообщение от angstrom Посмотреть сообщение
Чего там знать: MuSuperProga.exe MyParameter. Как разбирать поступающие параметры уже сказали.
я наверное не так объяснил.
если просто, то как сделать так, чтобы при выделении фалов они все добавлялись в плейлист?
если открыть 1 файл, то все работает, а с выделением не хочет.
пробовал делать проверку:


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.FormShow(Sender: TObject);
var ad:boolean;
begin
ad:=false;
for i := 1 to ParamCount do begin
  if ad then f:=f+#32+ParamStr(i) else f:=ParamStr(i);
  if not FileExists(f)then begin
    ad:=true;
    continue;
  end else ad:=false;
  addfiles(f);
  playitem(pl2.ItemIndex);
  label1.Caption:=inttostr(paramcount); //проверка, всегда показывает 1
end;
end;
Цитата Сообщение от northener Посмотреть сообщение
У автора никак не получается драг'n'дропнуть из проводника в свою программу несколько файлов одновременно.
drag'n'drop у меня сделан и работает прекрасно
0
28.09.2013, 16:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2013, 16:14
Помогаю со студенческими работами здесь

Параметры запуска приложения
Народ! Кто помнит как в приложении узнать с какими параметрами его запустили? Params там или...

Скрыть параметры запуска приложения
Всем привет дело такое есть такой код { Process.Start("тут пишу название...

Получить параметры запуска приложения
Была такая хорошая штука в VB6.0 как COMMAND... она работала как переменная, если ее объявить при...

Обработать параметры запуска приложения
Привет всем! Подскажите, пожалуйста, каким образом на Visual Basic 2008 при запуске моего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru