С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
1

mcisendstring

13.08.2011, 15:00. Просмотров 3012. Ответов 15
Метки нет (Все метки)

Привет! Есть такая тема. Начинаю разбираться с функциями windows, дошел до mcisendstring. Написал следующее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <string>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    char str[200];
    strcpy(str, "play ");
    strcat(str, argv[1]);
    mciSendString(str,0,0,0);
    system("PAUSE");
    return EXIT_SUCCESS;
}
Но проблема в том, если название файла содержит пробел, например, "hrenov koren.mp3", то эта функция не может воспроизвести такой файл. Что посоветуете сделать, чтобы избежать этого?

P.S. Переименовывать файл не время проигрывания - не предлагать!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2011, 15:00
Ответы с готовыми решениями:

mciSendString
господа при помощи этой функции воспроизважу файл avi,есть варианты напрример-...

Ресурсы и mciSendString
Господа допустим имеем в ресурсах файл .mp3 можно ли его как то воспроизвести...

mciSendString mfc
для воспроизведения видео использую mciSendString, но он воспроизводит сразу в...

Не работает mciSendString
Добрый день. Нагуглил mciSendString. Хочу по кнопке mp3 проиграть...

MCISendString - регулирование громкости
Нужно написать mp3 плеер, написал команды открытия файла, паузы, остановки,...

15
dr.curse
393 / 349 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 15:04 2
Илларион, может так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <string>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    char str[200];
    strcpy(str, "play \"");
    strcat(str, argv[1]);
    strcat(str,"\"");
    mciSendString(str,0,0,0);
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
13.08.2011, 15:06 3
разумеется он будет хранить 2 разных слова в разных аргументах...
откуда ж программе знать что вы имели ввиду?
ну проверяйте по очереди все argv[i] на наличие ".mp3" например и strcat пока нету.
0
dr.curse
393 / 349 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 15:12 4
Илларион, вот так наверное будет работать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <string>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    char str[200];
    strcpy(str, "play \"");
    for (int i=1;i<argc;i++)
    {
        strcat(str, argv[i]);
        strcat(str," ");
    }
    strcat(str,"\"");
    mciSendString(str,0,0,0);
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
13.08.2011, 15:21  [ТС] 5
aram_gyumri, нет, так тоже не идет.

OstapBender, не совсем понял, зачем проверять? У меня в argv[] 2 элемента, имя программы и имя файл, который я открываю с помощью этой программы. И второй элемент, даже если с пробелом, помещается в argv[1]. Другое дело, что сама функция mcisendstring воспринимает пробел как раздел комманд

Добавлено через 3 минуты
aram_gyumri, второй способ тоже не катит...
0
dr.curse
393 / 349 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 15:21 6
Илларион, второй код тоже не работает?
0
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
13.08.2011, 15:26  [ТС] 7
Неа, тоже не работает....
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
13.08.2011, 15:28 8
Цитата Сообщение от Илларион Посмотреть сообщение
У меня в argv[] 2 элемента, имя программы и имя файл, который я открываю с помощью этой программы. И второй элемент, даже если с пробелом, помещается в argv[1].
вы переоцениваете умственные способности компилятора.

Цитата Сообщение от Илларион Посмотреть сообщение
Другое дело, что сама функция mcisendstring воспринимает пробел как раздел комманд
с этого и надо было начинать
0
dr.curse
393 / 349 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 15:31 9
Илларион, mciSendString файл с пробелами не проигрывает.
0
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
13.08.2011, 15:35  [ТС] 10
OstapBender, если сделать cout<<argv[1], то выведется нормально название файла, даже если оно с пробелом, так что если название, типа C:\Papka\moi fail.fl , то все это название нормально поместится в argv[1], несмотря на пробел. Это я только что проверял.

Цитата Сообщение от OstapBender Посмотреть сообщение
с этого и надо было начинать
ну вот в этом как раз и проблема

Добавлено через 1 минуту
Цитата Сообщение от aram_gyumri Посмотреть сообщение
mciSendString файл с пробелами не проигрывает.
Во, это уже конкретная информация, спасибо. Буду искать другую функцию для проигрывания файла с пробелами
0
dr.curse
393 / 349 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 15:45 11
Цитата Сообщение от Илларион Посмотреть сообщение
Во, это уже конкретная информация, спасибо. Буду искать другую функцию для проигрывания файла с пробелами
Илларион, если хочешь могу сказать, какие знаю.
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
13.08.2011, 15:50 12
Цитата Сообщение от Илларион Посмотреть сообщение
типа C:\Papka\moi fail.fl , то все это название нормально поместится в argv[1], несмотря на пробел
отказываюсь вам верить.
C++
1
2
3
4
5
6
7
8
int main(int argc, char *argv[]) 
{
    for (int i=1; i<argc; i++)
        std::cout << i << ':' << argv[i] << '\n';
 
 
    std::cin.get();
}
только что проверил на своей программе и C:\1 1.mp3 он пишет как
1:С:\1
2:1.mp3
0
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
13.08.2011, 15:51  [ТС] 13
Цитата Сообщение от aram_gyumri Посмотреть сообщение
могу сказать, какие знаю
Буду очень благодарен

Добавлено через 1 минуту
Цитата Сообщение от OstapBender Посмотреть сообщение
отказываюсь вам верить.
Мой Dev C++ не смотрит на пробел... А у вас какой компилятор, что такой при вередливый?
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.08.2011, 17:53 14
Цитата Сообщение от Илларион Посмотреть сообщение
Мой Dev C++ не смотрит на пробел...
У меня gcc(аналог вашего MinGW)
Код
diagon@shadeware:~$ cat test.cpp && g++ test.cpp && ./a.out /home/ 1.mp3
#include <iostream>
int main(int argc, char **argv){
	for (char** p = argv; *p ; ++p)
		std::cout << *p << std::endl;
}
./a.out
/home/
1.mp3
0
dr.curse
393 / 349 / 36
Регистрация: 11.10.2010
Сообщений: 1,907
13.08.2011, 17:55 15
Илларион, есть две функции system,ShellExecute, с помощью них можно проиграть но использую сторонние программы, или можно юзать Video for Windows если хочешь могу показать пример работы.
P.S. я с помощью Video for Windows делаю примитивный медиа плеер
0
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
13.08.2011, 20:27  [ТС] 16
Цитата Сообщение от aram_gyumri Посмотреть сообщение
если хочешь могу показать пример работы
Если не сложно, покажи
0
13.08.2011, 20:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2011, 20:27

Воспроизведение mp3 (mciSendString)
Имеем код: case WM_LBUTTONDOWN: if (!bCTT) { bCTT = true;...

Проигрывание файла, mciSendString
Здравствуйте. открываю файл AnsiString Line = &quot;open &quot; + fname + &quot; type...

Толковые описания по mciSendString
Фигня это, а не описание, даже пусть и по-английски. Человек конкретна...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru