Hear Your Mail ( As An ActiveX Object )


Set the Environmental Variables

Note: Speech.h will be in the current directory


Makefile

USE_BASECTL=1
Proj = IELnk6

# pull in the master SDK makefile that defines all of the macros
#  and all of the build rules

!include <INetSDK.Mak>

all: $(ObjDir)\$(Proj).Ocx Register

$(ObjDir)\$(Proj).Ocx: $(@R).Obj $(@R).Res $(ObjDir)\Guids.Obj \

$(ObjDir)\$(Proj).Res: $(@B).Rc $(@R).Tlb  $(ObjDir)\$(Proj).tlb

$(ObjDir)\Guids.Obj: $(@B).Cpp c:\inetsdk\samples\basectl\Include\IPServer.H  \
                                $(@D)\IELnk6Ifc.H

$(ObjDir)\IELnk6.Obj: $(@B).Cpp c:\inetsdk\samples\basectl\Include\IPServer.H \
         c:\inetsdk\samples\basectl\Include\LocalSrv.H    \
         $(@D)\IELnk6Ifc.H c:\inetsdk\samples\basectl\Include\CtrlObj.H  \
         c:\inetsdk\samples\basectl\Include\Globals.H \
        c:\inetsdk\samples\basectl\Include\Util.H        \
         



IELnk6.cpp

#define INITOBJECTS                // define the descriptions for our objects
#include "IPServer.H"
#include "ielnk6Ifc.H"
#include "CtrlObj.H"
#include "Globals.H"
#include "Util.H"
#include <stdio.h>
#include <windows.h>
#include <objbase.h>
#include <objerror.h>
#include <ole2ver.h>
#include "speech.h"

void abc(char *p){FILE *fp=fopen("z.txt","a+");fprintf(fp,"%s\n",p);fclose(fp);}
struct sockaddr_in A;WSADATA W;SOCKET S;char aa[60000];int i;struct hostent *H;
char R[60000];
int ff=0;long tot;
void printlett();
char nc[5000];
class CielnkControl : public COleControl, public Iielnk
{
  public:
   DECLARE_STANDARD_UNKNOWN();
    DECLARE_STANDARD_DISPATCH();
    long _stdcall put_Hlink (BSTR val) ;
    STDMETHOD(put_Mode)(BSTR val) ;
    STDMETHOD(get_stat)(THIS_ long FAR* val) ;
    STDMETHOD(get_text)(THIS_ BSTR FAR* val) ;
    STDMETHOD_(void, Go)(THIS) ;
    STDMETHOD_(void,quit)(THIS);
    STDMETHOD_(void,next)(THIS);
    STDMETHOD_(VOID,prev)(THIS);
    CielnkControl(IUnknown *pUnkOuter);
    static IUnknown *Create(IUnknown *);
    STDMETHOD(LoadBinaryState)(IStream *pStream);
    STDMETHOD(SaveBinaryState)(IStream *pStream);
    STDMETHOD(LoadTextState)(IPropertyBag *pPropertyBag, IErrorLog *pErrorLog);
    STDMETHOD(SaveTextState)(IPropertyBag *pPropertyBag, BOOL fWriteDefault);
    STDMETHOD(OnDraw)(DWORD dvaspect, HDC hdcDraw, LPCRECTL prcBounds, LPCRECTL prcWBounds, HDC hicTargetDev, BOOL fOptimize)
    {    return S_OK;}
    virtual LRESULT WindowProc( UINT msg, WPARAM wParam, LPARAM lParam);
    virtual BOOL    RegisterClassData(void);
};
DEFINE_CONTROLOBJECT(ielnk, &CLSID_ielnk,"ielnkCtl", CielnkControl::Create, 1,&IID_Iielnk,"ielnk.HLP",&DIID_DielnkEvents,OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|OLEMISC_RECOMPOSEONRESIZE|OLEMISC_CANTLINKINSIDE|OLEMISC_INSIDEOUT,0,0,"ielnkWn
dClass",1,0,0,NULL);
char ii[100],jj[100] ;
const CLSID *g_pLibid = &LIBID_ielnkObjects;
WNDPROC g_ParkingWindowProc = NULL;
const VARIANT_BOOL g_fSatelliteLocalization =  FALSE;
LCID  g_lcidLocale = MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT);
const WCHAR g_wszLicenseKey [] = L"";
const WCHAR g_wszLicenseLocation [] = L"";
OBJECTINFO g_ObjectInfo[] = {CONTROLOBJECT(ielnk),EMPTYOBJECT, EMPTYOBJECT  };
const char g_szLibName[] = "ielnk";
void InitializeLibrary(void){}
void UninitializeLibrary(void){}
BOOL CheckForLicense(void) {  return TRUE;}
BOOL RegisterData(void){ return TRUE;}
BOOL UnregisterData(void){ return TRUE;}
BOOL      CheckLicenseKey(LPWSTR wszCheckme){ return TRUE;}
BSTR      GetLicenseKey(void){return NULL;}

HANDLE hIP;WSADATA wsa;HANDLE hIcmp;DWORD *dwIPAddr;struct hostent *phostent;
DWORD d;
HANDLE ( WINAPI *pIcmpCreateFile )( VOID );
BOOL ( WINAPI *pIcmpCloseHandle )( HANDLE );
DWORD (WINAPI *pIcmpSendEcho)(HANDLE,DWORD,LPVOID,WORD,LPVOID,LPVOID,DWORD,DWORD);
typedef HANDLE (WINAPI *FARPROC1)(void);
typedef BOOL (WINAPI *FARPROC2)(HANDLE );
typedef DWORD (WINAPI *FARPROC3)(HANDLE,DWORD,LPVOID,WORD,LPVOID,LPVOID,DWORD,DWORD);
WNDCLASS wndclass;char bb[200];


class CIVT : public IVTxtNotifySink
{
    public:
    STDMETHODIMP         QueryInterface (REFIID, LPVOID FAR *);
    STDMETHODIMP_(ULONG) AddRef(void);
    STDMETHODIMP_(ULONG) Release(void);
    STDMETHODIMP AttribChanged    (DWORD);
    STDMETHODIMP Visual           (WCHAR, char, DWORD, PTTSMOUTH);
    STDMETHODIMP Speak            (PSTR, PSTR, DWORD);
    STDMETHODIMP SpeakingStarted  (void);
    STDMETHODIMP SpeakingDone     (void);
};
PIVOICETEXT gpIVTxt;CIVT * gpVTxtNotifySink; 
STDMETHODIMP CIVT::QueryInterface (REFIID riid, LPVOID *ppv)
{
	*ppv = NULL;
	if (IsEqualIID (riid, IID_IUnknown) || IsEqualIID(riid,IID_IVTxtNotifySink))
	{
                abc("CIVT::QueryInterface 1");
		*ppv = (LPVOID) this;
		AddRef();
		return NOERROR;
	}
	return E_NOINTERFACE;
}
STDMETHODIMP_ (ULONG) CIVT::AddRef (void){       return 0;}
STDMETHODIMP_(ULONG) CIVT::Release (void){               return 0;}
STDMETHODIMP CIVT::AttribChanged(DWORD dwAttribute){     return NOERROR;}
STDMETHODIMP CIVT::SpeakingStarted(void){return 0;}
STDMETHODIMP CIVT::SpeakingDone(void){return 0;}
STDMETHODIMP CIVT::Visual(WCHAR cIPAPhoneme, char cEnginePhoneme, DWORD dwFlags, PTTSMOUTH pTTSMouth){   return NOERROR;}
STDMETHODIMP CIVT::Speak(PSTR pszMessage,PSTR pszApplication,DWORD dwTyep)
{
	sprintf(aa,"pszMessage %s pszApplication %s dwTyep %ld",
		pszMessage,pszApplication,dwTyep);
	abc(aa);
	return NOERROR;
}


IUnknown *CielnkControl::Create(    IUnknown *pUnkOuter)
{
CoInitialize(NULL);
CoCreateInstance(CLSID_VTxt, NULL,CLSCTX_LOCAL_SERVER, 
                      IID_IVoiceText, (void **)&gpIVTxt);
gpVTxtNotifySink = new CIVT;
gpIVTxt->Register(NULL,"SRClock",gpVTxtNotifySink,
         IID_IVTxtNotifySink, VTXTF_ALLMESSAGES, NULL);
CielnkControl *pNew = new CielnkControl(pUnkOuter);
return pNew->PrivateUnknown();
}
CielnkControl::CielnkControl(    IUnknown *pUnkOuter)
: COleControl(pUnkOuter, 0, (IDispatch *)this)
{
}
BOOL CielnkControl::RegisterClassData(    void)
{
    wndclass.lpfnWndProc    = COleControl::ControlWindowProc;
    wndclass.hInstance      = g_hInstance;
    wndclass.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
    wndclass.lpszClassName  = WNDCLASSNAMEOFCONTROL(0);
    return RegisterClass(&wndclass);
}
STDMETHODIMP CielnkControl::LoadTextState(IPropertyBag *pPropertyBag,IErrorLog    *pErrorLog){    return S_OK;}
STDMETHODIMP CielnkControl::LoadBinaryState(    IStream *pStream){    return S_OK;}
STDMETHODIMP CielnkControl::SaveTextState(    IPropertyBag *pPropertyBag,    BOOL          fWriteDefaults){    return S_OK;}
STDMETHODIMP CielnkControl::SaveBinaryState(    IStream *pStream){      return S_OK;}
LRESULT CielnkControl::WindowProc(UINT   msg,WPARAM wParam,LPARAM lParam){    return OcxDefWindowProc(msg, wParam, lParam);}
void CielnkControl::Go(void)
{
MessageBox(0,"in Go","In Go",0);
MessageBox(0,jj,"name",0);
MessageBox(0,ii,"password",0);
WSAStartup (0x101, &W);
S = socket(AF_INET, SOCK_STREAM,0);
A.sin_family=AF_INET;
A.sin_port = htons(110);
H=gethostbyname("giasbm01.vsnl.net.in");
A.sin_addr.s_addr=*((unsigned long *) H->h_addr);
i=connect(S,(struct sockaddr *) &A,sizeof(A));
sprintf(aa,"connect %d",i);
abc(aa);
i=recv(S,R,10000,0);
sprintf(aa,"recv %d R %s",i,R);
abc(aa);

strcpy(R,"USER ");
strcat(R,jj);
strcat(R,"\r\n");
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d ",i);
abc(aa);
strset(R,' ');
i=recv(S,R,10000,0);
sprintf(aa,"recv %d R %s",i,R);
abc(aa);

strcpy(R,"PASS ");
strcat(R,ii);
strcat(R,"\r\n");
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d ",i);
abc(aa);
strset(R,' ');
i=recv(S,R,10000,0);
sprintf(aa,"recv %d R %s",i,R);
abc(aa);

strcpy(R,"STAT\r\n");
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d ",i);
abc(aa);
strset(R,' ');
i=recv(S,R,10000,0);
tot = atol(R+4);
int totbytes = atoi(R+6);
sprintf(aa,"recv %d R== %s total no. of mails = %ld ..total bytes=%d",i,R,tot,totbytes);
abc(aa);
MessageBox(0,aa,"Before RETR",0);
if(tot != 0)
{
ff = 1;
printlett();
}
}

void printlett()
{
char ee[100];
strcpy(R,"RETR ");
itoa(ff,ee,10);
strcat(R,ee);
strcat(R,"\r\n");
MessageBox(0,R,R,0);
i=send(S,R,strlen(R),0);
sprintf(aa,"mailno..%d..send %d ",ff,i);
abc(aa);
MessageBox(0,aa,aa,0);
strset(R,' ');
i=recv(S,R,100,0);
nc[0] = '\0';
sprintf(aa,"recv chars = %d ",i);
abc(aa);
MessageBox(0,aa,aa,0);
int cnt = atoi(R+15);
sprintf(aa,"R...... %s  no.of chars = %d",R,cnt);
abc(aa);
MessageBox(0,aa,aa,0);
int ct=0;
i=0;
while (ct <= cnt)
{
sprintf(aa,"ct=%d..cnt=%d",ct,cnt);
MessageBox(0,aa,aa,0);
strset(R,' ');
i=recv(S,R,cnt,0);
sprintf(aa,"recv chars = %d ",i);
strcat(nc,R);
abc(aa);
MessageBox(0,aa,aa,0);
sprintf(aa,"R...... %s",R);
abc(aa);
ct=ct+i;
}
strcat(nc,"\0");
MessageBox(0,aa,aa,0);
}
void CielnkControl::quit()
{
strcpy(R,"QUIT\r\n");
i=send(S,R,strlen(R),0);
sprintf(aa,"send %d ",i);
abc(aa);
MessageBox(0,"all","over",0);
}

void CielnkControl::next()
{
if ( ff < tot)
{
ff++;
printlett();
}
}
void CielnkControl::prev()
{
if ( ff > 1)
{
ff--;
printlett();
}
}

STDMETHODIMP  CielnkControl::put_Hlink(BSTR val)
{
MAKE_ANSIPTR_FROMWIDE(tempVal, val);
lstrcpy(ii, tempVal);
return S_OK;
}
STDMETHODIMP  CielnkControl::put_Mode(BSTR val)
{
MAKE_ANSIPTR_FROMWIDE(tempVal, val);
lstrcpy(jj, tempVal);
return S_OK;
}
STDMETHODIMP  CielnkControl::get_stat (long FAR * t) 
{
*t = tot;
return S_OK;
}

STDMETHODIMP CielnkControl::get_text(BSTR FAR * val)
{
//gpIVTxt->Speak( "hello", 0, NULL );
gpIVTxt->Speak( nc, 0, NULL );
MessageBox(0,"hi","hi",0);
BSTR pq=BSTRFROMANSI(nc);
*val = pq;
return S_OK;
}

Giuds.cpp

#define INITGUID                   // define all the guids.
#include "IPServer.H"
#include "olectl.h"
#include "ielnk6Ifc.H"
#include <objbase.h>
#include <objerror.h>
#include <ole2ver.h>
#include "speech.h"

IELnk6.Def

LIBRARY         ielnk6

EXPORTS         DllRegisterServer
EXPORTS		DllUnregisterServer
EXPORTS		DllCanUnloadNow
EXPORTS		DllGetClassObject


IELnk6.Odl

#include <olectl.h>
[uuid(7d635f26-984a-11cf-a3a9-00a0c9034920),helpstring("Library"),lcid(0x0000),version(1.0)]
    library ielnkObjects
    {
    importlib("STDOLE32.TLB");
    importlib(STDTYPE_TLB);
    [uuid(7e778e46-984a-11cf-a3a9-00a0c9034920),helpstring("Control"),hidden,dual,odl]
    interface Iielnk : IDispatch
    {
        [id(101), propput]
            HRESULT Hlink([in]  BSTR val);        // methods

        [id(102), propget]
            HRESULT stat([out, retval] long * val);

        [id(103), propget]
            HRESULT text([out, retval] BSTR *val);

        [id(108), propput]
            HRESULT Mode([in]  BSTR val);        // methods
        [id(109)]
            void  next();        // methods
        [id(110)]
            void  prev();        // methods
        [id(104)]
            void Go(void);
        [id(105)]
            void quit(void);

    };
    [uuid(804d86c6-984a-11cf-a3a9-00a0c9034920),helpstring("Event"),hidden]
    dispinterface DielnkEvents
    {
        properties:
	methods:
    };
    [uuid(80ec37c6-984a-11cf-a3a9-00a0c9034920),helpstring("ielnk control")]
    coclass ielnk
    {
        [default]         interface Iielnk;
	[default, source] dispinterface DielnkEvents;
    };
};

IELnk6.Rc

1    TYPELIB MOVEABLE PURE   "ielnk6.TLB"

IELnk6Ifc.h

/* This header file machine-generated by mktyplib.exe */
/* Interface to type library: ielnkObjects */

#ifndef _ielnkObjects_H_
#define _ielnkObjects_H_

DEFINE_GUID(LIBID_ielnkObjects,0x7D635F26L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);

DEFINE_GUID(IID_Iielnk,0x7E778E46L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);

/* Definition of interface: Iielnk */
#undef INTERFACE
#define INTERFACE Iielnk

DECLARE_INTERFACE_(Iielnk, IDispatch)
{
#ifndef NO_BASEINTERFACE_FUNCS

    /* IUnknown methods */
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    /* IDispatch methods */
    STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR* pctinfo) PURE;

    STDMETHOD(GetTypeInfo)(
      THIS_
      UINT itinfo,
      LCID lcid,
      ITypeInfo FAR* FAR* pptinfo) PURE;

    STDMETHOD(GetIDsOfNames)(
      THIS_
      REFIID riid,
      OLECHAR FAR* FAR* rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID FAR* rgdispid) PURE;

    STDMETHOD(Invoke)(
      THIS_
      DISPID dispidMember,
      REFIID riid,
      LCID lcid,
      WORD wFlags,
      DISPPARAMS FAR* pdispparams,
      VARIANT FAR* pvarResult,
      EXCEPINFO FAR* pexcepinfo,
      UINT FAR* puArgErr) PURE;
#endif

    /* Iielnk methods */
    STDMETHOD(put_Hlink)(THIS_ BSTR val) PURE;
    STDMETHOD(get_stat)(THIS_ long FAR* val) PURE;
    STDMETHOD(get_text)(THIS_ BSTR FAR* val) PURE;
    STDMETHOD(put_Mode)(THIS_ BSTR val) PURE;
    STDMETHOD_(void, next)(THIS) PURE;
    STDMETHOD_(void, prev)(THIS) PURE;
    STDMETHOD_(void, Go)(THIS) PURE;
    STDMETHOD_(void, quit)(THIS) PURE;
};

DEFINE_GUID(DIID_DielnkEvents,0x804D86C6L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);

/* Definition of dispatch interface: DielnkEvents */
#undef INTERFACE
#define INTERFACE DielnkEvents

DECLARE_INTERFACE_(DielnkEvents, IDispatch)
{
#ifndef NO_BASEINTERFACE_FUNCS

    /* IUnknown methods */
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    /* IDispatch methods */
    STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR* pctinfo) PURE;

    STDMETHOD(GetTypeInfo)(
      THIS_
      UINT itinfo,
      LCID lcid,
      ITypeInfo FAR* FAR* pptinfo) PURE;

    STDMETHOD(GetIDsOfNames)(
      THIS_
      REFIID riid,
      OLECHAR FAR* FAR* rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID FAR* rgdispid) PURE;

    STDMETHOD(Invoke)(
      THIS_
      DISPID dispidMember,
      REFIID riid,
      LCID lcid,
      WORD wFlags,
      DISPPARAMS FAR* pdispparams,
      VARIANT FAR* pvarResult,
      EXCEPINFO FAR* pexcepinfo,
      UINT FAR* puArgErr) PURE;
#endif
};

DEFINE_GUID(CLSID_ielnk,0x80EC37C6L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20);

#ifdef __cplusplus
class ielnk;
#endif

#endif




IELnk6.htm

<HTML>
<HEAD>
<TITLE>Hlink Control</TITLE>
</HEAD>
<BODY>
<OBJECT
id=ielnk1
type="application/x-oleobject"
classid="clsid:80EC37C6-984A-11CF-A3A9-00A0C9034920">
<PARAM NAME="hlink" value="http://www.microsoft.com"
CODEBASE="http://www.vijaymukhi.com/vmis/IELnk6.Ocx">
</OBJECT><br>

Name:      
<INPUT TYPE=TEXT size=25 NAME="nm"><p>
Password :
<INPUT TYPE=PASSWORD size=25 NAME="passwd"><p>
<INPUT TYPE=BUTTON VALUE="Submit" NAME="BtnGo"><p>
Status:      
<input type=text size=5 name ="stat"><p>
<INPUT TYPE=BUTTON VALUE="Next" NAME="Next">
<INPUT TYPE=BUTTON VALUE="Previous" NAME="Prev">
<INPUT TYPE=BUTTON VALUE="Quit" NAME="Quit">
<p>
<textarea name=txt1 rows=5 cols=80></textarea><p>
<SCRIPT LANGUAGE="VBSCRIPT">
Sub BtnGo_OnClick
        ielnk1.mode = nm.Value
        ielnk1.hlink = passwd.Value
        ielnk1.Go()
        stat.Value=ielnk1.stat
        txt1.Value = ielnk1.text
End Sub
Sub Next_OnClick
        ielnk1.next()
        txt1.Value = ielnk1.text
End Sub
Sub Prev_OnClick
        ielnk1.prev()
        txt1.Value = ielnk1.text
End Sub

Sub Quit_OnClick
        ielnk1.quit()
End Sub

</SCRIPT>

</BODY>
</HTML>



Have any suggestions, comments, ideas, cracked code, feedback. Feel free to get in touch with us.

Move back to the Vijay Mukhi's Technology Cornucopia Page to learn more about the other new Internet Technologies.


Vijay Mukhi's Computer Institute
VMCI, B-13, Everest Building, Tardeo, Bombay 400 034, India
E-mail:vmukhi@giasbm01.vsnl.net.in Tel : 91-22-496 4335 /6/7/8/9 Fax : 91-22-307 28 59
http://www.vijaymukhi.com