DownLoad the Source Code .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>
Move back to the Vijay Mukhi's Technology Cornucopia Page to learn more about the other new Internet Technologies.