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

delphi程序向另一个可执行程序发消息(使用GetForegroundWindow; 找出当前操作系统中活动的第一个窗口)的更多相关文章

  1. 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

    题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...

  2. 给一个非常长的字符串str 另一个字符集比方{a,b,c} 找出str 里包括{a,b,c}的最短子串。要求O(n)

    给一个非常长的字符串str 另一个字符集比方{a,b,c} 找出str 里包括{a,b,c}的最短子串.要求O(n). 比方,字符集是a,b,c,字符串是abdcaabcx,则最短子串为abc. 设置 ...

  3. 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。

    给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...

  4. 给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回

    给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ ...

  5. 通过程序调用微信公众号发消息api返回48001

    自己的订阅号,尝试通过写程序来给用户发消息.结果呢,接口返回报错:errcode=48001,errmsg = api unauthorized hint: [ZlPULa02942276!] 去微信 ...

  6. 【C#】无损转换Image为Icon 【C#】组件发布:MessageTip,轻快型消息提示窗 【C#】给无窗口的进程发送消息 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方 【C#】DataRowState演变备忘

    [C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle ...

  7. 重装系统分区时,发现一个叫LVM的东西,找出来和大家分享

    LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前 ...

  8. 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  9. 有一个array的数组,长度为10000,大小不一,用算法找出该数组中的最大值。

    不用算法的答案是:   var a=[1,2,3,5……];alert(Math.max.apply(null, a));//最大值alert(Math.min.apply(null, a));//最 ...

随机推荐

  1. 【a901】滑雪

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 滑雪是一项非常刺激的运动,为了获得速度,滑雪的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待 ...

  2. NOIP模拟 Work - 二分 + 树状数组 / ???

    题目分析 如果没有最后的注意事项,此题就是二分裸题.有了注意事项,会有两种思路: 在线:二分天数t,并在主席树上求1~t天中大于d(浪费的时间)的时间之和以及数量,答案即为:sum - d * cnt ...

  3. Java中利用Math.random()产生服从泊松分布的随机数

    众所周知.Java的Math.random()产生的是服从均匀分布的随机数,可是其它分布的应用也相当广泛,比如泊松分布和高斯分布(正态分布).而这些分布Java没有非常好的提供(高斯分布能够利用Ran ...

  4. 过滤Filter推断用户是否登录

    WEB.XML <!-- 用户session的 键 sessionKEY --> <context-param> <param-name>userSessionKe ...

  5. oracle的sql查询结果拼接

    oracle数据库中,使用wm_concat(column)函数,可以进行字段合并 oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_co ...

  6. CentOS下Apache的停止和卸载

    昨晚搞到一台全球性价比最高的服务器,折腾一晚上,好不容易把node服务开启了,结果访问不了我的网站!!! 访问我的网站,显示的是一个Apache欢迎页面.我想,是不是像之前那样,80端口没有开放,然后 ...

  7. js typeof instanceof

    一般都是用typeof推断变量存在 例如if(typeof a!="undefined"){}.不是要去使用if(a)因为假定a不存在(未申报)将是错误的. 由于typeof经验n ...

  8. java基础篇---文件上传(组件)

    转载自:http://www.cnblogs.com/oumyye/p/4234969.html 文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本 ...

  9. 聊聊PROFINET与PROFIBUS

    1.PROFINET与PROFIBUS从狭义上比,没有可比性,因为他们的物理接口不同,电气特性,不同,波特率不同,电气介质特性不同等等.这样两者的协议是完全没有关联性的,唯一的关联性就是两者都是PI组 ...

  10. virtualbox下ubuntu共享文件夹自动挂载

    1.若想删除挂载,可执行命令 umount -f /mnt/share 2.若想开机自动挂载,可以在 /etc/fstab 文件末添加一项     sharing /mnt/share vboxsf  ...