日期:2014-05-19  浏览次数:21308 次

API 高手请进 急!
用C#   调用API
        如果在API中有一个自定义事件;
       
//////////////////////////////////////////////////////////
//   MsgName:   TI_TELOFFHOOK_MESSAGE
//
//   Function:   本地话机摘机
//
//   wParam:   保留
//
//   lParam:   保留
//////////////////////////////////////////////////////////
#define   TI_TELOFFHOOK_MESSAGE   (WM_USER+712)

当本地话机摘机时,这个事件触发
我在C#   中如何使用

如果是方法我们可以用

//控制系统摘机
[DllImport( "TmA4Drv.dll ")]
private   static   extern   void     OffHook();  

来调用。

还请指教!不胜感激!


------解决方案--------------------
大致把dll的代码贴出来,事件一般是客户端定义,由服务端触发,
#define .....
可以用
public const int TI_TELOFFHOOK_MESSAGE 812 //我记不大清了,WM_USER好像是100

------解决方案--------------------
我是否可以这样理解你的意思:
硬件会触发一个事件,发送消息TI_TELOFFHOOK_MESSAGE (WM_USER+712),你需要在C#中处理这个消息,如果是这样,你可以如下试试:
你的类需要实现IMessageFilter接口,只有一个方法:
         public bool PreFilterMessage(ref Message m)
{
// TODO: 添加 FlashForm.PreFilterMessage 实现
if (m.Msg==(WM_USER+712)) //截获消息
{
  //处理此消息 }
else
{
DisPatchMessage(m);
}


return false;
}
别忘了构造函数中加上Application.AddMessageFilter(this);
这样一来,就可以处理任何你想要的消息,不知道我理解的对不对。
------解决方案--------------------
[StructLayout(LayoutKind.Sequential)]
struct DATASTR
{
int Result;
[MarshalAs(ByValArray,SizeConst=46)]
char[] prtData;
}

[StructLayout(LayoutKind.Sequential)]
struct TV_Event;
{
int Type;
DATASTR data;
}