nsis利用ButtonEvent插件移动无标题窗口

24 篇文章 1 订阅

众所周知,普通win窗口是带有标题栏的,标题栏的主要功用之一,就是可以方便的拖动窗体,但为了各式各样的目的,有时候我们不得不想办法将其消除,在nsis中主要是靠system插件调用系统函数改变窗体风格来实现,这不是本文的重点,略过,但我们将标题删除以后,最大的问题就是这个无标题窗体无法通过鼠标拖动,后来一些nsis爱好者研究出了一套有效的方法来解决这个问题,其主要原理基本都是靠第三方插件来截获和传递鼠标左键消息来实现。殊不知其实通过nsis自带的官方插件ButtonEvent一样可以实现,并且一点都不复杂。

首先在窗体合适的位置创建一个含有特定属性的STATIC控件。用 GetFunctionAddress获取函数地址。

System::Call`kernel32::GetModuleHandle(i 0) i.R3`
System::Call 'User32::CreateWindowEx(i0,t"STATIC",i0,i0x50020100,i0,i228,i423,i40,i$HWNDPARENT,i1130,i0,i0)i.R1'
SetCtlColors $R1""transparent
GetFunctionAddress $R1 TryMe
ButtonEvent::AddEventHandler /NOUNLOAD 1130 $R1
设定插件函数TryMe的响应内容

Function TryMe
SendMessage $HWNDPARENT ${wm_SysCommand} 0xF011 $R1
FunctionEnd
多说几句,关于0xF011:其实在msdn里面,能查阅到的是0xF010(SC_MOVE),但使用0xF010在nsis里面不起作用,最标准的做法应该是使用SC_MOVE HTCAPTION(HTCAPTION=2),也就是0xF010+2=0xF012,与0xF011的区别仅在于移动的方式和位置不同。

例子下载:http://115.com/file/dpcwfk0k


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值