事件操作

对于系统级的事件,不得由App直接发送。所有事件的投递,当应用不在运行时,都会加载应用并执行。

IShell_SendEvent进行同步,阻塞的事件投递,目标应用由CLSID 参数决定。该函数内部会直接调用目标应用的HandleEvent。函数的返回值表征该事件是否被Consume(处理,并Return TRUE)了。当使用该函数投递指针(包括接口)时,接收方必须对其负责(Copy Buffer,对接口引用计数加1)。

IShell_PostEvent:进行异步,非阻塞的方式投递事件,其他行为和IShell_SendEvent一致。由于是异步方式,其返回值仅表征事件是否已经Schedule了,而并非是否处理了。该接口应尽量避免投递指针或者接口。

IShell_PostEventEx:和IShell_PostEvent一致,唯一的区别为,前者不能Schedule重复的同一类型的事件,而后者可以。

IShell_HandleEvent:行为和IShell_SendEvent类似,区别是不需要指定目标应用的CLSID,默认投递到Top VisableApp,鉴于此,该函数通常被用于接口向应用投递事件,比如IMenuCtl投递EVT_Command

IShell_SendURL:运行时动态的决定目标App,将URL视为MIME TypeBREW查询出Handler后,投递EVT_APP_Send_URL给该App。投递是同步阻塞的。URL会被BREW进行Copy,所以是安全的。

IShell_PostURL:和IShell_SendURL类似,区别是异步的投递,事件为EVT_APP_POST_URL

使用IShell_SendURL,IShell_PostURL的优点是,应用间解耦,利用MIME Register/Get Handler机制动态获取终端CLSID并投递,数据的投递是安全的,如果想投递任意复杂度的数据,可以将其进行BASE64编码成纯ASCII数据再投递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值