现在我想控制另外一个程序,就象外挂一样,用FindWindow找到以后
要他在在所有桌面窗体最底层,不能单击激活上来,而且不要他随便移动!

解决方案 »

  1.   

    你是想让你的控制程序还是被控制程序不能移动?如果是前者那比较好办,你在OnMove里判断一下,如果有移动就回复到原来位置,原先的位置你可以先固定好,或放在配置文件里。如果要是后者估计就比较麻烦了。
    对于最底层的问题,我觉得你其实可以考虑将你自己的控制程序最小化,这样也就不会在界面上显示了。
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure wmnchittest(var msg:twmnchittest);message wm_nchittest;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{无法移动}
    procedure TForm1.wmnchittest(var msg:twmnchittest);
    begin
      inherited;
      if (htcaption=msg.result) then msg.result:=htclient;
    end;
    {嵌入桌面}
    procedure TForm1.FormCreate(Sender: TObject);
    var hDeskTop:THandle;
    begin
      hDeskTop:=FindWindow('Progman', 'Program Manager');
      windows.SetParent(handle,hDeskTop);
    end;end.
      

  3.   

    jinjazz(近身剪(N-P攻略)) 的方法可以满足了^_^
      

  4.   

    我想下面的才是楼主需要的。(用记事本来举例。同时,设置本窗体的BorderStyle为bsNone)
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)    procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure SetPos(var msg: TWMWINDOWPOSCHANGED); message WM_WindowPosChanging;
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      h : hwnd;
    implementation{$R *.dfm}
    procedure TForm1.FormCreate(Sender: TObject);begin
     // application.OnMessage := ApplicationEvents1Message;
      h:= FindWindow(nil,'未定标题 - 记事本');
      windows.SetParent(h,handle);
      PostMessage(h,WM_SYSCOMMAND,SC_MAXIMIZE,0);
      SetWindowLong(h, GWL_STYLE, GetWindowLong(h,GWL_STYLE) AND      NOT WS_CAPTION);
    end;procedure TForm1.SetPos(var msg: TWMWINDOWPOSCHANGED);
    begin
     msg.WindowPos.hwndInsertAfter:=1;
    end;end.
      

  5.   

    fbysss(独孤求败) 的方法比较灵活,建议采用