unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

var
  WM_SHUTDOWN_THREADS: Cardinal;  //无符号32位

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure WndProc(var Message: TMessage); override;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TTestThread = class(TThread)
  Private
    FWinHandle: THandle;
    FSignalShutdown: Boolean;
  public
    constructor Create;
    Procedure Execute(); Override;
    Destructor Destroy; Override;
    procedure WndProc(var Message: TMessage);
    Procedure PrntMsg(msg: String);
  end;

var
  Form1: TForm1;

implementation
var
  TestThread: TTestThread;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Clear;
  //创建消息标志符
  WM_SHUTDOWN_THREADS := RegisterWindowMessage('MyMessage');
  if WM_SHUTDOWN_THREADS = 0 then
  Begin
    Raise Exception.Create('获取消息句柄失败!');
  end;
end;

{ TTestThread }

constructor TTestThread.Create;
begin
  Inherited Create(False);
  FSignalShutdown := False;
  //建立窗口句柄
  FWinHandle := AllocateHwnd(WndProc);
end;

destructor TTestThread.Destroy;
begin
  //释放窗口句柄
  DeAllocateHwnd(FWinHandle);
  inherited;
end;

procedure TTestThread.Execute;
begin
  inherited;
  while (not FSignalShutdown) do
  Begin
    sleep(1000);
  end;
  PrntMsg('');
end;

procedure TTestThread.PrntMsg(msg: String);
begin
  Form1.Memo1.Lines.Add('线程' + IntToStr(ThreadID) + '关闭!');
end;

procedure TTestThread.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_SHUTDOWN_THREADS then
    FSignalShutdown := True
  else
    Message.Result := DefWindowProc(FWinHandle, Message.Msg, Message.WParam, Message.LParam);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //广播消息
  SendMessage(wnd_Broadcast, WM_SHUTDOWN_THREADS, 0, 0);
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
  inherited;
  if Message.Msg = WM_SHUTDOWN_THREADS then
    ShowMessage('消息到了!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TestThread := TTestThread.Create;
end;

end.

转载于:https://www.cnblogs.com/abcliu110/archive/2010/09/19/1831093.html

发消息给非windows窗体程序相关推荐

  1. VS2010 win32项目windows窗体程序 向导生成代码解析

    目录: 1.Win32项目的windows窗体程序的向导生成了如下代码 2.手工生成代码如下 3.当消息队列中没有消息需要处理,我们可以利用这段时间处理我们自己的任务 1.Win32项目的window ...

  2. vs 窗体连接mysql_vs2008 c#开发windows窗体程序,怎么连接数据库?

    你的位置: 问答吧 -> .NET -> 问题详情 vs2008 c#开发windows窗体程序,怎么连接数据库? 我的oracle服务器为WebServer数据库为MIS,用户名为MIS ...

  3. C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序

    C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序 实验内容:Windows 窗体程序 一.实验目的及要求 二.实验环境 三.实验内容与步骤 一.设计简单的计算器 3.1.实验内容 ...

  4. 设计一个Windows窗体程序,设置程序,其运行结果如下图所示。垂直滚动条控制字体大小。

    设计一个Windows窗体程序,设置程序,其运行结果如下图所示.一个标签控件的Text属性为"缩放"两个字,它的字体大小取决于垂直滚动条的值(Maximum=72,Minimum= ...

  5. C++ Windows 窗体程序入门 - 1.你的第亿个窗体程序

    〇.前言-------------------- + 学Windows窗体已经有一段时日了,奈何没有什么浅显易懂(&便宜!!)的书籍 , 就想来 , 算是记笔记吧 , 顺便还能给你们总结一些经 ...

  6. 安装全局消息钩子实现dll窗体程序注入

    说明{      通过设置全局消息钩子来实现dll注入,然后窗体有相关消息请求的时候就会自动加载注入dll, 然后在入口处做处理就可以了.注入方式简单很多,比代码注入和lsp等注入都简单,就不解释了. ...

  7. 基于DirectUI搭建Windows窗体程序

    使用DirectUI需要directuiCom.dll,包含IDirectUI.h和DirectuiDef.h.在你的应用程序中初始化CLSID_DirectUI,并获取IDirectUI(IID_I ...

  8. [C#][Windows窗体程序]实现自动出题并判分

    文章目录 一.pandas是什么? 二.效果演示 三.代码 Form1.cs 四.补充 一.pandas是什么? 编写一个Windows程序,实现自动出题并判分的功能. 功能要求: 能使用Random ...

  9. 使用增强的Windows窗体为你的.Net程序打造丰富的用户界面

    本文内容基于微软 Visual Studio 2005 发布前的预览版,之前代号为"Whidbey".其中所有信息在正式版中都可能会有所改变. 本文所讨论内容: 关于Windows ...

最新文章

  1. 为uThreadPool增加线程池等待功能
  2. 「高并发秒杀」linux安装软件有哪几种方式
  3. python简单超级马里奥游戏下载_python 实现超级玛丽游戏
  4. 计算机学院志愿公益活动,计算机学院开展学雷锋主题公益活动
  5. 河南智游科技 超市管理系统
  6. @Component和@Configuration作为配置类的差别
  7. 2013 年亚洲赛杭州赛区卡题总结
  8. 吴恩达机器学习(六)神经网络(前向传播)
  9. linux ntp端口 修改,Linux时间配置(修改时间 修改日期 ntpd ntpdate NTP socket exiting)...
  10. shader 反射 水面_大规模水面渲染
  11. 阿里云云计算 46 阿里云DDoS防护
  12. html个人中心源代码,HTML用户注册页面设置源码
  13. 私有云计算保密技术谁家靠谱?云宏CNware®虚拟化平台安全体系设计
  14. MySQL学习笔记第8课(共10课)
  15. iOS-OC-集成PayPal支付方式
  16. oracle 10102,linux - linux中的Oracle数据库安装程序[INS-10102]安装程序初始化失败 - SO中文参考 - www.soinside.com...
  17. apktool使用注意事项
  18. #3189. 八纵八横(c)
  19. kafka linux 脚本测试,kafka shell命令操作
  20. 3.css3深入,高级选择器浮动布局,html5/css3基础开始(推荐收藏)

热门文章

  1. [react] react中的key有什么作用?
  2. [react] super()和super(props)有什么区别?
  3. [html] html5中的meta标签renderer有什么作用?
  4. [html] web workers有用过吗?能帮我们解决哪些问题?
  5. [vue] vue的:class和:style有几种表示方式?
  6. [vue] 删除数组用delete和Vue.delete有什么区别?
  7. [css] 请使用CSS画一个带锯齿形边框圆圈
  8. [css] 为什么伪类的content不能被选中?
  9. 前端学习(654):优化插件
  10. html:(7):了解hx标签和加强语气