delphi程序向另一个可执行程序发消息(使用GetForegroundWindow; 找出当前操作系统中活动的第一个窗口)
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; 找出当前操作系统中活动的第一个窗口)的更多相关文章
- 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵
题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...
- 给一个非常长的字符串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. 设置 ...
- 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...
- 给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回
给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ ...
- 通过程序调用微信公众号发消息api返回48001
自己的订阅号,尝试通过写程序来给用户发消息.结果呢,接口返回报错:errcode=48001,errmsg = api unauthorized hint: [ZlPULa02942276!] 去微信 ...
- 【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 ...
- 重装系统分区时,发现一个叫LVM的东西,找出来和大家分享
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前 ...
- 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 有一个array的数组,长度为10000,大小不一,用算法找出该数组中的最大值。
不用算法的答案是: var a=[1,2,3,5……];alert(Math.max.apply(null, a));//最大值alert(Math.min.apply(null, a));//最 ...
随机推荐
- BZOJ 2064 - 状压DP
传送门 题目大意: 给两个数组, 数组中的两个元素可以合并成两元素之和,每个元素都可以分裂成相应的大小,问从数组1变化到数组2至少需要多少步? 题目分析: 看到数据范围\(n<=10\), 显然 ...
- 【codeforces 776C】Molly's Chemicals
[题目链接]:http://codeforces.com/contest/776/problem/C [题意] 让你找区间[i,j] 使得sum[i..j]=k^t,这里t=0,1,2,3.. -10 ...
- sparksql 动态设置schema将rdd转换成dataset/dataframe
java public class DynamicDemo { private static SparkConf conf = new SparkConf().setAppName("dyn ...
- matlab 格式化文本文件的解析
比如这样一种格式化的文本文件,文件说明及下载地址:/pub/machine-learning-databases/statlog/german/ 的索引 fid = fopen('german.dat ...
- Android平台第三方应用分享到微信开发
一.申请APPID 微信公共平台和微博分享一样,也需要申请一个ID,来作为调起微信.分享到微信的唯一标识. 申请微信APPID可以到微信平台http://open.weixin.qq.com/app/ ...
- 关闭Wind XP/Vista/Win7的DEP数据执行保护汇总(转)
数据执行保护 (DEP) 是一种Windows安全机制,从Windows版本顺序上看是从Windows XP SP2开始引入,通过监视程序以确保它们使用的系统内存是安全的,帮助防止操作系统受到病毒和其 ...
- vue,js 使用中报错 TypeError: Cannot read property '__ob__' of undefined
原因: data中没有加return 切记!切记!
- Xbin-Store(分布式商城)项目所用Linux服务系列 FastDFS安装(五)
系列 Xbin-Store(分布式商城)项目所用Linux服务系列 MySQL安装(一) Xbin-Store(分布式商城)项目所用Linux服务系列 Redis集群安装(二) Xbin-Store( ...
- Scala & IntelliJ IDEA环境搭建升级版:在JAVA中调用Scala的helloworld
--------------------- 前言 --------------------- 项目关系,希望用Spark GraphX做数据分析及图像展示,但前提是得会spark:spark是基于sc ...
- 机器学习:scikit-learn 做笑脸识别 (SVM, KNN, Logisitc regression)
scikit-learn 是 Python 非常强大的一个做机器学习的包,今天介绍scikit-learn 里几个常用的分类器 SVM, KNN 和 logistic regression,用来做笑脸 ...