如何获得另外一个应用程序中的控件句柄。 - 日志 - tomore - 问友源码空间 [ http://www.winu.cn/space-14160-do-blog-id-11305.html ] ... function GetComponentHandle(hwnd: Integer; lparam: Longint):Boolean; stdcall;varbuffer: array[0..255] of Char;beginResult := True;//得到目标窗口的控件{GetClassName(hwnd, buffer, 256);//找到目标窗口的TButton类目标控件if StrPas(Buffer)='TButton' thenbeginPInteger(lparam)^ := hwnd; //得到目标控件的Hwnd(句柄)Result:=False; //终止循环end;}//找到目标窗口的目标控件(按标题)GetWindowText(hwnd, buffer, 100);if StrPas(Buffer)='Button1' thenbeginPInteger(lparam)^ := hwnd; //得到目标控件的Hwnd(句柄)Result:=False; //终止循环end;end;procedure TForm1.Button1Click(Sender: TObject);varAHandle, BHandle: Integer;begin//取句柄AHandle := FindWindow(nil, '计算器'); //就是窗口的Caption// AHandle := GetActiveWindow; //或GetForeGroundWindow;获得当前激活窗体的句柄if AHandle<>0 thenbegin//在这里循环取到想要的句柄为止EnumChildWindows(AHandle, @GetComponentHandle, Integer(@BHandle));//此时,BHandle就是你要的句柄PostMessage(BHandle, BM_Click, 0, 0); //向这个按钮发一个点击消息end;end;当需要获取另外一个应用程序中的所有控件句柄时:因为回调函数只能返回一个句柄,所以需要全局变量在回调函数获取。例:var MyHandle :TStringList;MyHandle :=TStringList.Create;function GetComponentHandle(hwnd: Integer; lparam: Longint):Boolean; stdcall;varbuffer: array[0..255] of Char;beginResult := True;//得到目标窗口的控件MyHandle.add(IntToStr(hwnd));//找到目标窗口的句柄// GetClassName(hwnd, buffer, 256);// MyHandle.add(StrPas(Buffer));//找到目标窗口的T类名// 等end;发送文本S:='你好吗?OK吗?';SendMessage(BHandle, WM_SETTEXT, 0, LongInt(lpstr(S))); ...
如何获得另外一个应用程序中的控件句柄。 - 日志 - tomore - 问友源码空间
最新推荐文章于 2023-05-21 08:00:00 发布