首页
社区
课程
招聘
如何调用右键菜单,请教高手
发表于: 2006-7-12 14:45 9933

如何调用右键菜单,请教高手

2006-7-12 14:45
9933
收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 259
活跃值: (26)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
紧急,请高手指教,谢谢
2006-7-12 15:21
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
HKEY_CLASSES_ROOT\*\shell\....\command
2006-7-12 20:29
0
雪    币: 259
活跃值: (26)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
上面好像是修改注册表吧,我的意思是在我自己写的程序里面写上路径,然后点一个按钮,效果跟鼠标对着文件点是一样的
2006-7-12 20:43
0
雪    币: 259
活跃值: (26)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
2006-7-12 20:49
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
PEiD和OD都可以设置的。
2006-7-12 20:49
0
雪    币: 259
活跃值: (26)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
7
哎,都不是想要的答案,不过还是谢谢
2006-7-12 22:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
能支持右键的程序都是支持带参数运行,你说的调用右键菜单中的功能,实际等同于让程序带命令参数启动运行。比如你想调用PEiD扫描d:\a.exe,实际上只要调用ShellExecute函数,将d:\a.exe当成参数调用PEiD程序就行了。
2006-7-13 00:59
0
雪    币: 259
活跃值: (26)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
9
是否能举个例子,我调用的是一个dll文件,不是exe,谢谢,十分感谢
2006-7-13 10:47
0
雪    币: 259
活跃值: (26)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
10
ShellExecute(0, "SUShell.dll", "d:\ddd.txt", "", "", 1)

还是不行,啊,哎
2006-7-13 10:54
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
11
引用 Microsoft Shell Controls And Automation(Shell32.dll)
2006-7-13 12:03
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
12
具体例子:

(******************************************************************************
*   CopyRight (c) By 姚佩云 2004
*   All Right Reserved
*   Email : i_rock_1001@163.com 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.
2006-7-13 12:03
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
13
VB中应该更方便实现了!
2006-7-13 12:04
0
雪    币: 259
活跃值: (26)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
14
ShellExecute(Me.hwnd, "open", "C:\CrackTools\peid v0.94_china\peid.exe", "d:\SUShell.dll", 0, 1)
这个可以
但是如果文件是DLL的话就不行
ShellExecute(Me.hwnd, "open", "c:\SUShell.dll", "d:\SUShell.dll", 0, 1)
谢谢
2006-7-13 12:14
0
雪    币: 259
活跃值: (26)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
15
感谢,不过还是自己先研究一下DELPHI吧,如果有VB的就好了,感谢
2006-7-13 12:23
0
雪    币: 212
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
如果是DLL文件用CreateProcess函数试试
2006-7-13 15:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
楼上的看错了吧,lz说的是在程序中调用dll文件,而不是crack
使用动态加载动态链接库的方法,  需要用到的API函数有:  LoadLibrary,  FreeLibrary,  GetProcAddress,  CallWindowProc  ...。  
但是在VB中实现起来有局限性,问题就出在CallWindowProc的调用上:调用的参数个数、类型是固定的.
例如:   
   
Private  Declare  Function  FreeLibrary  Lib  "kernel32"  (ByVal  hLibModule  As  Long)  As  Long  
Private  Declare  Function  LoadLibrary  Lib  "kernel32"  Alias  "LoadLibraryA"  (ByVal  lpLibFileName  As  String)  As  Long  
Private  Declare  Function  GetProcAddress  Lib  "kernel32"  (ByVal  hModule  As  Long,  ByVal  lpProcName  As  String)  As  Long  
Private  Declare  Function  CallWindowProc  Lib  "user32"  Alias  "CallWindowProcA"  (ByVal  lpPrevWndFunc  As  Long,  ByVal  hWnd  As  Long,  ByVal  Msg  As  Any,  ByVal  wParam  As  Any,  ByVal  lParam  As  Any)  As  Long  

Private  Sub  Form_Load()  
       On  Error  Resume  Next  
       Dim  lb  As  Long,  pa  As  Long  
       lb  =  LoadLibrary("user32")  
       pa  =  GetProcAddress(lb,  "SetWindowTextA")  
       CallWindowProc  pa,  Me.hWnd,  "Hello  !",  ByVal  0&,  ByVal  0&  
       FreeLibrary  lb  
End  Sub  

看这个dll调用:
http://home.goofar.com/ELEVEN/dll应用.rar
不过好像不是lz需要的.
2006-7-13 17:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
最初由 moodsky 发布
VB中应该更方便实现了!


请教.
2006-7-13 17:37
0
游客
登录 | 注册 方可回帖
返回
//