您的位置:程序门 -> delphi -> windows sdk/api



如何向其他窗口发送组合键?ctrl+f


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何向其他窗口发送组合键?ctrl+f
发表于:2008-01-07 21:11:18 楼主
如题,已经得到窗口的hwnd,用posemessage发,不要keyevent的那种,知道的说下。
在网上查资料说发不了,我想不会吧,给个代码,要delphi的
发表于:2008-01-08 11:30:001楼 得分:0
    ctrl_a=$4041;     //ctrl-a
    ctrl_b=$4042;
    ctrl_c=$4043;
    ctrl_d=$4044;
    ctrl_e=$4045;
    ctrl_f=$4046;
    ctrl_g=$4047;
    ctrl_h=$4048;
    ctrl_i=$4049;
    ctrl_j=$404a;
    ctrl_k=$404b;
    ctrl_l=$404c;
    ctrl_m=$404d;
    ctrl_n=$404e;
    ctrl_o=$404f;
    ctrl_p=$4050;
    ctrl_q=$4051;
    ctrl_r=$4052;
    ctrl_s=$4053;
    ctrl_t=$4054;
    ctrl_u=$4055;
    ctrl_v=$4056;
    ctrl_w=$4057;
    ctrl_x=$4058;
    ctrl_y=$4059;
    ctrl_z=$405a;     //ctrl-z
发表于:2008-01-08 11:30:362楼 得分:0
不过发送消息得写消息处理函数。
发表于:2008-01-11 14:59:323楼 得分:0
mastersky能不能说清楚一点点,给代码最好.

以你的回复是不是这样
postmessage(hwnd,wm_keydown,$4046,0)   这样吗???
发表于:2008-01-11 15:02:154楼 得分:0
如果对memo的消息进行跟踪,发现在按下ctrl-c之类的组合键时,
memo得到的消息中,第2个参数不是0,既postmessage(hwnd,wm_keydown,$4046,0)的最后这个不是0,
最后这个参数到底如何设置
发表于:2008-01-11 17:53:345楼 得分:0
如果这个窗体上的ctrl+f键对应的有一个菜单项,你可以向这个菜单发单击消息。

如果你发组合键好像是不可能,以前有人提过这个问题都没法解决。
发表于:2008-01-11 22:54:286楼 得分:0
mastersky你给的这些值没用
发表于:2008-01-12 11:02:547楼 得分:0
当前窗体里改写系统消息传递函数   winproc
procedure   wndproc(var   message:   tmessage);   override;//改写消息传递函数

//改写消息传递函数
procedure   tfrm_main.wndproc(var   message:   tmessage);
begin
    inherited;
    case   message.msg   of
      $4046://当前窗体捕获到的键盘值
      begin
          postmessage(hwnd,2008,0,0);//hwnd是目标窗体的handle值    
      end;
    end;
end;
//目标窗体  

//改写消息传递函数
procedure   tfrm_main.wndproc(var   message:   tmessage);
begin
    inherited;
    case   message.msg   of
    2008://当前窗体捕获到的消息id值
    begin
          //   目标窗体已经捕获到消息了     在这里进行处理        
    end;
end;
也可以用dispach()函数向目标窗体发送消息。。
发表于:2008-01-12 11:05:228楼 得分:0
向目标窗体发送   ctrl+f   就   上面的   2008   换成ctrl+f   $4046   就可以了
发表于:2008-01-12 14:22:519楼 得分:0
不成功,请指教
unit   unit1;

interface

uses
    windows,   messages,   sysutils,   variants,   classes,   graphics,   controls,   forms,
    dialogs,   stdctrls;

type
    tform1   =   class(tform)
        memo1:   tmemo;
        button1:   tbutton;
        procedure       wndproc(var       message:       tmessage);       override;
        procedure   button1click(sender:   tobject);//改写消息传递函数
    private
        {   private   declarations   }
    public
        {   public   declarations   }
    end;

var
    form1:   tform1;

implementation

{$r   *.dfm}
procedure       tform1.wndproc(var       message:       tmessage);
begin
        inherited;  
        case       message.msg       of  
            $4056://当前窗体捕获到的键盘值
            begin
                    postmessage(memo1.handle,2008,0,0);//hwnd是目标窗体的handle值
            end;  
        end;  
end;  

procedure   tform1.button1click(sender:   tobject);
begin
postmessage(memo1.handle,$4056,0,0);
end;

end.
发表于:2008-01-16 22:46:1910楼 得分:0
mark!
发表于:2008-01-17 19:53:2911楼 得分:0
用spy++看一下不就完了?


快速检索

最新资讯
热门点击