vb winproc的返回值windows蒙骗

vb winproc的返回值windows欺骗
我在网上下了一个程序:  
无标题栏的拖动程序。’ 这是公共模块的代码 
 Option Explicit 
     Public Const WM_NCHITTEST = &H84 
       Public Const VK_LBUTTON = &H1 
     Public Const HTCAPTION = 2 
      Public Const HTCLIENT = 1 
      Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer 
     
   Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
     
     Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 
     
     
     Public Const GWL_WNDPROC = -4 
     
     Global lpPrevWndProc As Long 
     
     Global gHW As Long 
     
    ’ 这里是关键,我自定义了一个窗口函数(回调函数),以替代 VB 窗体自己的默认窗口函数。’ 窗口函数是干什么的?它就是负责处理 Windows 发送给它的消息,并加以过滤,筛选出它感兴趣’ 的消息,映射成为事件供我们使用。VB 中每个窗口都有一个默认的窗口函数,我们是看不到的。’ 有很多消息都被 VB 的默认窗口函数过滤掉了。了解 C/C++/Delphi 程序设计的朋友应该知道这些。 
     
     Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
     
     ’ 我们也进行消息过滤,不过我们指拦截我们感兴趣的消息 
     
     ’ 其他消息我们懒得处理,交给 VB 默认的窗口函数去处理吧。 
     
     Select Case uMsg 
     
     Case WM_NCHITTEST ’ 拦截 WM_NCHITTEST 消息 
     
     If GetAsyncKeyState(VK_LBUTTON) < 0 Then ’ 是否有鼠标左键在窗体客户区按下? 
     
     ’ 如果是,函数返回值被设置为 HTCAPTION,欺骗 Windows,让它以为鼠标是按在标题栏 
     
     ’ Windows 是通过窗口函数的返回值进行判断处理的 
     
     WindowProc = HTCAPTION
     
     Exit Function 
     
     Else 
     
     ’ 其他的我们不管,还是规规矩矩的该怎么样就怎么样 
     
     WindowProc = HTCLIENT 
     
     Exit Function 
     
     End If 
     
     End Select 
     
     ’ 这里又是关键,因为其他我们不关心的消息我们自己不处理,所以必须由 VB 的默认处理函数处理 
     
     ’ lpPrevWndProc 其实就是一个函数指针,它指向 VB 默认窗口函数 
     
     WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam) 
     
     End Function 
这是窗体的代码 
     
     VERSION 5.00 
     
     Begin VB.Form Form1 
     
     BorderStyle = 0 ’None 
     
     ClientHeight = 3195 
     
     ClientLeft = 0 
     
     ClientTop = 0 
     
     ClientWidth = 4680 
     
     LinkTopic = "Form1" 
     
     MaxButton = 0 ’False 
     
     MinButton = 0 ’False 
     
     ScaleHeight = 3195 
     
     ScaleWidth = 4680 
     
     ShowInTaskbar = 0 ’False 
     
     StartUpPosition = 3 ’窗口缺省 
     
     Begin VB.CommandButton Command1 
     
     Caption = "Command1" 
     
     Height = 375 
     
     Left = 2160 
     
     TabIndex = 0 
     
     Top = 720 
     
     Width = 1575 
     
     End 
     
     End 
     
     Attribute VB_Name = "Form1" 
     
     Attribute VB_GlobalNameSpace = False 
     
     Attribute VB_Creatable = False 
     
     Attribute VB_PredeclaredId = True 
     
     Attribute VB_Exposed = False 
     
     
     Private Sub Command1_Click() 
     
     Unload Me ’ 按下这个按钮就退出了 
     
     End Sub 
     
     
     Private Sub Form_Load() 
     
     gHW = Me.hwnd ’ 保存窗体的句柄 
     
     ’ 下面是关键,完成两个工作:1、将我们自己的全局函数替换为新的窗体回调函数 
     
     ’ 2、保存原来的 VB 默认窗户口函数地址 
     
     lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc) 
     
     End Sub 
     
这个程序可以欺骗windows按住客户区拖动窗口,但是我想我把 WindowProc = HTCAPTION改成  winproc=HTMAXBUTTON         然后点客户区让windows以为点的是最大化按钮,但是程序不能最大化。
------解决思路----------------------
'你可以用一个正常又标题的窗体测试,回发现这样只是更改最大化按钮的按下/释放状态;'
'因为点击的位置不对,实际不会最大化'
WindowProc = HTMAXBUTTON

'不如自己直接进行最大化操作'
If IsZoomed(hw) Then
    ShowWindow hw, SW_NORMAL
Else
    ShowWindow hw, SW_MAXIMIZE
End If

Exit Function