用postmessage后台点击记事本的关闭按钮我知道有直接的消息可以将记事本关闭,不过我现在像通过定点按按钮来解决。先用 GetCursorPos找到屏幕上记事本关闭按钮的位置 x,y,然后最小化记事本
然后用findwindow找到记事本的句柄,为long a 
wsmg= WM_LBUTTONDOWN
wparam=1,
lparam=y*66536+x
Call PostMessage(a, wMsg, wParam, lParam) 
然后sleep 200
wsmg= WM_LBUTTONUP
wparam=1,
lparam=y*66536+x
Call PostMessage(a, wMsg, wParam, lParam) 
为什么记事本一点反应都没有,难道是坐标有问题?钦各位老师帮帮忙,看错在哪里?

解决方案 »

  1.   

    更正一下上面 wsmg= WM_LBUTTONDOWN,wsmg= WM_LBUTTONUP
    更正为wmsg= WM_LBUTTONDOWN,wmsg=WM_LBUTTONUP
    书写方面没问题
      

  2.   

    发送鼠标点击消息是错误的方法
    你要发送窗体关闭消息,前提条件是找到记事本句柄后发送Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const WM_CLOSE = &H10Private Sub Command1_Click()
        Dim lngP As Long
        lngP = FindWindow(vbNullString, "无标题 - 记事本")
        If lngP <> 0 Then lngP = PostMessage(lngP, WM_CLOSE, 0&, 0&)
    End Sub
      

  3.   


    老师,您好,也就是说用postmessage后台按键关闭记事本这个方法行不通?
    那我想问一下,我上面的代码如果用在没有禁用postmessage消息的游戏里面是行的通的吗?谢谢您
      

  4.   


    嗯。找句柄的话一般都用findwindow和findweindowex.我是怕坐标是不是存在什么问题,如果是坐标没错的话,基本就是被屏蔽了
      

  5.   

    1.你都最小化记事本了,你怎么能点到关闭窗口呢?
    2.你最好在发送点击事件前,先用SetCursorPos把鼠标移到对应的位置上,然后用mouse_event模拟点击
    Public Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As LongPublic Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
      

  6.   

    老师您好,您说的mouse_event我懂,那是前台的,我需要后台操作。
      

  7.   

    根本就不用发送点击消息来关闭窗体,直接对窗体发送关闭消息:WM_ClOSE
      

  8.   

    这位老师比较精明,说实话吧,就是想用postmessage做到后台点击的效果,比如在游戏里挂个机,后台刷新网页等,我知道按键精灵有这个功能,但是最近在学习vb的api想借此机会都学一点。新手,老师们还得多包含呐
      

  9.   

    如果是模拟鼠标键盘操作,那么可以最佳选择是:keybd_event和mouse_event
      

  10.   

    看了这几年关于PostMessage 后台发送鼠标点击 窗体任意设置的位置,居然没有发现一个代码是可以实现的,正是郁闷啊,不知道这些代码错误在什么地方Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const WM_LBUTTONDOWN As Long = &H201
    Private Const WM_LBUTTONUP As Long = &H202Private Sub Command1_Click()
        SendClick Me.hwnd, 10, 10
    End SubPrivate Sub Form_Click()
        MsgBox "dasd"
    End SubPrivate Function SendClick(hwnd As Long, mX As Long, mY As Long)
        '发送点击消息
        Dim I As Long
        I = PostMessage(hwnd, WM_LBUTTONDOWN, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
        I = PostMessage(hwnd, WM_LBUTTONUP, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
    End Function你要是说 hwnd不对,所以没有发送到,好像又不是这么回事情,不知道为什么。现在难道高手都不在了吗?