Ping As An ActiveX Object (With VBScript)


Set the Environmental Variables
Makefile

USE_BASECTL=1
Proj = IELnk

# 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)\IELnkIfc.H

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

#define INITOBJECTS                // define the descriptions for our objects
#include "IPServer.H"
#include "ielnkIfc.H"
#include "CtrlObj.H"
#include "Globals.H"
#include "Util.H"
#include <stdio.h>
class CielnkControl : public COleControl, public Iielnk 
{
  public:
    DECLARE_STANDARD_UNKNOWN();
    DECLARE_STANDARD_DISPATCH();
    STDMETHOD(put_Hlink)(THIS_ BSTR val) ;
    STDMETHOD(put_Mode)(THIS_ long val) ;	
    STDMETHOD_(void, Go)(THIS) ;
    CielnkControl(IUnknown *pUnkOuter);
    static IUnknown *Create(IUnknown *);
  private:
    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);
    virtual LRESULT WindowProc( UINT msg, WPARAM wParam, LPARAM lParam);
    virtual BOOL    RegisterClassData(void);
};
DEFINE_GUID(CLSID_ielnkGeneralPage, 0x8221f8a0, 0x984a, 0x11cf, 0xa3, 0xa9, 0x00, 0xa0, 0xc9, 0x03, 0x49, 0x20);
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,"ielnkWndClass",1,0,0,NULL);

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;}
char ccc[100];
struct o
{
unsigned char Ttl,Tos,Flags,OptionsSize,*OptionsData;
};
struct
{
DWORD Address;
unsigned long  Status,RoundTripTime;
unsigned short DataSize,Reserved;
void *Data;                  
struct o  Options;
} E;
HANDLE hIP;WSADATA wsa;HANDLE hIcmp;DWORD *dwIPAddr;struct hostent *phostent;
DWORD d;struct o I;long ii;

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 aa[200];char bb[200];
void abc(char *p){FILE *fp=fopen("z.txt","a+");fprintf(fp,"%s\n",p);fclose(fp);}

IUnknown *CielnkControl::Create(IUnknown *pUnkOuter)
{
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;}
HRESULT CielnkControl::OnDraw(DWORD dvAspect,HDC hdcDraw,LPCRECTL prcBounds,
    LPCRECTL prcWBounds,HDC hicTargetDevice, BOOL  fOptimize)
{
	SetBkMode(hdcDraw, TRANSPARENT);
	SetTextColor(hdcDraw,RGB(0, 0, 255));
	RECT rc;
        rc.left = prcBounds->left;
        rc.top = prcBounds->top;
        rc.right = prcBounds->right;
        rc.bottom = prcBounds->bottom;
        DrawText(hdcDraw,aa,lstrlen(aa),&rc,DT_CENTER | DT_VCENTER);
    return S_OK;
}
LRESULT CielnkControl::WindowProc(UINT   msg,WPARAM wParam,LPARAM lParam)
{    return OcxDefWindowProc(msg, wParam, lParam);}
void CielnkControl::Go(    void)
{
strcpy(aa,"In Go");
struct in_addr in;
hIcmp = LoadLibrary( "ICMP.DLL" );
WSAStartup( 0x0101, &wsa );  
MessageBox(0,bb,bb,0);
phostent = gethostbyname(bb);
dwIPAddr = (DWORD *)( *phostent->h_addr_list );
pIcmpCreateFile=(FARPROC1)GetProcAddress( hIcmp,"IcmpCreateFile");
pIcmpCloseHandle=(FARPROC2)GetProcAddress( hIcmp,"IcmpCloseHandle");
pIcmpSendEcho =(FARPROC3)GetProcAddress( hIcmp,"IcmpSendEcho" );
hIP = pIcmpCreateFile();
sprintf(aa,"ii..%d",ii);
MessageBox(0,aa,aa,0);
if ( ii == 0)
ii=11;
I.Ttl=ii;
pIcmpSendEcho(hIP,*dwIPAddr,0,0,&I,&E,sizeof(E),8000 );
d=E.Address;
phostent = gethostbyaddr((char *)&d,4,PF_INET);
sprintf(aa,"gethostbyaddr %p",phostent );
in.S_un.S_addr = d;
char *p=inet_ntoa(in);
sprintf(aa,"IP Address..%s",p);
if ( phostent  != 0 ) {
sprintf(ccc,"..Name..%s ",phostent->h_name);
}
else
strcpy(ccc,"..Name..null ");
strcat(aa,ccc);
abc(aa);
pIcmpCloseHandle( hIP );
FreeLibrary( hIcmp );
WSACleanup();                                       
InvalidateControl(NULL);
}
STDMETHODIMP  CielnkControl::put_Hlink(BSTR val)
{
MAKE_ANSIPTR_FROMWIDE(tempVal, val);
lstrcpy(bb, tempVal);
InvalidateControl(NULL);
return S_OK;
}
STDMETHODIMP  CielnkControl::put_Mode(long val)
{
ii = val;
return S_OK;
}

IELnk.Odl

#include <olectl.h>
[uuid(7d635f20-984a-11cf-a3a9-00a0c9034920),helpstring("Library"),lcid(0x0000),version(1.0)]
    library ielnkObjects
    {
    importlib("STDOLE32.TLB");
    importlib(STDTYPE_TLB);
    [uuid(7e778e40-984a-11cf-a3a9-00a0c9034920),helpstring("Control"),hidden,dual,odl]
    interface Iielnk : IDispatch
    {
        [id(101), propput]
            HRESULT Hlink([in]  BSTR val);        // methods
        [id(108), propput]
            HRESULT Mode([in]  long val);        // methods
        [id(104)]
            void Go(void);
    };
    [uuid(804d86c0-984a-11cf-a3a9-00a0c9034920),helpstring("Event"),hidden]
    dispinterface DielnkEvents
    {
        properties:
	methods:
    };
    [uuid(80ec37c0-984a-11cf-a3a9-00a0c9034920),helpstring("ielnk control")]
    coclass ielnk
    {
        [default]         interface Iielnk;
	[default, source] dispinterface DielnkEvents;
    };
};

IELnk.rc
1    TYPELIB MOVEABLE PURE   "ielnk.TLB"



IELnk.Def
LIBRARY 	ielnk

EXPORTS         DllRegisterServer
EXPORTS		DllUnregisterServer
EXPORTS		DllCanUnloadNow
EXPORTS		DllGetClassObject


Guids.cpp

#define INITGUID                   // define all the guids.
#include "IPServer.H"
#include "olectl.h"
#include "ielnkIfc.H"

aa.htm

<HTML>
<HEAD>
<TITLE>Hlink Control</TITLE>
</HEAD>
<BODY>
<OBJECT
id=ielnk1
type="application/x-oleobject"
classid="clsid:80EC37C0-984A-11CF-A3A9-00A0C9034920"
CODEBASE="http://www.vijaymukhi.com/vmis/IELnk.Ocx"
width=550
height=30
>
<PARAM NAME="hlink" value="www.microsoft.com">
</OBJECT>
<HR>
Hop No.
<INPUT TYPE=TEXT VALUE="0" NAME="Mode">
<HR>
Name of the Server:
<INPUT TYPE=TEXT VALUE="www.microsoft.com" NAME="Target">
<INPUT TYPE=BUTTON VALUE="Go" NAME="BtnGo">
<SCRIPT LANGUAGE="VBSCRIPT">
Sub BtnGo_OnClick
	ielnk1.mode = Mode.Value
	ielnk1.hlink = Target.Value
	ielnk1.Go()
End Sub
</SCRIPT>
</BODY>
</HTML>

DownLoad the Source Code .
Click and Ping to a Host using Activex Object.


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