用SendMessage

解决方案 »

  1.   

    看来分是我的了,呵呵。
    SendMessage(Handle,WM_COMMAND,mnuAbout.Command,0);
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      StartupInfo : TStartupInfo;
      ProcessInfo : TProcessInformation;
    begin
      FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
      CreateProcess(nil, 'c:\windows\Notepad.exe c:\program Files\Borland\delphi 2.0\Readme.txt',
                    nil, nil,False, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo,ProcessInfo)
    end;procedure TForm1.Button2Click(Sender: TObject);
    const
      dest ='Readme.txt - Notepad'; //自己修改
    var
      Stat: Word;
      wnd: HWND;
      menu,
      smenu: HMENU;
      menuid: Word;
      capt: array[0..255] of char;
    begin
      wnd := GetWindow(GetDesktopWindow, GW_Child);
      while wnd > 0 do begin
        if IsWindowVisible(wnd) then begin
          if GetWindowText(wnd, capt, sizeof(capt)) > 0 then begin
            if StrComp(dest, capt) = 0 then begin
              { menuid を取得}
              menu := GetMenu(wnd);
              smenu := GetSubMenu(menu, 2); 
              menuid := GetMenuItemID(smenu, 0); 
              SendMessage(wnd,WM_COMMAND,menuid, 1);
              break;
          end;
        end;
      end;
        wnd := GetWindow(wnd, GW_HWNDNEXT);
      end;
    end;
      

  3.   

    一樣的作用
    Function SelectMenu(winname,item,subitem:string):boolean;
    var winhandle,menuhandle,submenuhandle,i,j,res:integer;
       itemname,subitemname:pchar;
    begin
    res:=-1;
    winhandle:=FindWindow(nil,pchar(winname));
    menuhandle:=getmenu(winhandle);
    getmem(itemname,255);
    getmem(subitemname,255);
    for i:=0 to getmenuitemcount(menuhandle)-1 do
       begin
       getmenustring(menuhandle,i,itemname,255,MF_BYPOSITION);
       if string(itemname)=item then begin
       submenuhandle:=getsubmenu(menuhandle,i);
       for j:=0 to getmenuitemcount(submenuhandle)-1 do
       begin
       getmenustring(submenuhandle,j,subitemname,255,MF_BYPOSITION);
       if string(subitemname)=subitem then
    res:=SendMessage(winhandle,WM_COMMAND,makelong(getmenuitemid(submenuhandle,j),0
    ),0);
       end;
       end;
    end;
    freemem(itemname);
    freemem(subitemname);
    if res=0 then result:=true else result:=false;
    end;