基于Andorid的接口开发

接口程序开发原理:

接口程序的开发原理是基于文本+消息机制的。

文本:说要用到文本文件的读和写

消息:说要用到 Windows 窗口消息的发与收

Windows 系统允许不同的窗口或进程间使用消息交换数据,消息发送时可以带四个参数,第一个参数叫接收窗口句柄,也就是说是 Windows 给接受者分配的一个编号;第二个参数是类型标志,是用来给各种消息做分类的,比如说按键类为 10,窗口放大缩小及关闭为 16,在我们系统中约定 WX46与接口通信的消息固定为十进制的 1280(十六进制 0x500) ;第三和第四个参数都是你可以利用来传递信息的,不过在我们系统中第三个固定为 0,我们只用第四个参数来区分消息,我们管它也叫消息类型。

Delphi 中发送消息的函数:PostMessage(ToHandle,1280,0,Msg.LParam)

VB 中发送消息的函数:PostMessage(ToHandle, 1280, 0, ByVal lParam&)    

PB 中发送消息的函数:send(ToHandle,1280,0,1)

在 Delphi 中关闭 WX46:PostMessage(ToHandle,16,0,0)

接口程序接收消息类似中断或事件的概念, 也就是说消息事件发生了, 就会自动执行消息的处理过程,这一点不同的语言区别比较大。

Delphi 中是声明一个消息处理过程: Procedure Inter(var Msg :TMessage); message WMA_InterPro; 其中的 WMA_InterPro 为常数=1280

PB 中是窗口的 OTHER 事件里进行消息判断。

 

 

如何得到窗口的句柄:

 

从上面的描述就可以看出来,建立消息连接联结首先是要得到的窗口句柄,包括自己的和对方的。 

 

Delphi 中自己的窗口句柄:Form1.Handle

 

VB 中是:frmMain.hWnd

 

接口程序运行后就首先要将自己句柄做为字串参数运行 WX46.exe:

 

Delphi6 下是:

 

ShellExecute(Application.Handle, Nil,Pchar(ExtractFilePath(Application.ExeName) + 'WX46.exe'), Pchar(IntToStr(Form1.Handle)), Nil, SW_SHOWNORMAL); 而 WX46 运行后的第一个消息就是返回自己的窗口句柄给接口程序,所以接口可以用以下方式得到WX46句柄的:

 

  IF ToHandle =0 Then Begin

 

    ToHandle :=Msg.LParam;   

 

  End Else begin

 

  …….

 

  End;

 

如果用以下方式获得 WX46 的窗口句柄的话,如果电脑中同时运行有两个相同标题的程序则可能就弄错了。

 

pda_Handle = FindWindowA(pda_Class, "无线点菜机管理")

 

 

例子:获取当前窗体句柄:

 tbContent.Text = this.Handle.ToString();

消息(把当前窗体句柄传给对方接口窗体)并启动对方窗体

 Process.Start("WX_1017.exe", this.Handle.ToString());

WX_1017.exe:对方窗体的可执行文件

 

 

例子:

 

 

posted @ 2013-03-15 16:18  郑松涛  阅读(430)  评论(0编辑  收藏  举报