delphi高手们,请问如何接收另一个应用程序发来的自定义My_Msg_StkData,并响应函数OnStkDataOK()?给分!!! delphi高手们,请问如何接收另一个应用程序发来的自定义My_Msg_StkData,并响应函数OnStkDataOK()?给分!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 希望下面的代码对你有所帮助:unit CopyMain;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus;type TMainForm = class(TForm) DataMemo: TMemo; BottomPnl: TPanel; BtnPnl: TPanel; CloseBtn: TButton; CopyBtn: TButton; MainMenu1: TMainMenu; File1: TMenuItem; CopyData1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; Help1: TMenuItem; About1: TMenuItem; procedure CloseBtnClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure About1Click(Sender: TObject); procedure CopyBtnClick(Sender: TObject); private { Private declarations } protected procedure WndProc(var Message: TMessage); override; public { Public declarations } end;var MainForm: TMainForm;implementation{$R *.DFM}uses AboutU, RegMsg;function BroadcastSystemMessage(Flags: DWORD; Recipients: PDWORD; uiMessage: UINT; wParam: WPARAM; lParam: LPARAM): Longint; stdcall; external 'user32.dll';var Recipients: DWORD = BSM_APPLICATIONS;procedure TMainForm.WndProc(var Message: TMessage);var DataBuffer: TCopyDataStruct; Buf: PChar; BufSize: Integer;begin if Message.Msg = DDGM_HandshakeMessage then begin BufSize := DataMemo.GetTextLen + (1 * SizeOf(Char)); Buf := AllocMem(BufSize); DataMemo.GetTextBuf(Buf, BufSize); try with DataBuffer do begin { Fill dwData with registered message as safety check } dwData := DDGM_HandshakeMessage; cbData := BufSize; lpData := Buf; end; SendMessage(Message.wParam, WM_COPYDATA, Handle, Longint(@DataBuffer)); finally FreeMem(Buf, BufSize); end; end else inherited WndProc(Message);end;procedure TMainForm.CloseBtnClick(Sender: TObject);begin Close;end;procedure TMainForm.FormResize(Sender: TObject);begin BtnPnl.Left := BottomPnl.Width div 2 - BtnPnl.Width div 2;end;procedure TMainForm.About1Click(Sender: TObject);begin AboutBox;end;procedure TMainForm.CopyBtnClick(Sender: TObject);begin BroadcastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE, @Recipients, DDGM_HandshakeMessage, Handle, 0);end;end. uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls;const WM_COPYDATA = $004A;type TMainForm = class(TForm) ReadMemo: TMemo; MainMenu1: TMainMenu; File1: TMenuItem; Exit1: TMenuItem; Help1: TMenuItem; About1: TMenuItem; procedure Exit1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure About1Click(Sender: TObject); private procedure OnAppMessage(var M: TMsg; var Handled: Boolean); procedure WMCopyData(var M: TMessage); message WM_COPYDATA; end;var MainForm: TMainForm;implementation{$R *.DFM}uses RegMsg, AboutU;type PCopyDataStruct = ^TCopyDataStruct; TCopyDataStruct = record dwData: DWORD; cbData: DWORD; lpData: Pointer; end;procedure TMainForm.OnAppMessage(var M: TMsg; var Handled: Boolean);begin if M.Message = DDGM_HandshakeMessage then begin PostMessage(M.wParam, DDGM_HandshakeMessage, Handle, 0); Handled := True; end;end;procedure TMainForm.WMCopyData(var M: TMessage);begin if PCopyDataStruct(M.lParam)^.dwData = DDGM_HandshakeMessage then ReadMemo.SetTextBuf(PChar(PCopyDataStruct(M.lParam)^.lpData));end;procedure TMainForm.Exit1Click(Sender: TObject);begin Close;end;procedure TMainForm.FormCreate(Sender: TObject);begin Application.OnMessage := OnAppMessage;end;procedure TMainForm.About1Click(Sender: TObject);begin AboutBox;end;end./////////////////////unit RegMsg;interfacevar DDGM_HandshakeMessage: Cardinal;implementationuses WinProcs;const HandshakeMessageStr: PChar = 'DDG.CopyData.Handshake';initialization DDGM_HandshakeMessage := RegisterWindowMessage(HandshakeMessageStr);end. 两个字节,如果写入一个大于65535的数? 问个问题,顺便散点分 怎么屏蔽ShellListView的右键单击事件? InterBase7.1的驱动哪里有? 谈谈我在CSDN上的道德观,顺便散点分 怎么用spcomm控件得到串行口rs232连接设备中的数据? 大家讨论,Web编程,用哪种语言最好!!! 千分(金)征集编程思路,SPCOMM同时和100个单片机通讯的问题. 关于控件GifImage的使用问题。。。。〉〉〉〉〉〉〉〉〉〉 请教:如何通过ADO方法取得数据结果集的记录个数 CSDN大本营离线浏览器似乎是DELPHI编的谁有这个东西的源代码? 调查一下上海Delphi程序员的薪水状况
unit CopyMain;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;type
TMainForm = class(TForm)
DataMemo: TMemo;
BottomPnl: TPanel;
BtnPnl: TPanel;
CloseBtn: TButton;
CopyBtn: TButton;
MainMenu1: TMainMenu;
File1: TMenuItem;
CopyData1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
Help1: TMenuItem;
About1: TMenuItem;
procedure CloseBtnClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure CopyBtnClick(Sender: TObject);
private
{ Private declarations }
protected
procedure WndProc(var Message: TMessage); override;
public
{ Public declarations }
end;var
MainForm: TMainForm;implementation{$R *.DFM}uses AboutU, RegMsg;function BroadcastSystemMessage(Flags: DWORD; Recipients: PDWORD;
uiMessage: UINT; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
external 'user32.dll';var
Recipients: DWORD = BSM_APPLICATIONS;procedure TMainForm.WndProc(var Message: TMessage);
var
DataBuffer: TCopyDataStruct;
Buf: PChar;
BufSize: Integer;
begin
if Message.Msg = DDGM_HandshakeMessage then begin
BufSize := DataMemo.GetTextLen + (1 * SizeOf(Char));
Buf := AllocMem(BufSize);
DataMemo.GetTextBuf(Buf, BufSize);
try
with DataBuffer do begin
{ Fill dwData with registered message as safety check }
dwData := DDGM_HandshakeMessage;
cbData := BufSize;
lpData := Buf;
end;
SendMessage(Message.wParam, WM_COPYDATA, Handle,
Longint(@DataBuffer));
finally
FreeMem(Buf, BufSize);
end;
end
else
inherited WndProc(Message);
end;procedure TMainForm.CloseBtnClick(Sender: TObject);
begin
Close;
end;procedure TMainForm.FormResize(Sender: TObject);
begin
BtnPnl.Left := BottomPnl.Width div 2 - BtnPnl.Width div 2;
end;procedure TMainForm.About1Click(Sender: TObject);
begin
AboutBox;
end;procedure TMainForm.CopyBtnClick(Sender: TObject);
begin
BroadcastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE,
@Recipients, DDGM_HandshakeMessage, Handle, 0);
end;end.
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Menus, StdCtrls;const
WM_COPYDATA = $004A;type
TMainForm = class(TForm)
ReadMemo: TMemo;
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
Help1: TMenuItem;
About1: TMenuItem;
procedure Exit1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure About1Click(Sender: TObject);
private
procedure OnAppMessage(var M: TMsg; var Handled: Boolean);
procedure WMCopyData(var M: TMessage); message WM_COPYDATA;
end;var
MainForm: TMainForm;implementation{$R *.DFM}uses RegMsg, AboutU;type
PCopyDataStruct = ^TCopyDataStruct;
TCopyDataStruct = record
dwData: DWORD;
cbData: DWORD;
lpData: Pointer;
end;procedure TMainForm.OnAppMessage(var M: TMsg; var Handled: Boolean);
begin
if M.Message = DDGM_HandshakeMessage then begin
PostMessage(M.wParam, DDGM_HandshakeMessage, Handle, 0);
Handled := True;
end;
end;procedure TMainForm.WMCopyData(var M: TMessage);
begin
if PCopyDataStruct(M.lParam)^.dwData = DDGM_HandshakeMessage then
ReadMemo.SetTextBuf(PChar(PCopyDataStruct(M.lParam)^.lpData));
end;procedure TMainForm.Exit1Click(Sender: TObject);
begin
Close;
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
Application.OnMessage := OnAppMessage;
end;procedure TMainForm.About1Click(Sender: TObject);
begin
AboutBox;
end;end.
/////////////////////
unit RegMsg;interfacevar
DDGM_HandshakeMessage: Cardinal;implementationuses WinProcs;const
HandshakeMessageStr: PChar = 'DDG.CopyData.Handshake';initialization
DDGM_HandshakeMessage := RegisterWindowMessage(HandshakeMessageStr);
end.