请教高手,如何用WINDOWS的消息在打开对话框中的文件名的输入框----combo box中设定文件名,并打开文件?
sendmessage(ComboBoxHandle,wm_settext,0,int(pchar('filename1.doc')))

解决方案 »

  1.   

    function SetText( hWnd1:HWND;Text:string ): boolean;
    begin
        if(IsWindow(hWnd1)) then
            if SendMessage(hWnd1,WM_SETTEXT ,0,LPARAM(Text))>0 then
              result:= true;
        result:=  false;
    end; 
    SetText(hedt,str );
    SendMessage(hedt, WM_KEYDOWN, VK_RETURN, 0);
      

  2.   

    我是想做一个钩子,用来控制应用程序(word2000)的打开对话框,使得应用程序的打开由我的钩子程序来做控制,文件名由程序来输入,同时打开此文件!
    我的方法如下:
    mEditHWD:=GetDlgItem(P_HWND,13006);   //得到COMBO BOX的句柄
    SendMessage(mEditHWD,CB_ResetContent,0,0); //删除下拉列表,输入框中的内容
    SendMessage(mEditHWD,CB_ADDSTRING,0,Integer(pchar(mText))); //下拉列表中添加新内容
    i:=SendMessage(mEditHWD,CB_SELECTSTRING, -1,Integer(pchar(mText))); //选择下拉列表中的内容
    SendMessage(mEditHWD,CB_SETCURSEL,i,0);                  //选择当前选择到的字符串
    SendMessage(mEditHWD,WM_SETTEXT,0,integer(pchar(mText)));   //设置输入框内  SendMessage(mEditHWD,CB_SETEDITSEL,0,length(mText)); //选择输入框的文本字符串 
    SendMessage(P_HWND,CBN_EDITUPDATE,13006,mEditHWD); //更新输入框内容
    sendMessage(mEditHWD,CB_SETEDITSEL,0,length(mText));  //选择输入框的文本字符串
    楼上的方法我试了一下,还是没有什么反映,SendMessage(hedt, WM_KEYDOWN, VK_RETURN, 0);好象没有执行,所以,我热切的期盼回复
      

  3.   

    那要向 打开按钮发送消息 你要先得到 BUTTON的句柄然后发送keydown keyup
      

  4.   

    我做过,用的是sendmessage(hwd,273,1,0);//hwd是打开对话框的句柄,1是打开按扭的ID可是结果时对时错,不稳定!
      

  5.   

    倒 不能找ID发送啊 发送消息要找句柄啊,要先getdlgitem得到 句柄然后才能 发送啊!unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        function mygettext(hwnd:THandle):string;
      end;
     
    var
      Form1: TForm1;
    //  function EnumWindowsProc(Hwnd:THandle;lParam:LParam):boolean;Stdcall;
      function EnumChildProc(Hwnd:THandle;lParam:LParam):boolean;Stdcall;
    implementation
     
    {$R *.dfm}
    function TForm1.mygettext(hwnd:THandle):string;
    var
      buf:pchar;
      len:Longint;
    begin
     Len:=Longint(SendMessage(hWnd,WM_GETTEXTLENGTH ,0,0));
     if len>0 then
      begin//1
       try
        getmem(buf,len);
        SendMessage(hWnd,WM_GETTEXT,Len+1,Int64(buf));
        Result:=strpas(buf);
       finally
        freemem(buf);
       end;
      end;//1
    end;
     
    function EnumChildProc(Hwnd:THandle;lParam:LParam):boolean;
    var
     WindowCaption,WindowClass:array[0..254] of Char;
    begin
     GetClassName(Hwnd,WindowClass,255);
     if Pos('BUTTON',UpperCase(StrPas(WindowClass))) > 0 then
     begin
      // if Form1.mygettext(Hwnd)='Button1' then
      // begin
       sendmessage(hwnd,WM_LBUTTONDOWN,0,1);
       sendmessage(hwnd, WM_LBUTTONUP,0,1);
     //  end;
     end;
     Result := True;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    h:hwnd;
    begin
      h := FindWindow(nil, 'MyForm');
      if h<>0 then
          begin
        //  sendmessage(h,WM_close,0,1);
           EnumChildWindows(H,@EnumChildProc,0);
          end
      else
          showmessage('No Form');
    end;
     
    end.
      

  6.   

    呵呵,你不要倒呀,希望寄托在你的身上呢,我现在所做的操作是可以执行的
    SendMessage(PHWD,273,1,0);  //PHWD是对话框的handle
    它执行的操作是点击“打开”按扭
    主要问题是:现在的情况时好时坏,有时,对话框下方输入框COMBO BOX里面的内容和上方预览信息的一致;但是有时上方的预览信息和COMBO BOX 里的信息不一致
    预览信息的旁边有一个LISTVIEW控件,预览的是它里面被选中文件的信息!
    拜托
      

  7.   

    COMBO BOX中还嵌这个一个edit  要找到这个edit的句柄在发送看看
      

  8.   

    那个edit的ID是1001句柄用GetDlgItem(PHWD,1001)可以得到的
    我也试过,可还是不行,是不是挺打击你的呢
    我是做过的很多的测试,实在是没有办法了,才上来发的求助信息的
    不是我故意打击你呀,不好意思  :)
    现在唯一我不明白的是,为什么结果出现了“对与错”的交织状况
    用上面的方法总是时对时错,很困惑我
    如果说是消息没有发送到接收的窗体,可我在调试的时候观测每一个
    SendMessage的返回值都是一样的(比如错的时候返回值是“1”,可对
    的时候返回值还是“1”)
    而此版本的程序我在2台配置差一些(PIII1G以下)的计算机上返回的结
    果,错误率只有5%不到,所以我很诧异
    谢谢楼上这些天的不懈支持,还需麻烦各位大侠!
      

  9.   

    不是吧 难道 WORD打开框 很其他的combobox有区别?难道他也拦截了你的wm_settext?