Desenvolvendo uma DLL para trocar o status de musica no msn

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Desenvolvendo uma DLL, que por chamada do windows, consegue trocar o nome da musica que está tocando no MSN

Bom, Inicie um projeto padrão de DLL do delphi.

Agora, Na Uses do projeto, adicione as seguintes unidades:   Windows, Messages.
Estas uses serão nescessárias para a busca do handle da janela, e das mensagens que serão enviadas ao MSN.

---

Agora antes do Begin, Declare esta função.
Ela fará o trabalho de enviar a musica para o msn.


procedure MusicaAtual(Artista,Album,Titulo:string);
var
 handleMSN:THandle;
 structCopy:TCopyDataStruct;
 stringBuffer:array [0..127] of WideChar;
begin
  FillChar(stringBuffer,SizeOf(stringBuffer),#0);
  StringToWideChar(`\0Music\0` + `1` + `\0` + `{0} - {1}` + `\0` + Artista + `\0` + Titulo + `\0` + Album + `\0` + `WMContentID` + #0 , @stringBuffer[0],128);

  FillChar(structCopy,SizeOf(TCopyDataStruct),#0);
  with structCopy do
  begin
   cbData:=SizeOf(stringBuffer);
   dwData:=$547;
   lpData:=@stringBuffer[0];
  end;

  handleMSN:=FindWindowEx(0,0,`MsnMsgrUIManager`,nil);
  while handleMSN <> 0 do
  begin

   SendMessage(handleMSN,WM_COPYDATA,0,Integer(@structCopy));
   handleMSN:=FindWindowEx(0,handleMSN,`MsnMsgrUIManager`,nil);
  end;
end;

Calma ai! não está acabado não! Você tem que exportar o procedimento, para que outros aplicativos consigam ler corretamente.
Para exportar coloque isto antes do Begin:

  exports 
   
MusicaAtual;

Agora sua DLL está pronta. você pode chamar ela com o método STDCALL ou dinâmicamente.

----
Chamando dinâmicamente uma DLL....

Declare uma classe especial na seção TYPE:

  TMusicaAtual : procedure(Artista,Album,Titulo:string);


Declare duas variaveis globais:
  vHandle: THandle;
  MusicaAtual: TMusicaAtual;

Declare antes do End. estes códigos:

initialization
  vHandle:= LoadLibrary(`NomeDaDLL.DLL`);
  if @MusicaAtual = nil then
    @MusicaAtual:= GetProcAddress(vHandle,`MusicaAtual`);

finalization

isto fará com que a DLL seja chamada para a memória.

Agora vá no OnClose do formulário ou e coloque o seguinte código:
  try
    if vHandle <> 0 then     
      FreeLibrary(vHandle);
  except
  end;

Para chamar o procedure da DLL chame assim:
  MusicaAtual(Parâmetros);


Pronto... agora ele da load na DLL e chama o processo quando você quiser!

Um Abraço! até a próxima.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?