日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

发消息给非windows窗体程序

發布時間:2023/12/10 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 发消息给非windows窗体程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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窗体程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。