Messages persos msn

Soyez le premier à donner votre avis sur cette source.

Vue 12 530 fois - Téléchargée 539 fois

Description

Petite dll pour modifier les messages persos d'MSN.
J'ai trouvé la source ici : http://frechy.developpez.com/persmsn/
J'ai essayé de la traduire en vb, sans y arriver j'ai donc modifié le porjet de François Laloux pour en faire une dll compacte (5ko)

Utilisation :
SendMSNMessage(bool enable, string category, string message)
enable => affiche le message si true sinon, il l'enlève
category => "Office" - "Games" - "Music" (définit l'icône à côté)
message => Message affiché

Source / Exemple :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices; 
using System.Text;

namespace MSN
{
    public class MSN
    {
        [DllImport("user32", EntryPoint = "SendMessageA")]
        private static extern int SendMessage(int Hwnd, int wMsg, int wParam, int lParam);

        [DllImport("user32", EntryPoint = "FindWindowExA")]
        private static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);

        private const short WM_COPYDATA = 74;

        public struct COPYDATASTRUCT
        {
            public int dwData;
            public int cbData;
            public int lpData;
        }
        public COPYDATASTRUCT data;

        public int VarPtr(object e)
        {
            GCHandle GC = GCHandle.Alloc(e, GCHandleType.Pinned);
            int gc = GC.AddrOfPinnedObject().ToInt32();
            GC.Free();
            return gc;
        }

        public void SendMSNMessage(bool enable, string category, string message)
        {
            string buffer = "\\0" + category + "\\0" + (enable ? "1" : "0") + "\\0{0}\\0" + message + "\\0\\0\\0\\0\0";
            int handle = 0;

            data.dwData = 0x0547;
            data.lpData = VarPtr(buffer);
            data.cbData = buffer.Length * 2;

            handle = FindWindowEx(0, handle, "MsnMsgrUIManager", null);
            if (handle > 0)
                SendMessage(handle, WM_COPYDATA, 0, VarPtr(data));
        }
    }
}

Conclusion :


Bonne utilisation

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

Ok merci beaucoup pour ton code :D
Première différence, je ne sais pas si c'est ca : udtData.dwData &H547S, et idem pour le WM_COPYDATA &H4AS (et j'avais en VB &H547 et &H4A) mais je n'ai pas mon code ici pour tester et comparer directement.
Je n'avais jamais vu ce S ^^
Messages postés
12
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 juin 2009

salut,
j'utilise cette méthode en Vb.Net dans une source ( http://yaurthek.free.fr/?page=dev&id=4 )

voila le code copié collé si ça peut t'aider :

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Public Function VarPtr(ByVal o As Object) As Integer
Dim GC As System.Runtime.InteropServices.GCHandle = System.Runtime.InteropServices.GCHandle.Alloc(o, System.Runtime.InteropServices.GCHandleType.Pinned)
Dim ret As Integer = GC.AddrOfPinnedObject.ToInt32

GC.Free()
Return ret
End Function
Private Structure COPYDATASTRUCT
Dim dwData As Integer
Dim cbData As Integer
Dim lpData As Integer
End Structure
Private Const WM_COPYDATA As Short = &H4AS

Public Sub SetMsgPerso(ByRef r_type As String, ByRef r_newMsg As String, Optional ByRef r_bShow As Boolean = True)

Dim udtData As COPYDATASTRUCT
Dim sBuffer As String
Dim hMSGRUI As Integer

'Total length can not be longer then 256 characters!
'Any longer will simply be ignored by Messenger.
'sBuffer = "\0Music\0" & System.Math.Abs(CInt(r_bShow)) & "\0" & r_sFormat & "\0" & r_sArtist & "\0" & r_sTitle & "\0" & r_sAlbum & "\0" & r_sWMContentID & "\0" & vbNullChar
sBuffer = "\0" & r_type & "\0" & System.Math.Abs(CInt(r_bShow)) & "\0" & r_newMsg & "\0" & "\0" & vbNullChar

udtData.dwData = &H547S
udtData.lpData = VarPtr(sBuffer)
udtData.cbData = Len(sBuffer) * 2

Do
hMSGRUI = FindWindowEx(0, hMSGRUI, "MsnMsgrUIManager", vbNullString)

If (hMSGRUI > 0) Then
Call SendMessage(hMSGRUI, WM_COPYDATA, 0, VarPtr(udtData))
End If

Loop Until (hMSGRUI = 0)

End Sub
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

Non, c'est toujours fonctionnel avec les dernières versions ;)
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Euh, c'est pour MSN 7 seulement? On est à la version 14 (2009) donc à moins que cette source fonctionne aussi avec les dernières versions (qui maintenant s'appellent Live Messenger), je ne vois pas trop l'intérêt de la source...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.