IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Плеер, Одна проблемка.
сообщение
Сообщение #21


Гость






Правильнее будет - так:

var
d: PChar;

procedure TForm1.FormCreate(Sender: TObject);
var
h: hwnd;
begin
Application.OnMessage := AppMessage;
d := StrNew(PChar(System.ParamStr(1))); // Выделяем память под строку !!!
h := FindWindow(nil,'MP3 1.8.0.7');
if (h<>0) then begin
PostMessage(h,WM_ADD_TO_PLAYLIST,0,lparam(d));
Application.Terminate;
end;
end;

procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
var s: string;
begin
if Msg.message = WM_ADD_TO_PLAYLIST then
begin
s := StrPas(PChar(Msg.lParam));
MediaPlayer1.FileName := s;
MediaPlayer1.Open;
...


Попробуй, что ЭТОТ вариант тебе выдаст? (не забудь потом удалить D, чтоб не было утечки)

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Кажется я понял проблему...
Смотри,так работает:
d := StrNew(PChar('D:\1.mp3'));

А так нет:
  d := StrNew(PChar(System.ParamStr(1)));

То есть я понял,что гвоздь в этом System.ParamStr!Теперь тупик еще более противен!

Добавлено через 15 мин.
Да,твой вариант работает,но как показал выше.^

Сообщение отредактировано: Артемий -


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Хм.... Может глупость...
А что если открыть сокет на 127.0.0.1 (т.е. локально) и слушать его на поступление имен файлов, которые нужно проиграть.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Нет,нужно именно через Post или SendMessage


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Артемий @ 24.08.2007 22:14) *
Нет,нужно именно через Post или SendMessage
Дело в том, что в случае с именами файлов будет проблема с выделением памяти. Послать сообщение элементарно. Но сообщение может вместить лишь 2 DWORD'а. А строка обычно длинная, если это полный путь к имени файла. Выделяя память в одном процессе ты не сможешь передать этот указатель в другой. В этом случае нужно организовывать передачу информации через общую память (filemap), интерфейс-петлю (127.0.0.1) или программные каналы (pipes).

В случае с программными каналами тебе даже не придется искать, запущен ли твой плеер уже или нет.
При старте программы, она пытается открыть pipe, если получилось, значит один экземпляр плеера уже запущен, потому просто пишем туда имя файла. Если открыть не получилось - мы первые, потому создаем канал и слушаем его.

Сообщение отредактировано: hardcase -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Ну а привести тогда код любого из этих путей можешь?..я с этим не работал.

Добавлено через 3 мин.
Вообще,я понял что ParamStr с PostMessage не катит,да? mega_chok.gif

Сообщение отредактировано: Артемий -


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Гость






Цитата
Вообще,я понял что ParamStr с PostMessage не катит,да?

Получите, распишитесь smile.gif


const
WM_ADD_TO_PLAYLIST = WM_USER + 1010;

procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
var
s: string;
begin
if Msg.message = WM_ADD_TO_PLAYLIST then
begin
SetLength(S, MSG.lParam + 1);
GlobalGetAtomName(MSG.wParam, PChar(S), MSG.LParam + 1);

MediaPlayer1.FileName := S;
MediaPlayer1.Open;

Handled := True;

end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
h: hwnd;
s: string;
myAtom: TAtom;
begin
Application.OnMessage := AppMessage;
s := ParamStr(1);
h := FindWindow(nil,'MP3 1.8.0.7');
if h <> 0 then begin
myAtom := GlobalAddAtom(PChar(s));
PostMessage(H, WM_ADD_TO_PLAYLIST, myAtom, Length(s));
GlobalDeleteAtom(myAtom);

Application.Terminate;
end;
Form1.Caption := 'MP3 1.8.0.7';

 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Артемий @ 24.08.2007 22:24) *
Ну а привести тогда код любого из этих путей можешь?
Вот пример создания каналов.
Первый запуск приложения приведет к созданию именованного канала, последующие запуски будут просто отсылать первому приложению данные.


Прикрепленные файлы
Прикрепленный файл  PipeListener.zip ( 6.87 килобайт ) Кол-во скачиваний: 186


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


2volvo
Ты крууут! smile.gif give_rose.gif good.gif good.gif good.gif


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.04.2024 21:19
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name