600分求解2个问题(100)

  • 主题发起人 主题发起人 Avalon
  • 开始时间 开始时间
A

Avalon

Unregistered / Unconfirmed
GUEST, unregistred user!
1 如何启用/禁止本地连接 (不使用Shell32_TLB)2 如何得到本地连接对应的网卡(不通过注册表)(已解决 后面跟帖)3 如何得到本地连接属性中的持续时间 答案为DELPHI VB VC 命令行皆可 每题300 解决问题立即给分
 
1.假设本地连接当前已启用。开机就启用了,关机就禁用了。2.电脑拆掉。所有网卡拿出来。自己选吧。
 
哈哈 ,第三是否需要启动连接后开一个秒表呢
 
至少第一个问题很容易。
 
那就每个问题300分,拆包送分~
 
可以拆开结算 将近4年没上这个论坛了 欢乐了不少嘛
 
第一问结果 不知道VISTA是否能支持unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, ShlObj;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}function GetDisplayName(ShellFolder: IShellFolder; PIDL: PItemIDList; ForParsing: Boolean): string; var StrRet: _STRRET; p: PChar; nFlags: Integer; begin Result := ''; if ForParsing then nFlags := SHGDN_FORPARSING else nFlags := SHGDN_NORMAL; ShellFolder.GetDisplayNameOf(PIDL, nFlags, StrRet); case StrRet.uType of STRRET_CSTR: SetString(Result, StrRet.cStr, lStrLen(StrRet.cStr)); STRRET_OFFSET: begin P := @PIDL.mkid.abID[StrRet.uOffset - SizeOf(PIDL.mkid.cb)]; SetString(Result, P, PIDL.mkid.cb - StrRet.uOffset); end; STRRET_WSTR: Result := StrRet.pOleStr; end; end; procedure ShowLocalAreaConnection(hOwner: HWND);const Flags = SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN;var psf: IShellFolder; pidl: PItemIDList; pedl: IEnumIDList; dwNum: LongWord; pcm: IContextMenu; ici: _CMINVOKECOMMANDINFO; begin SHGetDesktopFolder(psf); SHGetSpecialFolderLocation(hOwner, CSIDL_CONTROLS, pidl); psf.BindToObject(pidl, nil, IID_IShellFolder, Pointer(psf)); psf.EnumObjects(hOwner, Flags, pedl); while pedl.Next(1, pidl, dwNum) = S_OK do begin if GetDisplayName(psf, pidl, False) = '网络连接' then begin psf.BindToObject(pidl, nil, IID_IShellFolder, Pointer(psf)); psf.EnumObjects(hOwner, Flags, pedl); while pedl.Next(1, pidl, dwNum) = S_OK do begin ShowMessage(GetDisplayName(psf, pidl, False)); if Trim(GetDisplayName(psf, pidl, False)) = Trim('本地连接 2') then begin psf.GetUIObjectOf(hOwner, 1, pidl, IID_IContextMenu, nil, pcm); FillChar(ici, SizeOf(_CMINVOKECOMMANDINFO), #0); with ici do begin cbSize := SizeOf(_CMINVOKECOMMANDINFO); hwnd := hOwner; lpVerb := MakeIntResource(8); //lpVerb := MakeIntResource(1); //lpVerb := MakeIntResource(1); nShow := SW_SHOWNORMAL; end; pcm.InvokeCommand(ici); Break; end; end; Break; end; end; end;procedure TForm1.Button1Click(Sender: TObject);begin ShowLocalAreaConnection(Self.Handle);end;end.
 
问题1禁用本地连接,在WIN中的作用就是禁用网卡问题2中,本地连接数是和网卡一一对应的,有几个本地连接那就会有几个网卡问题3,可以用性能分析器提供的接口
 
帮顶关注中。。。。。。。。。。。。
 
function Tloginfrm.GetMacAddr: string;var NCB : TNCB ; // Netbios control block //NetBios控制块 ADAPTER : TADAPTERSTATUS ; // Netbios adapter status//取网卡状态 LANAENUM : TLANAENUM ; // Netbios lana i,j: Integer; Macstr:String;begin ZeroMemory(@NCB,SizeOf(NCB)); NCB.ncb_command := Chr(NCBENUM); NetBios(@NCB); NCB.ncb_buffer := @LanaEnum; NCB.ncb_length := SizeOf(LanaEnum); NCB.ncb_command := Chr(NCBENUM); NetBios(@NCB); for i:=0 to Ord(LanaEnum.length)-1 do begin ZeroMemory(@NCB,SizeOf(NCB)); NCB.ncb_command := Chr(NCBRESET); NCB.ncb_lana_num := LanaEnum.lana; NetBios(@NCB); ZeroMemory(@NCB,SizeOf(NCB)); NCB.ncb_command := Chr(NCBASTAT); NCB.ncb_lana_num := LanaEnum.lana; StrPCopy(NCB.ncb_callname,'*'); NCB.ncb_buffer := @Adapter; NCB.ncb_length := SizeOf(Adapter); NetBios(@NCB); macstr:=''; for j:=0 to 5 do begin macstr:=macstr+HexBL(Byte(Adapter.adapter_address[j])); end; end; //=end of for ...=/ Result:=macStr;end ;
 
自己补充下以上需要 uses NB30还丢了 function HexBL(by: Byte): String; begin Result := Format('%x', [by]); if Length(Result) < 2 then Result := '0' + Result;end;疑问 : NetBios(@NCB);怎么只能取到一块网卡的信息?
 
每日一顶使用GetIpForwardTable 得到 MibIPForwardTable在从MibIPForwardTable 得到 TMibIPForwardRow里面的dwForwardAge就是持续时间 单位是秒
 
楼主甭顶了,现成的示例,同时解决1、2两个问题,我就不往这上贴了:http://www.2ccc.com/article.asp?articleid=3061
 
你的例子不符合我的要求 这是类似设备管理器的解决方式不过用来浏览网卡的真实情况还是不错的 是个不错的处理思路建议但我要求的是起停本地连接 而非网卡 而且用该方式禁止网卡后 在网络连接中貌似是无法启动了,同理如果我从网络连接或者设备管理器禁掉了网卡后,用这个例子是启动不起来的。最后就是例子写的还有点问题Result:=((Status and DN_DISABLEABLE)<>0) and (CM_PROB_HARDWARE_DISABLED <> Problem);应为Result:=not (((Status and DN_HAS_PROBLEM)<>0) and (CM_PROB_DISABLED = Problem));否则状态永远取的不对如今这坛子里找个答案比以前算是困难多了 这帖子实在没人理过几天我就结了吧 唉....
 
算了 结了吧
 
后退
顶部