如题

解决方案 »

  1.   

    这样看看Application主窗口是个啥模样:
    ...
    var
      hApp: THandle;
    begin
      hApp := FindWindow(nil, PAnsiChar(Application.Title));
      if hApp <> 0 then MoveWindow(hApp, 100, 100, 400, 300, True);
    end;
    ...
      

  2.   

    根据Application.Handle获得Application对象实例
    function ObjectFromHWND(hwnd: HWND): TObject;
    var
      P: Longint;
    begin
      P := GetWindowLong(hwnd, GWL_WNDPROC);
      if P > 0 then
        Result := PPointer(P + Sizeof(Byte) + Sizeof(Integer) + Sizeof(Pointer))^
      else
        Result := nil;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.Lines.Add(Format('Application: %p ObjectFromHWND: %p',
        [Pointer(Application), Pointer(ObjectFromHWND(Application.Handle))]));
    end;
    然后Application.MainForm.Handle即可得到主窗体的句柄。如果是其他进程,那么还要将代码写在DLL中,通过Hook或远程线程注入到目标进程,再调用ObjectFromHWND函数获取Application对象实例。
    参考:http://www.delphibbs.com/keylife/iblog_show.asp?xid=12219
      

  3.   

    如果是其他进程,那么还要将代码写在DLL中,通过Hook或远程线程注入到目标进程,再调用ObjectFromHWND函数获取Application对象实例。Application.MainForm.Handle即可得到主窗体的句柄。
    参考:http://www.delphibbs.com/keylife/iblog_show.asp?xid=12219我奇怪的是你怎么找到其他程序的Application.Handle的!?直接FindWindow找到主窗体的Handle不就结了,还非要先获得Application.Handle,然后通过它找主窗体的Handle!?