Delph 两个对立程序使用消息进行控制通信
在实际应用中,总是会遇到两个独立的程序进行通信,其实通信的方式有好几种,比如进程间通信,消息通信。
项目中用到了此功能, 此功能用于锁屏程序, 下面把实现的流程和大家分享一下。
1. 在锁屏程序中,自定一个消息,如下
//注册消息的句柄
FIMessage: Integer;
FIMessage:= RegisterWindowMessage('LockDeskMessage');
2. 如果输入正确的截屏密码, 则触发广播消息,同时关闭锁屏窗体, 同时通过注册的缓存中的另一个程序的handle,广播消息,代码如下
var
h1: HWND;
begin
if (trim(edit1.Text) <> pwd) then
application.messagebox('对不起,不能打开锁。请确定你输入了密码并且输入的密码正确!', '提示', mb_ok + mb_iconinformation)
else
begin
h1:= FindWindow('Tfrm_MainIPC',PChar(FMainCaption));
PostMessage(h1,FIMessage,0,1);
ok := true;
frm_lockdesk.close;
end;
end;
3.另一个程序在程序启动的开始,注册消息, 代码如下
//调用锁屏消息
FJLockDeskMessage: Cardinal;
FJLockDeskMessage := RegisterWindowMessage('LockDeskMessage');
4.监听消息,覆盖不停监听消息的函数, 实现代码如下
procedure WndProc(var Message: TMessage); override;
procedure Tfrm_MainIPC.WndProc(var Message: TMessage);
begin
if Message.Msg = FJLockDeskMessage then
begin
iTimers_MainIPC.Enabled6 := True;
ToolBar1.Enabled := True;
end
else
begin
inherited;
end;
end;
在此消息中实现该实现的功能。
触发的方法
procedure Tfrm_MainIPC.iTimers_MainIPCTimer6(Sender: TObject);
var
sFileName_lock: string;
begin
//当运行环境不为C盘时说明是开发调试环境,不启动铴屏
// if LowerCase(Copy(Application.ExeName, 1, 1)) <> 'c' then
// exit;
if G_SaveDebug then exit;
FFlag := FFlag + 1;
if FFlag >= 2 then //100
begin
FFlag :=0 ;
if not wdRunOnce.findProcess('LockScreen.exe') then
begin
logThreadManager(ltInformation, 'B65D30A5-AA25-40B4-A801-FA647D011AFF 启动锁屏程序。');
sFileName_lock := ExtractFilePath(Application.ExeName) + 'LockScreen.exe';
if FileExists(sFileName_lock) then
begin
ToolBar1.Enabled := False;
WinExec(PAnsiChar(sFileName_lock),SW_SHOW);
iTimers_MainIPC.Enabled6 := False;
//Application.ProcessMessages;
end;
end;
end;
end;
Delph 两个对立程序使用消息进行控制通信的更多相关文章
- Delphi 两个应用程序(进程)之间的通信
两个应用程序之间的通信实际上是两个进程之间的通信.由于本人知识有限,决定应用消息来实现.需要用到的知识: 1.RegisterWindowMessage(); //参数类型:pchar:返回值:Lon ...
- Android应用程序线程消息循环模型分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是 ...
- node配置微信小程序解密消息以及推送消息
上一篇文章介绍过 微信小程序配置消息推送,没有看过的可以先去查看一下,这里就直接去把那个客服消息接口去解密那个消息了. 在这里我选择的还是json格式的加密. 也就是给小程序客服消息发送的消息都会被微 ...
- node.js微信小程序配置消息推送
在开发微信小程序时,有一个消息推送,它的解释是这样的. 消息推送具体的内容是下面的这个网址 https://developers.weixin.qq.com/miniprogram/dev/fra ...
- win32程序之窗口程序,以及消息机制
win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...
- 微信小程序模板消息群发解决思路
基于微信的通知渠道,微信为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.(微信6.5.2及以上版本支持模板功能.低于该版本将无法收到模板消息.) 模板推送位置:服务通 ...
- ChangeWindowMessageFilterEx 概述(用于取消低权限程序向高权限程序发送消息不成功的限制,分6个等级)
ChangeWindowMessageFilterEx 函数,为指定窗口修改用户界面特权隔离 (UIPI) 消息过滤器. 函数原型: BOOL WINAPI ChangeWindowMessageFi ...
- 微信小程序的模板消息与小程序订阅消息
小程序订阅消息 功能介绍 消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验. 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅 订阅消息卡片跳 ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
随机推荐
- Dream------hive on spark
一.Hive on Spark是Hive跑在Spark上,用的是Spark执行引擎,而不是MapReduce,和Hive on Tez的道理一样. 并且用的是$HIVE_HOME/bin/hive,l ...
- 洛谷 P5089: CodeForces #500 (Div. 1) B / 1012B : Chemical table
题目传送门:洛谷P5089. 题意简述: 一张 \(n \times m\) 的表格,有一些格子有标记,另外一些格子没有标记. 如果 \((r_1,c_1),(r_1,c_2),(r_2,c_1)\) ...
- 用《舌尖2》去理解C#中的多态和开闭原则
昨天晚上看了<舌尖上的中国2>第一集,特别的感人,尤其是看到帮别人割麦子的麦客,一亩地开价200,雇主只肯给100,脸上的那种纠结和无可奈何.还有长着大眼睛的跳跳鱼,很可爱,不过最终还是被 ...
- python报错IndexError: list index out of range
今天写个ping vpn的python脚本,报错IndexError: list index out of range 最后查看是python读取文件中出现空格 去掉空格即可
- MVC layout 命名空间引用问题
虽然用MVC做了很多项目,但是都是在别人搭好的框架上实现 今天碰到一个很简单的命名空间引用问题 如图所示,Scripts和Styles 都没有引用命名空间 解决方法一: 直接使用 System.Web ...
- C#: +(特性 ) + Attitude C#(类)前面或者(方法)前面 (中括号)定义
首先要说的是,可能一些刚接触C#的朋友常常容易把属性(Property)跟特性(Attribute)弄混淆,其实这是两种不同的东西.属性就是面向对象思想里所说的封装在类里面的数据字段,其形式为: 1: ...
- CentOS 5.x 键盘布局改为日语
CentOS 5.x 直接在系统设置界面修改键盘布局,可能不起作用,需要按如下步骤修改配置文件. 1. /etc/sysconfig/keyboard KEYTABLE="jp106&quo ...
- centos7执行 wget命令: command not found的两种解决方法
1.rpm 安装 下载wget的RPM包: http://mirrors.163.com/centos/6.8/os/x86_64/Packages/wget-1.12-8.el6.x86_64.rp ...
- Android 7.0 行为变更
Android 7.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 如果您之前发布过 Android 应用,请注意 ...
- logback.xml 模板
ssm模板 <?xml version="1.0" encoding="UTF-8"?> <!--configuration 根节点,包含下 ...