zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    [SHOI2015]零件组装机
    [AH2017/HNOI2017]影魔
    空指针RE第一次公开赛-笔记
    i春秋2020新春公益赛WP
    博客园Markdown编辑器修改代码配色、添加代码行号
    buuctf Writeup
    关于Tarjan的一些问题
    NOIP2013D1T3货车运输 (生成树+树链剖分)
    1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)
    CodeForces 438D The Child and Sequence (线段树 暴力)
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/6593796.html
Copyright © 2011-2022 走看看