function FindWindowThroughWindowText(WindowText: string): THandle;<br>var<br> hCurrentWindow: THandle;<br> cnt: Integer;<br> WindowTitle: array[0..254] of Char;<br>begin<br> Result := INVALID_HANDLE_VALUE; //返回值预设为无效的句柄<br> hCurrentWindow := GetForegroundWindow; //找出当前操作系统中活动的第一个窗口<br> cnt := 1; //计数器置初值=1<br> while True do<br> begin<br> if GetWindowText(hCurrentWindow, @WindowTitle, 255) > 0 then //如果找到窗口的标题<br> if StrPos(WindowTitle, PChar(WindowText)) <> nil then //如果找到的正是目标窗口则<br> break; //跳出循环<br> hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT); //找下一窗口<br><br> //直到找到或超过一定的次数后退出<br> if hCurrentWindow = 0 then<br> begin<br> //如果顺序查一遍后未找到目标窗口,则重新从头开始查找,<br> hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST); //找到第一个窗口<br> inc(cnt); // 循环计数器加1<br> if cnt > 10000 then<br> begin<br> //如果超出10000次则(在此10000次循环过程中等待windows建立完//目标窗口,如在此过程中找到则成功退出,否则10000次后(约30秒至1分钟)仍未找到,提示用户是否继续查找)<br> if MessageDlg('找不到运行中的' + WindowText + '窗口,可能该系统已损坏!是否继续运行?', mtConfirmation, [mbOK, mbCancel], 0) = mrOK then<br> begin<br> //请用户选择是否继续查找//如用户选择继续查找,则<br> cnt := 1; //循环计数器重置初值=1<br> Continue; //开始新一轮查找<br> end<br> else exit; //如用户放弃查找,则退出<br> end;<br> end;<br> end;<br> Result := hCurrentWindow; //返回值为找到的窗口句柄<br>end;<br><br>procedure TForm1.Button1Click(sender:TObject);<br>var <br> h:THandle;<br>begin<br> h:=FindWindowThroughWindowText(xxx);<br> if h <> INVALID_HANDLE_VALUE then<br> begin<br> SendMessage(h,WM_某某消息,参数1,参数2); <br> end;<br>end;<br>好了,先写这么多了,具体的你自己琢磨吧