小弟的软件要读取其他程序的Edit的内容,可是他的窗体上不只一个Edit(>10),请问如何能够准确的获取其中某一个Edit的内容?

解决方案 »

  1.   

    const
      cScanIndex = 3;
    var
      vScanIndex: Integer;function EnumChildProc(
      hwnd: HWND;
      lParam: LPARAM
    ): BOOL; stdcall;
    var
      vBuffer: array[0..255] of Char;
    begin
      Result := True;
      GetClassName(hwnd, vBuffer, SizeOf(vBuffer));
      if SameText(vBuffer, 'Edit') or SameText(vBuffer, 'TEdit') then
      begin
        if vScanIndex = cScanIndex then
        begin
          SendMessage(hwnd, WM_GETTEXT, SizeOf(vBuffer), Integer(@vBuffer[0]));
          TForm1(lParam).Caption := vBuffer;
          Result := False;
        end;
        Inc(vScanIndex);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      vHandle: THandle;
    begin
      vHandle := Handle; //得到要扫描窗体的句柄  vScanIndex := 0;
      EnumChildWindows(vHandle, @EnumChildProc, Integer(Self));
    end;
      

  2.   

    ……用WindowFromPoint()、GetCursorPos()得到目标Edit的句柄
    用GetClassName()分析它的类名
    用EnumChildWindows()遍历子窗体
    通过WM_GETTEXT消息得到其文本const
      cScanIndex = 3; //这个地方需要根据你自己的情况得到
    //...procedure TForm1.Button1Click(Sender: TObject);
    var
      vHandle: THandle;
    begin
      vHandle := 这个地方是你的得到的窗体句柄
    //...
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var MemInfo: MEMORYSTATUS;
    begin
      // 获取内存信息
      GlobalMemoryStatus(MemInfo);
      Memo1.Lines.Add(IntToStr(MemInfo.dwMemoryLoad) + '%的内存在使用');
      Memo1.Lines.Add('物理内存共有' + IntToStr(MemInfo.dwTotalPhys) + '字节');
      Memo1.Lines.Add('未使用的物理内存有' + IntToStr(MemInfo.dwAvailPhys) + '字节');
      Memo1.Lines.Add('交换文件的大小为' + IntToStr(MemInfo.dwTotalPageFile) + '字节');
      Memo1.Lines.Add('未使用的交换文件大小为' + IntToStr(MemInfo.dwAvailPageFile) + '字节');
      Memo1.Lines.Add('虚拟内存空间大小为' + IntToStr(MemInfo.dwTotalVirtual) + '字节');
      Memo1.Lines.Add('未使用的虚拟内存大小为' + IntToStr(MemInfo.dwAvailVirtual) + '字节');
    end;
      

  4.   

    已经成了,我忘记了程序的edit是放在tab里面的~~~多谢