vb.net - How to Detect LAN or Adapter that is installed by openVPN? -
i using visual basic 2010. i've installed openvpn , adapter. want make application use adapter openvpn. how can detect it?
i have code delphi. don't understand @ all. this:
// ini adalah bagian untuk mendapatkan nama interface network uses wbemscripting_tlb, activex; type tiwrapper=class public prop:iswbemproperty; constructor create(p:iswbemproperty); end; constructor tiwrapper.create(p: iswbemproperty); begin prop:=p; end; procedure clear(adapters:tstrings); var i:integer; begin i:=1 adapters.count begin adapters.objects[i-1].free; adapters.objects[i-1]:=nil; end; adapters.clear; end; function getpropvalue(sprop:iswbemproperty):string; var svalue:string; count:integer; begin svalue := ''; if varisnull(sprop.get_value) svalue := '<empty>' else case sprop.cimtype of wbemcimtypesint8, wbemcimtypeuint8, wbemcimtypesint16, wbemcimtypeuint16, wbemcimtypesint32, wbemcimtypeuint32, wbemcimtypesint64: svalue := inttostr(sprop.get_value); wbemcimtypestring, wbemcimtypeuint64: if varisarray(sprop.get_value) begin if vararrayhighbound(sprop.get_value, 1) > 0 count := 1 vararrayhighbound(sprop.get_value, 1) svalue := svalue + ' ' + sprop.get_value[count]; end else svalue := sprop.get_value; wbemcimtypedatetime:svalue:=sprop.get_value//datetimetostr(sprop.get_value) else exception.create('unknown type'); end; {case} result:=svalue; end; procedure getadapters(owner:tcomponent; remotemachine,remoteuser,remotepassword:string; adapters:tstrings); var locator: tswbemlocator; sinkclasses: tswbemsink; services: iswbemservices; objectset: iswbemobjectset; sobject: iswbemobject; propset : iswbempropertyset; sprop: iswbemproperty; enum: ienumvariant; tempobj: olevariant; value: cardinal; svalue, classname: string; strquery: widestring; begin classname:='win32_networkadapter'; clear(adapters); locator:=tswbemlocator.create(owner); sinkclasses:=tswbemsink.create(owner); try sinkclasses.cancel; if remotemachine='' remotemachine:='.';// local machine services := locator.connectserver(remotemachine, 'root\cimv2', remoteuser, remotepassword, '', '', 0, nil); try objectset := services.instancesof(classname, wbemflagreturnimmediately or wbemqueryflagshallow, nil); enum := (objectset._newenum) ienumvariant; try while (enum.next(1, tempobj, value) = s_ok) begin sobject := iunknown(tempobj) swbemobject; propset := sobject.properties_; sprop:=propset.item('netconnectionid',0);// caption or systemname // value of property svalue:=getpropvalue(sprop); try if svalue<>'<empty>' begin sprop:=propset.item('netconnectionstatus',0); adapters.addobject(svalue,tiwrapper.create(sprop)); end; sobject:=nil; propset:=nil; sprop:=nil; end; end; {while enum} objectset:=nil; enum:=nil; end; strquery := 'select * __instancecreationevent within 5 targetinstance' + ' isa "'+classname+'"'; services.execnotificationqueryasync(sinkclasses.defaultinterface, strquery, 'wql', 0, nil, nil); strquery := 'select * __instancedeletionevent within 5 targetinstance' + ' isa "'+classname+'"'; services.execnotificationqueryasync(sinkclasses.defaultinterface, strquery, 'wql', 0, nil, nil); services:=nil;// make sure references decreased end; locator.free; sinkclasses.free; end; {try} end; // akhir code mendapatkan interface network
my vb bit rusty (so sure there errors in this), delphi code showed translate following:
function getpropvalue(sprop iswbemproperty) string dim svalue string = "" dim arr() string if sprop.value nothing svalue = "<empty>" else select case sprop.cimtype case wbemcimtypesint8, wbemcimtypeuint8, wbemcimtypesint16, wbemcimtypeuint16, wbemcimtypesint32, wbemcimtypeuint32, wbemcimtypesint64 svalue = cstr(sprop.value) case wbemcimtypestring, wbemcimtypeuint64 if sprop.isarray arr = ctype(sprop.value, array) if arr.getupperbound(0) >= 0 svalue = cstr(arr(0)) count integer = 1 arr.getupperbound(0) svalue = svalue & " " & cstr(arr(count)) next end if else svalue = cstr(sprop.value) end if case wbemcimtypedatetime svalue = cstr(sprop.value) ' datetimetostr(sprop.value) case else throw new exception("unknown type") end select end if getpropvalue = svalue end function procedure getadapters(remotemachine string, remoteuser string, remotepassword string, adapters dictionary<string, iswbemproperty>) dim locator swbemlocator dim sinkclasses iswbemsink dim services iswbemservices dim objectset iswbemobjectset dim propset iswbempropertyset dim sprop iswbemproperty dim svalue string dim strquery string dim classname string = "win32_networkadapter" adapters.clear locator = new swbemlocator; sinkclasses = new swbemsink; sinkclasses.cancel; if remotemachine = "" remotemachine = "." ' local machine services = locator.connectserver(remotemachine, "root\cimv2", remoteuser, remotepassword, "", "", 0, nil) objectset = services.instancesof(classname, wbemflagreturnimmediately or wbemqueryflagshallow, nil) each sobject iswbemobject in objectset propset = sobject.properties_ sprop = propset.item("netconnectionid", 0) svalue = getpropvalue(sprop) if svalue <> "<empty>" sprop = propset.item("netconnectionstatus", 0) adapters.add(svalue, sprop) end if next strquery = "select * __instancecreationevent within 5 targetinstance isa """ & classname & "" services.execnotificationqueryasync(sinkclasses, strquery, "wql", 0, nil, nil) strquery = "select * __instancedeletionevent within 5 targetinstance isa """ & classname & "" services.execnotificationqueryasync(sinkclasses, strquery, "wql", 0, nil, nil); end procedure
Comments
Post a Comment