谢谢。

解决方案 »

  1.   

    用API函数,好像是GetWindowText,你自己查一查吧
      

  2.   

    发送WM_GETTEXT消息
    var
      edtWnd :THandle; //edit的句柄
      buf :PChar;
    begin
      getMem(buf,MAXBYTE);
      SendMessage(edtWnd,WM_GETTEXT,255,integer(buf));
      ShowMessage(strpas(buf));
      freeMem(buf);
    end;
      

  3.   

    An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller. WM_GETTEXT  
    wParam = (WPARAM) cchTextMax;   // number of characters to copy 
    lParam = (LPARAM) lpszText;     // address of buffer for text 
     ParameterscchTextMaxValue of wParam. Specifies the maximum number of characters to be copied, including the terminating null character. lpszTextValue of lParam. Points to the buffer that is to receive the text.  Return ValuesThe return value is the number of characters copied.
      

  4.   

    利用属性:
          Edit1.PasswordChar:='*';
     直接在属性里改!
      

  5.   

    上面的方法在WindowXP好象行不通
      

  6.   

    to 回复人: CareYouOnly(只在乎你) ( ) 信誉:100  2005-01-09 19:38:00  得分: 0  
     
     
       上面的方法在WindowXP好象行不通
      
     
    ---------------------------------------------------------------------------------
    还真的没注意过呢,
    你试过吗,应该可以啊!
      

  7.   

    在程序中直接用Edit1.Text就可以了
      

  8.   

    用钩函数可以记录edit发生的任何事情
      

  9.   

    Windows提供了两个API函数来获得这个名字:
      int GetWindowTextLength(HWND hWnd); // 得到名字的长度
       其中,hWnd :想要得到的那个窗口或控件的句柄 handle
      int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount );// 得到名字
      其中,hWnd :想要得到的那个窗口或控件的句柄 handle;
      lpString:存放名字的字符串的地址
      nMaxCount :可拷贝的最大字符数
      下面以Delphi为例,说明它的实现过程。
      新建一Form,放置Label、Edit、Button各一个到Form中,将Edit1的PasswordChar属性改为“*”,双击Button1:
      procedure TForm1.Button1Click(Sender: TObject);
      var
      Name:PChar; // 名字
      L:integer; // 名字的长度
      begin
      L:=GetWindowTextLength(Edit1.handle)+1; //得到名字长度,并将长度加1
      GetMem(Name,L);//为将要得到的名字分配内存
      GetWindowText(Edit1.handle,Name,L);//得到名字
      label1.Caption:=String(Name); // 将得到的名字显示于 Label1
      FreeMem(Name,0); // 释放分配的内存
      end;
      

  10.   

    var pass:integer;
        buf:array[0..1024] of char;   ...
       pass:=sendmessage(handle,em_getpasswordchar,0,0);
       if pass<>0 then
       begin
         postmessage(handle,em_setpasswordchar,0,0);
         sendmessage(handle,wm_gettext,1024,integer(@buf));
         //postmessage(handle,em_setpasswordchar,wparam(ord('*')),0);
       end
       else
         sendmessage(handle,wm_gettext,1024,integer(@buf));
      

  11.   

    嘿嘿,还没有遇到过这种需求.以前看过,好像是读取某个寄取器的值?不知道具体是怎么操作.如果像上面那样的话,读取自己的程序里的还可以,如果是要读取别的程序里的*该怎么办呢?怎么知道别人的Edit的名字?
      

  12.   

    太简单了!与非*没区别
    passstr := Edit1.Text;
      

  13.   

    http://www.delphibbs.com/keylife/iblog_show.asp?xid=381
      

  14.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, cxControls, cxContainer, cxEdit, cxLabel, cxTextEdit,
      cxMemo, StdCtrls, ComCtrls;type
      TfrmMain = class(TForm)
        tmr1: TTimer;
        cxMemo1: TcxMemo;
        stat1: TStatusBar;
        pnl1: TPanel;
        Button2: TButton;
        Button1: TButton;
        procedure tmr1Timer(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
        procedure GetText(hHandle: THandle);
      public
        { Public declarations }
        hotkey:Integer;
        procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
      end;var
      frmMain: TfrmMain;implementation{$R *.dfm}function EnumChildWindowsProc(AHWnd: HWnd; LPARAM: lParam): boolean; stdcall;
    var
      WndClassName: array[0..254] of char;
    begin
      GetClassName(AHWnd, @WndClassName, 254);
      with frmMain.cxMemo1.Lines do
      begin
        Add(StrPas(WndClassName));
      end;
      Result := True;
    end;procedure TfrmMain.tmr1Timer(Sender: TObject);
    var
      p:TPoint;
      H:THandle;
      CName:array [0..63] of char;
      //WC:TWndClass;
    begin
      GetCursorPos(p);
      H := WindowFromPoint(p);
      stat1.Panels[0].Text := IntToHex(H,8);  GetClassName(H, CName, 64);
      stat1.Panels[1].Text := CName;  if Pos('EDIT', UpperCase(CName)) > 0 then
      begin
        GetText(H);
      end;
    end;procedure TfrmMain.FormShow(Sender: TObject);
    begin
      hotkey:=0;
      if not RegisterHotKey(Handle,hotkey,MOD_CONTROL ,VK_Space) then
        showmessage('can not register the hotkey');
    end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      UnRegisterHotKey(handle, HotKey);  
    end;procedure TfrmMain.HotKeyDown(var Msg: Tmessage);
    var
      H:THandle; p:TPoint;
    begin
       if (Msg.LParamHi = VK_SPACE)and (Msg.LParamLo=MOD_CONTROL) then
       begin
           GetCursorPos(p);
           H:=WindowFromPoint(p);
           cxMemo1.Lines.Clear;
           EnumChildWindows(H,@EnumChildWindowsProc, 0);
       end;
    end;procedure TfrmMain.Button1Click(Sender: TObject);
    var
      HWindow,hedit: THandle; //句本柄变量
      szText: Array[0..255] Of char;   //得到的字符串
    Begin
      HWindow := 0;
      While true Do
      Begin
        HWindow := FindWindowEx(0, HWindow, 'SciCalc', Nil);//找计算器的窗体
        if HWindow=0 then exit;
        If HWindow <> 0 Then
        Begin
          hEdit := FindWindowEx(hwindow, 0, 'Edit', Nil);  //找到edit文本框
          if HEdit<>0 then
          begin
            SendMessage(hEdit, WM_GetTEXT, 256,integer(@szText[0])); //取值
            cxMemo1.Lines.Text:= szText; //符值
            break;
          End;
        end;
      end;
    End;procedure TfrmMain.GetText(hHandle: THandle);
    var
      szText: Array[0..255] Of char;   //得到的字符串
    begin
      if hHandle <> 0 then
      begin
        SendMessage(hHandle, WM_GetTEXT, 256,integer(@szText[0])); //取值
        cxMemo1.Lines.Text := szText; //符值
      End;
    end;procedure TfrmMain.Button2Click(Sender: TObject);
    var
      MainHandle,MemoHandle :THandle;
      Text :Array [0..10000] of Char;
      TextLen :Integer;
    begin
      MainHandle := FindWindow('notepad',nil);
      MemoHandle := FindWIndowEx(MainHandle,0,'Edit',nil);
      ShowMessage(IntToStr(MemoHandle));
      SendMessage(MemoHandle,WM_GETTEXT,10000,LongInt(@Text));
      cxMemo1.Text := Text;
    end;end.
      

  15.   

    我做的一个小的test,在Delphi6 + Windows XP下运行通过!