Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ответ на SendMessage, Как получить ответ на SendMessage 
:(
    Опции темы
cmlwt
Дата 27.6.2008, 21:26 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Тут  такая проблема хочу  управлять WinAmp'ом  через  программу По средствам  SendMessage (ну или PostMessage) Вот   набор комманд я нашел  Некоторые команды позваляют возвращать данные (список песен в плей листе Какая сейчас громкость Сколько  уже прошло времени от песни) Кто  нить  подскажет как получить комманду Желательно в примере Ото   Ни разу не пробовал получать  ответ  на посланный  мною запрос.


PM MAIL   Вверх
cmlwt
Дата 28.6.2008, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Из всего что я нашел я смог сделать токо:

Код

void WinAmp()
{
HWND hCommWin;
MSG m_msgCur;
if (hCommWin = ::FindWindow("Winamp v1.x", NULL)) MessageBox( "Нашли окно",0,0);
else MessageBox( "нифига",0,0);
//::PostMessage(hCommWin, WM_USER,10,122);
::PostMessage(hCommWin, WM_USER,0,104);
while (true)
{
::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE);

if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) break;
::TranslateMessage(&m_msgCur); 

}

}


И что мне с этим m_msgCur делать?

Пробовал

Код

 BYTE keyStateArr[256];
  WORD word;
  UINT scanCode = m_msgCur.lParam;
        char *ch = new char [10];

  //Translate virtual key code to ascii
  GetKeyboardState(keyStateArr);
  ToAsciiEx(m_msgCur.wParam, scanCode, keyStateArr, &word, 0,(HKL)m_msgCur.lParam);
  *ch = (char) word;
  
  if ((GetKeyState(VK_SHIFT) & 0x8000) && m_msgCur.wParam >= 'a' && m_msgCur.wParam <= 'z')
  ch += 'A'-'a';


Но ничего не дало
PM MAIL   Вверх
Lazin
Дата 28.6.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



читай MSDN
функция SendMessage вызывает оконную процедуру, которая должна вернуть значение, это значение потом и возвращает ф-я SendMessage...

Цитата(cmlwt @  27.6.2008,  21:26 Найти цитируемый пост)
Тут  такая проблема хочу  управлять WinAmp'ом  через  программу По средствам  SendMessage (ну или PostMessage) Вот   набор комманд я нашел  Некоторые команды позваляют возвращать данные (список песен в плей листе Какая сейчас громкость Сколько  уже прошло времени от песни) Кто  нить  подскажет как получить комманду Желательно в примере Ото   Ни разу не пробовал получать  ответ  на посланный  мною запрос.

у винампа есть свой API и SDK...
PM MAIL Skype GTalk   Вверх
cmlwt
Дата 28.6.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Цитата(Lazin @ 28.6.2008,  12:12)
читай MSDN
функция SendMessage вызывает оконную процедуру, которая должна вернуть значение, это значение потом и возвращает ф-я SendMessage...

Это я уже понял   Но как  полученное  сообщение перевести  в какой нить  char или CString?

Цитата

у винампа есть свой API и SDK...


А  это тут причем ?

PM MAIL   Вверх
ama_kid
Дата 28.6.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



Цитата(cmlwt @  28.6.2008,  13:36 Найти цитируемый пост)
Но как  полученное  сообщение перевести  в какой нить  char или CString?
Возвращаемое функцией SendMessage значение - целое число, если ты знаешь, что ответом должна быть строка - значит интерпретируй результат как указатель на буфер с этой строкой. В общем, обычная работа с типами.
Цитата(cmlwt @  28.6.2008,  13:36 Найти цитируемый пост)
А  это тут причем ?
А при том, что возможно будет намного легче (и самое главное - правильнее) использовать функции, которые дает сам винамп  smile


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Lazin
Дата 28.6.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(ama_kid @  28.6.2008,  13:44 Найти цитируемый пост)
если ты знаешь, что ответом должна быть строка - значит интерпретируй результат как указатель на буфер с этой строкой. В общем, обычная работа с типами

как указатель нельзя, по крайней мере из другого приложения...
PM MAIL Skype GTalk   Вверх
cmlwt
Дата 28.6.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Цитата(ama_kid @ 28.6.2008,  13:44)
Возвращаемое функцией SendMessage значение - целое число, если ты знаешь, что ответом должна быть строка - значит интерпретируй результат как указатель на буфер с этой строкой. В общем, обычная работа с типами.


Во  спасибо догнал  Вроде как ото  ввело в заблуждение вот  эта строчка

Код

124 Возвращает длину текущего плэйлиста в трэках.


Не внимательно прочитал  и подумал позвращает  список   песен  в плэй листе   smile 

Тоесть  получается так 

Код

::PostMessage(hCommWin, WM_USER,0,124);
while (true)
{
::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE);

if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) break;
::TranslateMessage(&m_msgCur); 

}

}



То  поидеи после Транслэйт Мессаже у меня в m_msgCur  будет лежать какое то  число   Правильно?


Цитата

А при том, что возможно будет намного легче (и самое главное - правильнее) использовать функции, которые дает сам винамп  


Ну я думаю  это лишнее чтобы  Копать  его  API Если  мне всего лишь нужно  отослать  сообщение  WinAmp'у  И получить  какое то число которое он вернет.


PM MAIL   Вверх
ama_kid
Дата 28.6.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



Цитата(cmlwt @  28.6.2008,  14:33 Найти цитируемый пост)
Тоесть  получается так 
ничего не получается. Зачем ты вообще трогаешь цикл обработки сообщений приложения? Там где тебе надо получить количество песен - просто делай
Код
int Num = ::SendMessage(hCommWin, WM_USER,0,104);
После этого Num должен содержать число треков (при условии, что винамп запущен, конечно, и имеет корректную обработку данного сообщения). Можешь посмотреть функцию SendMessageTimeOut для дополнительных возможностей... 
Цитата(cmlwt @  28.6.2008,  14:33 Найти цитируемый пост)
Ну я думаю  это лишнее чтобы  Копать  его  API Если  мне всего лишь нужно  отослать  сообщение  WinAmp'у  И получить  какое то число которое он вернет.
Может это и лишнее, но это правильно smile К тому же, вполне возможно там функционал богаче и возможностей больше (я сам не юзал, поэтому говорю в предполагательном тоне)..

Цитата(Lazin @  28.6.2008,  14:02 Найти цитируемый пост)
как указатель нельзя, по крайней мере из другого приложения... 
Да, здесь согласен... smile

Это сообщение отредактировал(а) ama_kid - 28.6.2008, 19:04


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
cmlwt
Дата 28.6.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.6.2008

Репутация: нет
Всего: нет



Цитата(ama_kid @  28.6.2008,  19:03 Найти цитируемый пост)
После этого Num должен содержать число треков (при условии, что винамп запущен, конечно, и имеет корректную обработку данного сообщения).



Спасиб   Разобрался  

Код

     Num = ::SendMessage(hCommWin, WM_USER,0,124);


Работает ))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0758 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.