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 ...
随机推荐
- AtomicInteger源码
一.概念 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而Ato ...
- SQL Server修改默认端口号1433
方法1: 1) SqlServer服务使用两个端口:TCP-1433.UDP-1434. 其中1433用于供SqlServer对外提供服务,1434用于向请求者返回SqlServer使用了那个TCP/ ...
- camera驱动框架分析(上)
前言 camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连接到soc的camif口上的,有些是通过usb接口导出的,如usb camera.我这里主要讨论前者, ...
- 优化MySQL的21个建议 – MySQL Life【转】
今天一个朋友向我咨询怎么去优化 MySQL,我按着思维整理了一下,大概粗的可以分为21个方向. 还有一些细节东西(table cache, 表设计,索引设计,程序端缓存之类的)先不列了,对一个系统,初 ...
- SpringBoot 构建RestFul API 含单元测试
相关博文: 从消费者角度评估RestFul的意义 SpringBoot 构建RestFul API 含单元测试 首先,回顾并详细说明一下在快速入门中使用的 @Controller . @RestC ...
- oracle行转列
wm_concat()函数 --创建表 create table test(id number,name varchar2(20)); --插入数据 insert into test values(1 ...
- 使用maven命令终端构建一个web项目及发布该项目
构建环境: maven版本:3.3.9 系统平台:Windows7 x64 JDK版本:1.7 构建步骤: 1.打开maven安装目录,在地址栏输入cmd进入命令窗口 2.输入命令mvn archet ...
- 【前端node.js框架】node.js框架express
server.js /* 以下代码等下会有详细的解释 */ var express = require('express'); // 用来引入express模块 var app = express() ...
- css-通过hover实现鼠标进过背景色变化
通过hover实现鼠标进过背景色变化 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- .NetCore下 Exceptionless 分布式日志的个性化处理
Event Type 在Exceptionless中有 Exception .LogMessage.Broken Links .Feature Usages 接下来就这几种类型分别添加日志记录 Exc ...