Help with MsgPlus plugin

Everything else that doesn't fall into one of the other PB categories.
User avatar
GeoTrail
Addict
Addict
Posts: 2794
Joined: Fri Feb 13, 2004 12:45 am
Location: Bergen, Norway
Contact:

Help with MsgPlus plugin

Post by GeoTrail »

I was hoping someone could help me in creating a simple plugins for Messenger Plus!

I just need a simple example to get me started.
I need to be able to use COM, but I have never worked with that before.
The plugins sdk can be downloaded here
http://www.msgplus.net/help_plugins.php

Hopefully someone could give me a hand so I could get started :)
I Stepped On A Cornflake!!! Now I'm A Cereal Killer!
remi_meier
Enthusiast
Enthusiast
Posts: 468
Joined: Sat Dec 20, 2003 6:19 pm
Location: Switzerland

Post by remi_meier »

Not every function is working as it should, but some basic-functions are working. And I also didn't use COM..

Code: Select all

Global sCCNotify.s, sCCColor.s, sCCBold.s,sCCItalic.s,sCCUnderline.s
Global sCCStrikeout.s,sCCReset.s,sCCNoIcon.s
Global sCCMeStart.s,sCCMeEnd.s
sCCNotify="\x12"
sCCColor="\x03"
sCCBold="\x02"
sCCItalic="\x05"
sCCUnderline="\x1F"
sCCStrikeout="\x06"
sCCReset="\x0F"
sCCNoIcon="\x08"
sCCMeStart="«I"
sCCMeEnd="»"
Global sUserEmail.s,sCommand.s,sCommandArg.s,sTag.s,sNotifyCode.s,sText.s
Global sMessage.s,sTitle.s,sProgram.s

;restliche strukturen!
Structure MPL_TOAST_INFO
  sTitle.s
  sMessage.s
  sProgram.s
  sSoundFile.s
  nReserved.l
EndStructure


Structure PLUGIN_PARAM
  *iConversationWnd
  sContactName.b[512]
EndStructure

Structure a128
  a.b[128]
EndStructure
Structure a256
  a.b[256]
EndStructure
Structure PLUGIN_PUBLISH_LIST
  nCount.w
  sName.a128[50]
  sValue.a128[50]
  sHelp.a256[50]
EndStructure


;########################## MAIL ####################
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=765&highlight= 
; Author: stbi 
; Date: 30. April 2003 

Global res.s, cr.s, ConnID.l  
cr.s=Chr(13)+Chr(10)  


Procedure send(msg.s)  
  SendNetworkData(ConnID,@msg,Len(msg))  
  Debug "send: "+msg  
EndProcedure  

Procedure.s wait()  
  res=""  
  For tmp=1 To 4999  
    res+" "  
  Next  
  ReceiveNetworkData(ConnID,@res,4999)  
  Debug "received: "+res  
  res=Left(res,3)  
  ProcedureReturn res  
EndProcedure  

Procedure.l SENDMAIL(mailserver.s,mailto.s,mailfrom.s,subject.s,msgbody.s)  
  If InitNetwork()  
    ConnID = OpenNetworkConnection(mailserver,25)  
    If ConnID  
      wait()  
      error=0  
      If res="220"  
        send("HELO CGIapp"+cr)  
        wait()     
        If res="250"  
          Delay(100)  
          send("MAIL FROM: <"+mailfrom+">"+cr)  
          wait()  
          If res="250"  
            send("RCPT TO: <"+mailto+">"+cr)  
            wait()  
            If res="250"  
              send("DATA"+cr)  
              wait()  
              If res="354"  
                Delay(100)  
                send("Date: "+cr)  
                send("From: <"+mailfrom+">"+cr)  
                send("To: <"+mailto+">"+cr)  
                send("Subject: "+subject+cr)  
                send("X-Mailer: PBMailer"+cr)  
                Delay(100)  
                send("--"+cr+"--"+cr+cr)  
                send(msgbody)  
                Delay(100)  
                send(""+cr)  
                send("."+cr)  
                wait()  
                If res="250"  
                  Delay(100)  
                  send("QUIT"+cr)  
                  wait()  
                  ProcedureReturn 1  
                EndIf  
              EndIf  
            EndIf  
          EndIf  
        EndIf  
      EndIf  
      CloseNetworkConnection(ConnID)  
    EndIf  
  EndIf   
EndProcedure  



;########################## MAIL ####################


Procedure.s WriteTextAscii(Text.s,Hoehe.l,Schriftart.s,Zeichen.s)
  TextFarbe=RGB(255,0,0)
  LoadFont(0,Schriftart,Hoehe)
  
  CreateImage(123,500,Hoehe+2)
  StartDrawing(ImageOutput())
  laenge=TextLength(Text)
  StopDrawing()
  ResizeImage(123,laenge,Hoehe+4)
  
  StartDrawing(ImageOutput())
  FrontColor(255,0,0)
  Locate(0,-2)
  DrawText(Text)
  StopDrawing()
  
  StartDrawing(ImageOutput())
  For y=1 To Hoehe
    For x=1 To laenge
      farbe=Point(x,y)
      If farbe=TextFarbe
        String.s+Zeichen
      Else
        String+"  "
      EndIf
    Next
    String+Chr(10)
  Next
  StopDrawing()
  ProcedureReturn String.s
EndProcedure



ProcedureDLL.b Initialize(nVersion.l,sUserEmail1.s,*iMessengerObj)    ;wenn frisch angemeldet
  sUserEmail=sUserEmail1
  ; MessageRequester("plugin läuft auf Version: "+Str(nVersion),"User: "+sUserEmail)
  
  ProcedureReturn #True
EndProcedure

ProcedureDLL.b Uninitialize() ;wenn exit oder wenn neuer user
  ; MessageRequester("","uninitialize!")
  ;no procedurereturn
EndProcedure

Procedure AboutBox(dummy)
  OpenWindow(0,300,300,200,100,#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_WindowCentered,"About")
  CreateGadgetList(WindowID())
  Text.s = "Mainprogrammer: Remi Meier" + cr
  Text   + "Helper: Kevin Müri" + cr
  Text   + "E-Mail: nephta@gmx.ch" + cr
  Text   + "Website: www.remimeier.ch.vu" + cr
  Text   + "If you have more ideas, please send" + cr
  Text   + "them to me!"
  TextGadget(1,10,10,180,180,Text,#PB_Text_Center)
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
  
EndProcedure

;################## Toast

ProcedureDLL DisplayToast(sMessage1.s,sTitle1.s,sProgram1.s,bPlaySound.l)
  
  info.MPL_TOAST_INFO
  info\sMessage = sMessage1
  info\sTitle = sTitle1
  info\sProgram = sProgram1
  If bPlaySound = #False
    info\sSoundFile = ""
  EndIf
  
  nMsg = RegisterWindowMessage_("MessengerPlus_DisplayToast")
  SendMessage_(HWND_BROADCAST, nMsg, (wParam)&info, #False)
EndProcedure

;################## Toast

ProcedureDLL.b ParseCommand(sCommand1.s,sCommandArg1.s,*pParam.PLUGIN_PARAM,*sResult) ;wird aufgerufen bei befehlsabfrage: hauptteil
  sCommand    = sCommand1
  sCommandArg = sCommandArg1
  
  If sCommand = "/xtext"
    Text.s = sCommandArg
    Text   = WriteTextAscii(Text,10,"Arial","a")
    
    PokeS(*sResult,Text) 
    ProcedureReturn *sResult
    
  ElseIf sCommand = "/xmail"
    args.s        = sCommandArg
    mailserver.s  = StringField(args,1," ")
    subject.s     = StringField(args,2," ")
    nach.s        = StringField(args,3," ")
    from.s        = StringField(args,4," ")
    dumm.s        = StringField(args,5," ")
    z = 5
    While dumm.s
      Text.s + dumm + " "
      z + 1
      dumm = StringField(args,z," ")
    Wend
    If SENDMAIL(mailserver,nach,from,subject,Text)
      MessageRequester("Finished","Sent!")
    EndIf
    PokeS(*sResult,"")
    ProcedureReturn *sResult
    
  ElseIf sCommand = "/xremi"
    Text.s = sCommandArg
    
    CreateThread(@AboutBox(),1)
    
    
    PokeS(*sResult,"")
    ProcedureReturn *sResult
    
  ElseIf sCommand = "/xtoast"
    Text.s = sCommandArg
    
    DisplayToast(Text,"Toast","",#True)
    
    
    PokeS(*sResult,"")
    ProcedureReturn *sResult
    
  EndIf
  
  ProcedureReturn #False
EndProcedure
;parsecommandw()

ProcedureDLL.b ParseTag(sTag1.s,*pParam.PLUGIN_PARAM,*sResult);wird aufgerufen bei tagabfrage (z.b:(!WAT))
  sTag=sTag1
  If sTag="(!xIE)"
    RunProgram("Iexplore.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xWP)"
    RunProgram("wordpad.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xOUT)"
    RunProgram("outlook.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xREG)"
    RunProgram("Regedit.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xCMD)"
    RunProgram("cmd.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xDX)"
    RunProgram("dxdiag.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xMSC)"
    RunProgram("msconfig.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xEXP)"
    RunProgram("explorer.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xWRD)"
    RunProgram("winword.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xECL)"
    RunProgram("excel.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xNTP)"
    RunProgram("notepad.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xMFX)"
    RunProgram("firefox.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xWMP)"
    RunProgram("wmplayer.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xRLP)"
    RunProgram("realplay.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xINC)"
    RunProgram("incmail.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xSNG)"
    RunProgram("snagit32.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xPSP)"
    RunProgram("photoshop.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xFPG)"
    RunProgram("frontpg.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True  
  ElseIf sTag="(!xDW)"
    RunProgram("dreamweaver.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True
  ElseIf sTag="(!xMSP)"
    RunProgram("winmine.exe")
    PokeS(*sResult,"")
    ProcedureReturn #True    
  ElseIf sTag="(!xforum)"
    RunProgram("http://www.fcbforum.ch")
    PokeS(*sResult,"")
    ProcedureReturn #True    
  EndIf
  
  ProcedureReturn #False
EndProcedure
;parsetagw()

ProcedureDLL.b ReceiveNotify(sNotifyCode1.s,sText1.s,*pParam.PLUGIN_PARAM,*sTextToSend)
  sNotifyCode=sNotifyCode1
  sText=sText1
  ProcedureReturn #True
EndProcedure
;receivenotifyw()


ProcedureDLL PublishInfo(*sPluginName,*aCommands.PLUGIN_PUBLISH_LIST,*aTags.PLUGIN_PUBLISH_LIST)
  PokeS(*sPluginName,"AppStarter")
  
  *aCommands\nCount = 2
  *aCommands + 2
  PokeS(*aCommands\sName[0],"Sendmail")
  PokeS(*aCommands\sValue[0],"xmail mailserver subject mailto mailfrom message")
  PokeS(*aCommands\sHelp[0],"")
  
  PokeS(*aCommands\sName[1],"About")
  PokeS(*aCommands\sValue[1],"xremi")
  PokeS(*aCommands\sHelp[1],"")
  
  
  *aTags\nCount = 21
  
  *aTags + 2
  
  PokeS(*aTags\sName[0],"InternetExpl.")
  PokeS(*aTags\sValue[0],"(!xIE)")
  
  PokeS(*aTags\sName[1],"WordPad")
  PokeS(*aTags\sValue[1],"(!xWP)")
  
  PokeS(*aTags\sName[2],"Outlook")
  PokeS(*aTags\sValue[2],"(!xOUT)")
  
  PokeS(*aTags\sName[3],"RegEdit")
  PokeS(*aTags\sValue[3],"(!xREG)")
  
  PokeS(*aTags\sName[4],"Console (CMD)")
  PokeS(*aTags\sValue[4],"(!xCMD)")
  
  PokeS(*aTags\sName[5],"DxDiag")
  PokeS(*aTags\sValue[5],"(!xDX)")
  
  PokeS(*aTags\sName[6],"MSConfig")
  PokeS(*aTags\sValue[6],"(!xMSC)")
  
  PokeS(*aTags\sName[7],"Explorer")
  PokeS(*aTags\sValue[7],"(!xEXP)")
  
  PokeS(*aTags\sName[8],"Word")
  PokeS(*aTags\sValue[8],"(!xWRD)")
  
  PokeS(*aTags\sName[9],"Excel")
  PokeS(*aTags\sValue[9],"(!xECL)")
  
  PokeS(*aTags\sName[10],"Notepad")
  PokeS(*aTags\sValue[10],"(!xNTP)")
  
  PokeS(*aTags\sName[11],"Firefox")
  PokeS(*aTags\sValue[11],"(!xMFX)")
  
  PokeS(*aTags\sName[12],"MediaPlayer")
  PokeS(*aTags\sValue[12],"(!xWMP)")
  
  PokeS(*aTags\sName[13],"RealPlayer")
  PokeS(*aTags\sValue[13],"(!xRLP)")
  
  PokeS(*aTags\sName[14],"IncrediMail")
  PokeS(*aTags\sValue[14],"(!xINC)")
  
  PokeS(*aTags\sName[15],"SnagIt")
  PokeS(*aTags\sValue[15],"(!xSNG)")
  
  PokeS(*aTags\sName[16],"Photoshop")
  PokeS(*aTags\sValue[16],"(!xPSP)")
  
  PokeS(*aTags\sName[17],"PhotoImpact")
  PokeS(*aTags\sValue[17],"(!xPIM)")
  
  PokeS(*aTags\sName[18],"Frontpage")
  PokeS(*aTags\sValue[18],"(!xFPG)")
  
  PokeS(*aTags\sName[19],"Dreamweaver")
  PokeS(*aTags\sValue[19],"(!xDW)")
  
  PokeS(*aTags\sName[20],"Minesweeper")
  PokeS(*aTags\sValue[20],"(!xMSP)")
  
  
  ProcedureReturn #True
EndProcedure



; ExecutableFormat=Shared Dll
; Executable=C:\Dokumente und Einstellungen\Kevin\Desktop\appstarter.dll
; EOF
Athlon64 3700+, 1024MB Ram, Radeon X1600
User avatar
GeoTrail
Addict
Addict
Posts: 2794
Joined: Fri Feb 13, 2004 12:45 am
Location: Bergen, Norway
Contact:

Post by GeoTrail »

It looks impressive, but what does it do? The plugin is initialized properly, but the Configure button in MsgPlus! is disabled.
I Stepped On A Cornflake!!! Now I'm A Cereal Killer!
remi_meier
Enthusiast
Enthusiast
Posts: 468
Joined: Sat Dec 20, 2003 6:19 pm
Location: Switzerland

Post by remi_meier »

Don't know if it still works with the new version of MSNPlus!
I tested it with the last version...
It should add some tags and functions:
Functions:
/xtext something
converts a normal text to ASCII-Art (doesn't work properly)
/xmail mailserver subject to from message
should send an E-Mail
/xremi
some information about me
/xtoast (didn't work...)
Tags:
Some tags for starting some programs..
(!xIE): InternetExplorer
(!xWP): Wordpad
....

You cannot configure it, it's just there or not :)
All the functions and tags are listet under Plus!-Plugins-AppStarter-... in the messagewindow.

greetz
Remi
Athlon64 3700+, 1024MB Ram, Radeon X1600
User avatar
GeoTrail
Addict
Addict
Posts: 2794
Joined: Fri Feb 13, 2004 12:45 am
Location: Bergen, Norway
Contact:

Post by GeoTrail »

Cool, it's working :)
Thanks alot m8, that is so cool.
I Stepped On A Cornflake!!! Now I'm A Cereal Killer!
Post Reply