我想修改其它程序窗口中一个按钮的标题,请问怎么弄?要求是,这个窗口的类名是TfmSu,标题包含ucmeet,按钮的标题是“提交”,我想改成“确定”。我的代码如下:
Function SetChild(wnd: hwnd): bool;
Var
  buffer: Array[0..254] Of char;
Begin
  result:=False;
  Begin
    SendMessage(wnd, wm_settext, 0, integer(p));
    result:=True;
  End;
End;
Function EnumChildWndProc(AhWnd: LongInt;
  AlParam: lParam): boolean; Stdcall;
Var
  WndClassName: Array[0..254] Of char;
  WndCaption: Array[0..254] Of char;
Begin
  GetClassName(AhWnd, WndClassName, 254);
  GetWindowText(AhWnd, WndCaption, 254);
  If String(WndCaption)='提交' Then
    result:=SetChild(AhWnd);
  result:=True;
End;Procedure TForm1.Button1Click(Sender: TObject);
Var
  hcrrentwindow: hwnd;
  sztext: Array[0..254] Of char;
  s, s1: String;
  //
Begin
  h:=FindWindow('TfmSetup', Nil);
  If h<>0 Then
  Begin
    h:=0;
    hcrrentwindow:=GetWindow(handle, GW_HWNDFIRST);
    While hcrrentwindow<>0 Do
    Begin
      If GetWindowText(hcrrentwindow, @sztext, 255)>0 Then
      Begin
        s:=StrPas(@sztext);
        GetClassName(hcrrentwindow, @sztext, 255);
        s1:=StrPas(@sztext);
        If (Pos('ucmeet', s)<>0)And(s1='TfmSu') Then
        Begin
          h:=hcrrentwindow;
          hcrrentwindow:=0;
          p:=pchar('确定');
          EnumChildWindows(h, @EnumChildWndProc, 0);
          Exit;
        End;
      End;
      If h=0 Then
        hcrrentwindow:=GetWindow(hcrrentwindow, GW_HWNDnext);
    End;
  End;
End;
这个代码可以实现我的要求,可是修改完按钮的标题后,那个窗体好像没有重画,标题还是“提交”,只有最小化那个窗口再最大化后才能显示出来,怎么办?

解决方案 »

  1.   

    查找按钮句柄的代码不想写了...
    SendMessage(hChild,WM_SETTEXT,0,Integer(PChar('aaa')));
      

  2.   

    重画窗体~SendMessage(wnd, WM_PAINT, GetWindowDC(wnd), 0);
      

  3.   

    To:sdzeng(大头鸟)
    我的代码中有你的这句,可是执行时窗口上的文本没有改变,必须拖动其它程序的窗口从那个窗口的按钮上"掠过",改动才能显示出来.
    logne() 
    那句代码加上去后,还是没有用.
    呼呼~~~
      

  4.   

    SendMessage(hChild,WM_SETTEXT,0,Integer(PChar('aaa')));换成PostMessage(...)
    发送消息而不需要返回值时还是用postmessage的好