我在Timer1中(Timer1的Interval = 5000)
procedure TForm1.Timer1Timer(Sender: TObject);
var
  hwndCalc: Integer;
  ForegroundWindowHwnd: HWnd;
  szText:array[0..255] of char;
  l:Integer;
  y:integer;
  sLeft: string;
begin
   ForegroundWindowHwnd := GetForegroundWindow;
   y:=GetWindowTextLength(ForegroundWindowHwnd);
   l := GetWindowText(ForegroundWindowHwnd, @szText, y+1);
   sLeft:=trim(pchar((@szText)));
   If sLeft = '金山词霸 2002' Then
      EnumChildWindows(ForegroundWindowHwnd,@EnumChildWndProc,0);
end;function EnumChildWndProc(AhWnd:LongInt;AlParam:lParam):boolean;stdcall;
var
 lStyle: HWnd;
 lpClassName: array[0..254] of Char;
 strName:array[0..254] of char;
 ss: String;
 nPos:Integer;
 RetVal:Integer;begin
    nPos:=1001;
    lStyle := GetDlgItem(AhWnd,nPos);
    RetVal := GetClassName(lStyle, lpClassName, 254);
    ss := string(lpClassName);
    If ss = 'Edit' Then
    begin   
    SendMessage(lStyle, WM_GETTEXT, 255, LongInt(@strName));
      ss:=trim(pchar((@strName)));
         Form1.Label1.Caption := Form1.Label1.Caption + Chr(13) + Chr(10) + ss;
    end;
    result:=true;
end;
我想得到金山词霸输入的字符,现在可以得到,但是为什么每次timer1循环返回很多次同样的字符?

解决方案 »

  1.   

    begin
        nPos:=1001;
        lStyle := GetDlgItem(AhWnd,nPos);
        RetVal := GetClassName(lStyle, lpClassName, 254);
        if RetVal>0 then //加这一句
        begin
        ss := string(lpClassName);
        If ss = 'Edit' Then
        begin
        SendMessage(lStyle, WM_GETTEXT, 255, LongInt(@strName));
          ss:=trim(pchar((@strName)));
             Form1.Label1.Caption := Form1.Label1.Caption + Chr(13) + Chr(10) + ss;
        end;
        end;
        result:=true;
    end;