Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 23:53   #1
Ельцов Д.А.
 
Регистрация: 24.12.2012
Сообщений: 6
Печаль Удаленное управление

Доброго времени суток!!! Подскажите пожалуйста, как можно сделать удаленное управление Windows Media Player на c++ builder 6???
Ельцов Д.А. вне форума Ответить с цитированием
Старый 25.12.2012, 00:50   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...написать клиент-сервер и управлять окном плеера.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.12.2012, 07:22   #3
Ельцов Д.А.
 
Регистрация: 24.12.2012
Сообщений: 6
По умолчанию

а что писать в листинге???
Ельцов Д.А. вне форума Ответить с цитированием
Старый 25.12.2012, 19:43   #4
Ельцов Д.А.
 
Регистрация: 24.12.2012
Сообщений: 6
По умолчанию

что тут исправлять чтоб управлять WMP
Код:
Файл MyHostAmpImpl.cpp, описывающий методы сервера:
// MYHOSTAMPIMPL : Implementation of TMyHostAmpImpl (CoClass: MyHostAmp, Interface: IMyHostAmp)
#include <vcl.h>
//#include "Unit1.h"
#pragma hdrstop
#include "Winamp\wa_ipc.h"
#include "MYHOSTAMPIMPL.H"
/////////////////////////////////////////////////////////////////////////////
// TMyHostAmpImpl
// Метод управления громкостью
STDMETHODIMP TMyHostAmpImpl::set_SetVolume(int Param1)
{
  try
  {
  SendMessage(handle,WM_WA_IPC,Param1,IPC_SETVOLUME);
  Form1->Memo1->Text= "Громкость изменена на " + AnsiString(Param1*100/255) + "%";
  }
  catch(Exception &e)
  {
    return Error(e.Message.c_str(), IID_IMyHostAmp);
  }
  return S_OK;
};
// Метод добавления нового трека
STDMETHODIMP TMyHostAmpImpl::set_AddTrack(BSTR* Param1)
{
  try
  {
  AnsiString k;
  k = AnsiString(WideString(*Param1));
  COPYDATASTRUCT cds = {0};
  cds.dwData = IPC_ENQUEUEFILE;
  cds.lpData = (void*)k.c_str();
  cds.cbData = lstrlen((char*)cds.lpData)+1;  // include space for null char
  SendMessage(handle,WM_COPYDATA,0,(LPARAM)&cds);
  Form1->Memo1->Text= "Добавлен трек:\r\n" + k;
  }
  catch(Exception &e)
  {
    return Error(e.Message.c_str(), IID_IMyHostAmp);
  }
  return S_OK;
};
// Метод управления воспроизведением
STDMETHODIMP TMyHostAmpImpl::set_ClickBut(int Param1)
{
  try
  {
  if (Param1==1) {SendMessage(handle, WM_COMMAND, 40044, 0); Form1->Memo1->Text= "Нажата клавиша \"Предыдущий трек\"";}
  if (Param1==2) {SendMessage(handle, WM_COMMAND, 40045, 0); Form1->Memo1->Text= "Нажата клавиша \"Воспроизведение\"";}
  if (Param1==3) {SendMessage(handle, WM_COMMAND, 40046, 0); Form1->Memo1->Text= "Нажата клавиша \"Пауза\"";}
  if (Param1==4) {SendMessage(handle, WM_COMMAND, 40047, 0); Form1->Memo1->Text= "Нажата клавиша \"Стоп\"";}
  if (Param1==5) {SendMessage(handle, WM_COMMAND, 40048, 0); Form1->Memo1->Text= "Нажата клавиша \"Следующий трек\"";}
  }
  catch(Exception &e)
  {
    return Error(e.Message.c_str(), IID_IMyHostAmp);
  }
  return S_OK;
};
// Метод поиска приложения и первоначальной настройки
STDMETHODIMP TMyHostAmpImpl::get_Start(short* Value)
{
  try
  {
  handle = FindWindow("Winamp v1.x",NULL);
  if (handle)
   {
   SendMessage(handle,WM_WA_IPC,0,IPC_DELETE);          // Очистить playlist
   SendMessage(handle,WM_WA_IPC,0,IPC_SET_SHUFFLE);     // Выключить random
   *Value = 1;
   Form1->Memo1->Text= "WinAmp найден и присоединен.";
   }
   else
   {*Value = 0;
   Form1->Memo1->Text= "WinAmp не найден.";}
  }
  catch(Exception &e)
  {
    return Error(e.Message.c_str(), IID_IMyHostAmp);
  }
  return S_OK;
};
Ельцов Д.А. вне форума Ответить с цитированием
Старый 25.12.2012, 19:44   #5
Ельцов Д.А.
 
Регистрация: 24.12.2012
Сообщений: 6
По умолчанию

потом
Код:
Файл MyHostAmpImpl.h, описывающий интерфейс:
// MYHOSTAMPIMPL.H : Declaration of the TMyHostAmpImpl
#ifndef MyHostAmpImplH
#define MyHostAmpImplH
#define ATL_APARTMENT_THREADED
#include "Unit1.h"
#include "Server_TLB.H"

/////////////////////////////////////////////////////////////////////////////
// TMyHostAmpImpl     Implements IMyHostAmp, default interface of MyHostAmp
// ThreadingModel : Apartment
// Dual Interface : TRUE
// Event Support  : FALSE
// Default ProgID : Server.MyHostAmp
// Description    : My WinAmp Driver 1.0
/////////////////////////////////////////////////////////////////////////////
class ATL_NO_VTABLE TMyHostAmpImpl : 
  public CComObjectRootEx<CComSingleThreadModel>,
  public CComCoClass<TMyHostAmpImpl, &CLSID_MyHostAmp>,
  public IDispatchImpl<IMyHostAmp, &IID_IMyHostAmp, &LIBID_Server>
{
public:
  TMyHostAmpImpl()
  {
  }
  // Data used when registering Object 
  //
  DECLARE_THREADING_MODEL(otApartment);
  DECLARE_PROGID("Server.MyHostAmp");
  DECLARE_DESCRIPTION("My WinAmp Driver 1.0");
  // Function invoked to (un)register object
  //
  static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
  {
    TTypedComServerRegistrarT<TMyHostAmpImpl> 
    regObj(GetObjectCLSID(), GetProgID(), GetDescription());
    return regObj.UpdateRegistry(bRegister);
  }
BEGIN_COM_MAP(TMyHostAmpImpl)
  COM_INTERFACE_ENTRY(IMyHostAmp)
  COM_INTERFACE_ENTRY2(IDispatch, IMyHostAmp)
END_COM_MAP()

// IMyHostAmp
public:

  STDMETHOD(set_SetVolume(int Param1));
  STDMETHOD(set_AddTrack(BSTR* Param1));
  STDMETHOD(set_ClickBut(int Param1));
  STDMETHOD(get_Start(short* Value));
};

HWND handle;
#endif //MyHostAmpImplH
Ельцов Д.А. вне форума Ответить с цитированием
Старый 25.12.2012, 19:44   #6
Ельцов Д.А.
 
Регистрация: 24.12.2012
Сообщений: 6
По умолчанию

ещё
Код:
Файл Unit1.cpp, описывающий действия клиента:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{}
//------- Разрыв соединения при выходе
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
m_obj.Unbind();
}
//------- Соединение с сервером
void __fastcall TForm1::b_connClick(TObject *Sender)
{
if(!m_obj.IsBound())
{
AnsiString strHost;

 if (InputQuery("Create Server", "Enter computer name:", strHost))
 {
  if (strHost.IsEmpty())
  OleCheck(CoMyHostAmp::Create(m_obj));
  else
  OleCheck(CoMyHostAmp::CreateRemote(WideString(strHost),m_obj));
  short vback;
 OleCheck(m_obj.get_Start(&vback));
 if (vback==0)
 {Application->MessageBoxA("WinAmp на удаленном\r\nкомпьютере не запущен.","Ошибка",NULL);
 Close();}
 else
 {
 b_addmp3->Enabled = true;
 b_conn->Enabled = false;
 }
 }
}
}
//------ Добавить трек
void __fastcall TForm1::b_addmp3Click(TObject *Sender)
{
if (Open1->Execute())
{
Memo1->Lines->AddStrings(Open1->Files);

WideString strValue;
for (int i=0; i<Open1->Files->Count; i++)
 {
 strValue = Open1->Files->Strings[i];
 OleCheck(m_obj.set_AddTrack(&strValue));
 }
b_next->Enabled = true;
b_pause->Enabled = true;
b_play->Enabled = true;
b_prev->Enabled = true;
b_stop->Enabled = true;
Volume->Enabled = true;
}
}
//------- Предыдущий трек
void __fastcall TForm1::b_prevClick(TObject *Sender)
{
OleCheck(m_obj.set_ClickBut(1));
}
//------- Востроизведение
void __fastcall TForm1::b_playClick(TObject *Sender)
{
OleCheck(m_obj.set_ClickBut(2));        
}
//------- Пауза
void __fastcall TForm1::b_pauseClick(TObject *Sender)
{
OleCheck(m_obj.set_ClickBut(3));        
}
//------- Стоп
void __fastcall TForm1::b_stopClick(TObject *Sender)
{
OleCheck(m_obj.set_ClickBut(4));        
}
//------- Следующий трек
void __fastcall TForm1::b_nextClick(TObject *Sender)
{
OleCheck(m_obj.set_ClickBut(5));        
}
//-------- Изменение громкости
void __fastcall TForm1::VolumeChange(TObject *Sender)
{
OleCheck(m_obj.set_SetVolume(255 - Volume->Position));
}
//-------- Действия при первом открытии формы
void __fastcall TForm1::FormActivate(TObject *Sender)
{
b_next->Enabled = false;
b_pause->Enabled = false;
b_play->Enabled = false;
b_prev->Enabled = false;
b_stop->Enabled = false;
Volume->Enabled = false;
b_addmp3->Enabled = false;
}
//---------------------------------------------------------------------------
Ельцов Д.А. вне форума Ответить с цитированием
Старый 25.12.2012, 19:45   #7
Ельцов Д.А.
 
Регистрация: 24.12.2012
Сообщений: 6
По умолчанию

ну и если понадобится
Код:
Файл Unit1.h:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "..\Server\Server_TLB.h"
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TButton *b_conn;
        TPanel *Panel1;
        TGroupBox *GroupBox1;
        TButton *b_addmp3;
        TMemo *Memo1;
        TGroupBox *GroupBox2;
        TButton *b_play;
        TButton *b_next;
        TButton *b_pause;
        TButton *b_prev;
        TButton *b_stop;
        TTrackBar *Volume;
        TOpenDialog *Open1;
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall b_connClick(TObject *Sender);
        void __fastcall b_addmp3Click(TObject *Sender);
        void __fastcall b_prevClick(TObject *Sender);
        void __fastcall b_playClick(TObject *Sender);
        void __fastcall b_pauseClick(TObject *Sender);
        void __fastcall b_stopClick(TObject *Sender);
        void __fastcall b_nextClick(TObject *Sender);
        void __fastcall VolumeChange(TObject *Sender);
        void __fastcall FormActivate(TObject *Sender);
private:	// User declarations
        TCOMIMyHostAmp m_obj;
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Ельцов Д.А. вне форума Ответить с цитированием
Старый 25.12.2012, 21:37   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...ну, раз у вас весь проект может быть есть, компилируйте.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленное управление приложением. karapuzekee Помощь студентам 0 22.12.2011 01:55
Удаленное управление Joslen_bomon Компьютерное железо 3 07.11.2011 18:10
удаленное управление устройством! Gambler Работа с сетью в Delphi 11 29.10.2009 12:12
Удаленное управление страницей SuBwooFer JavaScript, Ajax 2 29.08.2009 14:40