在2000系统上运行ok,在xp上不行,在2000系统中combobox列表显示本地连接和本地连接 6,但是在xp系统中列表显示的是控制面板中的所有东西,而且编译时提示没有定义tshell。
在component-import activex中也添加microsoft shell controls and automation(1.0)了
请教各位高手,不胜感激,代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Shell32_TLB, StdCtrls, shellapi;type
TForm1 = class(TForm)
Button: TButton;
ComboBox: TComboBox;
Button2: TButton;
Button3: TButton;
Button1: TButton;
Button4: TButton;
procedure ButtonClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
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.ButtonClick(Sender: TObject);
var
list:TStrings;
begin
List:=TStringList.Create ;
GetNetLinkList(List);
ComboBox.Items:=List;
FreeAndNil(List);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ExcNetLinkMenu(Trim(ComboBox.Text),'启用(&A)');
end;procedure TForm1.Button3Click(Sender: TObject);
begin
ExcNetLinkMenu(Trim(ComboBox.Text),'禁用(&B)');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ExcNetLinkMenu('本地连接' ,'启用(&A)');
ExcNetLinkMenu('本地连接 6' ,'禁用(&B)');
end;procedure TForm1.Button4Click(Sender: TObject);
begin
ExcNetLinkMenu('本地连接 6' ,'启用(&A)');
ExcNetLinkMenu('本地连接' ,'禁用(&B)');
end;end.
在component-import activex中也添加microsoft shell controls and automation(1.0)了
请教各位高手,不胜感激,代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Shell32_TLB, StdCtrls, shellapi;type
TForm1 = class(TForm)
Button: TButton;
ComboBox: TComboBox;
Button2: TButton;
Button3: TButton;
Button1: TButton;
Button4: TButton;
procedure ButtonClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
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.ButtonClick(Sender: TObject);
var
list:TStrings;
begin
List:=TStringList.Create ;
GetNetLinkList(List);
ComboBox.Items:=List;
FreeAndNil(List);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ExcNetLinkMenu(Trim(ComboBox.Text),'启用(&A)');
end;procedure TForm1.Button3Click(Sender: TObject);
begin
ExcNetLinkMenu(Trim(ComboBox.Text),'禁用(&B)');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ExcNetLinkMenu('本地连接' ,'启用(&A)');
ExcNetLinkMenu('本地连接 6' ,'禁用(&B)');
end;procedure TForm1.Button4Click(Sender: TObject);
begin
ExcNetLinkMenu('本地连接 6' ,'启用(&A)');
ExcNetLinkMenu('本地连接' ,'禁用(&B)');
end;end.
解决方案 »
- 如果你手上有个程序代码,要你修改,你会如何着手?
- 怎样在COMBOBOX中显示某个SQLERVER服务器中的数据库列表
- 关于声卡数据的读取问题!
- 一个关于dll的问题,各位兄弟姐妹帮帮忙!
- 如何取得memo中的一行?急用中!
- 问一个调用函数的简单问题。在edit输入函数名调用函数。该如何做
- Access存入图片大小问题
- 经过一个半月的灌水,终于有一颗星了,放分200------18点准时结帐。
- 各位大侠,一个非常简单的问题??=======送分!
- ************************一段代码,请大虾解释一下为什么没有执行************************
- ADO多表关联连结到DBGRID,但在DBGRID上的操作只想对一个表进行操作,如何解决.
- 求一条在销售汇总报表中显示库存的语句
ExcNetLinkMenu('本地连接 6' ,'启用(&A)');
ExcNetLinkMenu('本地连接' ,'禁用(&B)'); 名称要完全一致的。