HanDs
管理员

[Delphi文章] 实现XP中“本地连接”的启用和禁用 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

(******************************************************************************
*   CopyRight (c) By 姚佩云 2004
*   All Right Reserved
*   Email : [email protected] www.jynx.com.cn
*   Date    :
*       New Develop   : 2004-4-8
*   Description :
*       这是一个禁用、启用网卡的例子,实际上通过shell可以控制整个界面,参考的网上资料
*       需要先引用 Microsoft Shell Controls And Automation(Shell32.dll)对应delphi声明 Shell32_TLB.pas
*   Export  :
*       GetNetLinkList
*       ExcNetLinkMenu
*   首发大富翁(www.delphibbs.com)blog,转载请保留
******************************************************************************)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Shell32_TLB, StdCtrls, Menus;

type
TForm1 = class(TForm)
   Button1: TButton;
   ComboBox1: TComboBox;
   Button2: TButton;
   Button3: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
private
   { Private declarations }
public
   { Public declarations }
end;

 
var
Form1: TForm1;

implementation

{$R *.dfm}


{++

Routine Description:

   取本机所有网络链接列表

Arguments:

   OUT list - 取得的网络链接列表

Return Value:

   BOOLEAN - 执行是否成功

--}

function GetNetLinkList(var list:TStrings):BOOLEAN;
var
   Shell:TShell;
   ControlPanel:Folder;
   Item:FolderItem;
   i:integer;
begin

   Result:= FALSE;
   if list = nil then
       exit;

   Shell:=TShell.Create(Application);
   if Shell = nil then
       exit;

   ControlPanel:=Shell.NameSpace(ssfCONTROLS);
   for i:=0 to ControlPanel.items.Count -1 do
   begin
       Item:=ControlPanel.items.Item(i);
       if (Item.Name = '网络和拨号连接') then  //如果是英文的windows则Name也需是英文的
       begin
           ControlPanel:=Folder(Item.GetFolder);
           break;
       end;
   end;

   for i:=0 to ControlPanel.items.count-1 do
   begin
       Item:= ControlPanel.items.Item(i);
       List.Add(Item.Name);
   end;
   FreeAndNil(shell);

   Result:= TRUE;
end;


{++

Routine Description:

   执行 本地网络链接 的菜单命令(包括禁用、启用)

Arguments:

   IN AdapterName - 网络链接名称
   IN MenuName - 菜单名称

Return Value:

   BOOLEAN - 执行是否成功

--}

function ExcNetLinkMenu(const AdapterName,MenuName:String):BOOLEAN;
var
   Shell:TShell;
   ControlPanel:Folder;
   Item:FolderItem;
   i,j:integer;
   Verb:FolderItemVerb;
begin

   Result:= FALSE;

   Shell:=TShell.Create(Application);
   if Shell = nil then
       exit;

   ControlPanel:=Shell.NameSpace(ssfCONTROLS);
   for i:=0 to ControlPanel.items.Count -1 do
   begin
       Item:=ControlPanel.items.Item(i);
       if (Item.Name = '网络和拨号连接') then  //如果是英文的windows则Name也需是英文的
       begin
           ControlPanel:=Folder(Item.GetFolder);
           break;
       end;
   end;

   for i:=0 to ControlPanel.items.count-1 do
   begin
       Item:=ControlPanel.items.Item(i);
       if (Item.Name = AdapterName) then  //如果是英文的windows则Name也需是英文的
       begin
           for j:=0 to Item.Verbs.Count -1 do
           begin
               Verb:=Item.Verbs.Item(j);
               if (Verb.Name = MenuName) then
               begin
                   Verb.DoIt ;
                   Result:=TRUE;
                   break;
               end;
           end;
           break;
       end;
   end;

   FreeAndNil(shell);

end;


procedure TForm1.Button1Click(Sender: TObject);
var
   list:TStrings;
begin
   List:=TStringList.Create ;
   GetNetLinkList(List);
   ComboBox1.Items:=List;
   FreeAndNil(List);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   ExcNetLinkMenu('本地连接 2','启用(&A)');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   ExcNetLinkMenu('本地连接 2','禁用(&B)');
end;

end.

 


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
实现 X P
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组
快速回复