function FindWindowThroughWindowText(WindowText: string): THandle;
var
hCurrentWindow: THandle;
cnt: Integer;
WindowTitle: array [0 .. 254] of Char;
begin
Result := INVALID_HANDLE_VALUE; // 返回值預設為無效的句柄
hCurrentWindow := GetForegroundWindow; // 找出當前操作系統中活動的第一個窗口
cnt := 1; // 計數器置初值=1
while True do
begin
if GetWindowText(hCurrentWindow, @WindowTitle, 255) > 0 then // 如果找到窗口的標題
if StrPos(WindowTitle, PChar(WindowText)) <> nil then // 如果找到的正是目標窗口則
break; // 跳出循環
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT); // 找下一窗口
// 直到找到或超過一定的次數后退出
if hCurrentWindow = 0 then
begin
// 如果順序查一遍后未找到目標窗口,則重新從頭開始查找,
hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST); // 找到第一個窗口
inc(cnt); // 循環計數器加1
if cnt > 10000 then
begin
// 如果超出10000次則(在此10000次循環過程中等待windows建立完//目標窗口,如在此過程中找到則成功退出,否則10000次后(約30秒至1分鍾)仍未找到,提示用戶是否繼續查找)
if MessageDlg('找不到運行中的' + WindowText + '窗口,可能該系統已損壞!是否繼續運行?',
mtConfirmation, [mbOK, mbCancel], 0) = mrOK then
begin
// 請用戶選擇是否繼續查找//如用戶選擇繼續查找,則
cnt := 1; // 循環計數器重置初值=1
Continue; // 開始新一輪查找
end
else
exit; // 如用戶放棄查找,則退出
end;
end;
end;
Result := hCurrentWindow; // 返回值為找到的窗口句柄
end;
procedure TForm1.Button1Click(sender:TObject);
var
h:THandle;
begin
h:=FindWindowThroughWindowText(xxx);
if h <> INVALID_HANDLE_VALUE then
begin
SendMessage(h,WM_某某消息,參數1,參數2);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h:THandle;
begin
h:=FindWindowThroughWindowText('Form1');
if h <> INVALID_HANDLE_VALUE then
begin
showmessage('ok1!');
h:= FindWindowEx(h,0,'TEdit','Edit1');
if (h=0) then exit;
showmessage('ok2!');
SendMessage(h,WM_SETTEXT,255, integer(PChar('我')));
end;
end;
Procedure TForm1.Button1Click(Sender: TObject);
Var
FormHwd, OKHandle, EDHwd1, EDHwd2: THandle;
Begin
FormHwd := FindWindow(nil, '用戶登錄'); //窗口名稱
If FormHwd > 0 Then
Begin
OKHandle := FindWindowEx(FormHwd, 0, PChar('TBitBtn'), Pchar('確定'));//按鈕
EDHwd1 := FindWindowEx(FormHwd, 0, PChar('TEdit'), nil);
SendMessage(EDHwd1, WM_SETTEXT, 255, Longint(PChar('0')));
EDHwd2 := FindWindowEx(FormHwd, EDHwd1, PChar('TEdit'), nil);
SendMessage(EDHwd2, WM_SETTEXT, 255, Longint(PChar('jwc01')));
SendMessage(OKHandle,BM_CLICK,0,0);
End;
End;
http://blog.csdn.net/zang141588761/article/details/52061764