PB发送和接收消息send SendMessage
1.用PB自带的SEND函数发送消息 传字符:Send(Handle(w_main),1600,0,'dfdfd') 传LONG:Send(Handle(w_main),1600,0,123)
2.用API发送LONG类型消息,申明:
Function long SendMessage(long hwnd,long wMsg,long wParam,long lParam) Library "user32.dll" Alias for "SendMessageA"
发送:SendMessage(Handle(w_main),1600,0,123)
接收方法:
Other事件代码:
if message.number=1600 then
string ls_tmp
ls_tmp=string(message.LongParm)
messagebox("",ls_tmp)
end if
3.用API发送string类型消息,申明:
Function long SendMessage(long hwnd,long wMsg,long wParam,string lParam) Library "user32.dll" Alias for "SendMessageA"
发送:SendMessage(Handle(w_main),1600,0,'123')
接收方法:
Other事件代码:
if message.number=1600 then
string ls_tmp
ls_tmp=string(message.LongParm,'address') //注意这里接收字符的方法
messagebox("",ls_tmp)
end if
******************
DELPHI中给PB窗口发消息,用函数 SendMessage 默认的不能发STRING 类型,必须自己申明一下函数:
function SendMessageAA(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: string): LRESULT; stdcall; external 'user32.dll' name 'SendMessageA';
发送代码:
AData := 'ABC';
SendMessageAA(FHandle,WM_NETWORKMSG,0,AData);
搞了很久,才弄出来,和大家分享一下这个发送消息的方法。
*******************
另一个接收消息的方法
申明:
function long GlobalGetAtomName(long ATOM,ref string lpBuffer,integer nSize) Library "kernel32.dll" Alias for "GlobalGetAtomNameA"
function long GlobalDeleteAtom(long ATOM) Library "kernel32.dll"
other事件调用:
if message.number=1600 then
string ls_tmp
long ll_return
ls_tmp=space(50)
ll_return=GlobalGetAtomName(message.LongParm,ls_tmp,50)
GlobalDeleteAtom(message.LongParm)
messagebox("",ls_tmp)
end if
Function long FindWindowA (String lpClassName , String lpWindowName ) Library "user32.dll"
Function Long FindWindowExA(Long ph, Long ch, ref String cn, ref String wn) Library "user32.dll"
// 事件: wf_printtax()
//--------------------------------------------------------------------
// 描述: 调用API向 弹出的窗口中的 打印 按钮发送点击动作
// 参数:
//--------------------------------------------------------------------
// 返回: integer 1 成功 -1 失败
//--------------------------------------------------------------------
// 作者: Joshua Zou 日期: 2008年06月16日
//--------------------------------------------------------------------
// Copyright (c) 2002-2007 , All rights reserved.
//--------------------------------------------------------------------
// 修改历史:
//
//====================================================================
ULong ll_handle,ll_handle_child,ll_null
String ls_null,ls_text
Constant long BM_CLICK = 245
setnull(ll_null)
//获得该消息窗口的句柄
ll_handle = FindWindowA(ls_null,'打印提示') //字符串"打印提示"为消息窗口的标题名称
ls_text = "打 印" //字符串"打印"为窗口的控件按钮的caption
setnull(ls_null)
ll_handle_child=FindWindowExA(ll_handle, ll_null, ls_null,ls_text )
if ll_handle_child>0 then
SendMessage(ll_handle_child, BM_CLICK, 0, 0)
return 1
end if
END IF
return -1