這是我學delphi win32api參考里的例子 發送方代碼: var Form1: TForm1; UserMessage:UINT; implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); var Recipients:DWORD; begin Recipients:=BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE, @Recipients, UserMessage, 0, 0,);end;procedure TForm1.FormCreate(Sender: TObject); begin UserMessage:=RegisterWindowMessage('CallWindowProc test Message'); end;接收方代碼: var Form1: TForm1; UserMessage:UINT; OldWindowProc:TFNWndProc;implementation{$R *.dfm}function NewWindowProc(TheWindow:HWND;Msg:Integer;wParam:WPARAM;lPAram:LPARAM):Longint; var iLoop:Integer; begin if Msg=UserMessage then begin Form1.ProgressBar1.Visible:=True; Form1.Label2.Visible:=true;
form1.Repaint; for iLoop:=0 to 100 do begin Form1.ProgressBar1.Position:=iLoop; Sleep(10); end; form1.ProgressBar1.Visible:=false; form1.Label2.Visible:=false; result:=1; end else result:=CallwindowProc(OldwindowProc,TheWindow,Msg,wParam,lParam); end; procedure TForm1.FormCreate(Sender: TObject); begin UserMessage:=RegisterWindowMessage('CallWindowProc Test Message'); OldWindowProc:=TFNWndProc(SetWindowLong(Form1.Handle,GWL_WNDPROC,Longint(@NewWindowProc))); end;procedure TForm1.FormDestroy(Sender: TObject); begin SetWindowLong(Form1.Handle,GWL_WNDPROC,Longint(OldWindowProc)); end;希望對你有用,呵呵
perform,sendmessage,postmessage
perform可以向任何一个窗体或组件发送消息,只需要知道窗体或组件的实例即可,
调用perform方法后要等消息得到处理后才返回
其他的不多说了,还是去参考下书籍
發送方代碼:
var
Form1: TForm1;
UserMessage:UINT;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
Recipients:DWORD;
begin
Recipients:=BSM_APPLICATIONS;
BroadcastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE,
@Recipients,
UserMessage,
0,
0,);end;procedure TForm1.FormCreate(Sender: TObject);
begin
UserMessage:=RegisterWindowMessage('CallWindowProc test Message');
end;接收方代碼:
var
Form1: TForm1;
UserMessage:UINT;
OldWindowProc:TFNWndProc;implementation{$R *.dfm}function NewWindowProc(TheWindow:HWND;Msg:Integer;wParam:WPARAM;lPAram:LPARAM):Longint;
var
iLoop:Integer;
begin
if Msg=UserMessage then
begin
Form1.ProgressBar1.Visible:=True;
Form1.Label2.Visible:=true;
form1.Repaint; for iLoop:=0 to 100 do
begin
Form1.ProgressBar1.Position:=iLoop;
Sleep(10);
end; form1.ProgressBar1.Visible:=false;
form1.Label2.Visible:=false; result:=1;
end
else
result:=CallwindowProc(OldwindowProc,TheWindow,Msg,wParam,lParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
UserMessage:=RegisterWindowMessage('CallWindowProc Test Message'); OldWindowProc:=TFNWndProc(SetWindowLong(Form1.Handle,GWL_WNDPROC,Longint(@NewWindowProc)));
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
SetWindowLong(Form1.Handle,GWL_WNDPROC,Longint(OldWindowProc));
end;希望對你有用,呵呵
其实 书我看了 主要看了 两本
一本是<delphi5 开发人员指南> 还有一本是 <Delphi+7+程序设计与开发技术大全> 里面也有些代码
不过像 (1)在应用程序之间发送消息 (2)进程之间发送消息 的源码书中没有介绍.
我是想请有开发经验的 前辈们贴点 相关代码 研读下,加深这方面的理解.
至于 <windowWindows核心编程 > 这本书 目前还没看,知识浏览了一下 准备细细看看 消息这部分.
希望各位 继续贴点源码啊!
SendMessage
这些都是可以的
建议看一下Windows的消息机制
procedure WMIme(var Msg: TMessage); message WM_KEYDOWN;实现
procedure TFrmMain.WMIme(var Msg: TMessage);
var
val: string;
begin
MessageBox(Msg.WParam, PChar('test'), 'Warning', 0);
end;