我想修改其它程序窗口中一个按钮的标题,请问怎么弄?要求是,这个窗口的类名是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;
这个代码可以实现我的要求,可是修改完按钮的标题后,那个窗体好像没有重画,标题还是“提交”,只有最小化那个窗口再最大化后才能显示出来,怎么办?
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;
这个代码可以实现我的要求,可是修改完按钮的标题后,那个窗体好像没有重画,标题还是“提交”,只有最小化那个窗口再最大化后才能显示出来,怎么办?
SendMessage(hChild,WM_SETTEXT,0,Integer(PChar('aaa')));
我的代码中有你的这句,可是执行时窗口上的文本没有改变,必须拖动其它程序的窗口从那个窗口的按钮上"掠过",改动才能显示出来.
logne()
那句代码加上去后,还是没有用.
呼呼~~~
发送消息而不需要返回值时还是用postmessage的好