比如说一些游戏或360等杀毒软件屏蔽 点击函数……
API也是一个函数而已,如果API被屏幕了就不能用了,那么如果在程序里自己写一个这样的函数,是不是就可以无法被屏蔽了?那么怎么写这样的一个函数呢?用vb! 如果vb写出不的话,用vc写成DLL也可以。

解决方案 »

  1.   

    可以,mouse_event就是模拟鼠标的函数'Example Name:Auto Click Menu
    'Example by Daniel Kaufmann ([email protected])'Paste this code in a Form
    'with a Menu named menu1 which has a menuitem named menu2Private Type POINTAPI
        x As Long
        y As Long
    End Type
    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End TypePrivate Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetMenuItemRect Lib "user32" (ByVal hwnd As Long, ByVal hMenu As Long, ByVal uItem As Long, lprcItem As RECT) As Long
    Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As LongPrivate Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move
    Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
    Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
    Private Const MOUSEEVENTF_MOVE = &H1 ' mouse move
    Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
    Private Const MOUSEEVENTF_MIDDLEUP = &H40
    Private Const MOUSEEVENTF_RIGHTDOWN = &H8
    Private Const MOUSEEVENTF_RIGHTUP = &H10Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Private Declare Function GetMessageExtraInfo Lib "user32" () As Long
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    Const SM_CXSCREEN = 0 'X Size of screen
    Const SM_CYSCREEN = 1 'Y Size of ScreenPrivate Sub Form_KeyPress(KeyAscii As Integer)
        Dim mWnd As Long
        mWnd = Me.hwnd
        
        Dim hMenu As Long, hSubMenu As Long    hMenu = GetMenu(mWnd) 'Get the Menu of the Window(MenuBar)
        ClickMenuItem mWnd, hMenu, 0 'Click on the first SubMenu
        hSubMenu = GetSubMenu(hMenu, 0) 'Get its submenu
        ClickMenuItem mWnd, hSubMenu, 0 'Click on the first MenuItem of the Submenu
        
    End Sub
    Private Sub ScreenToAbsolute(lpPoint As POINTAPI)
    lpPoint.x = lpPoint.x * (&HFFFF& / GetSystemMetrics(SM_CXSCREEN))
    lpPoint.y = lpPoint.y * (&HFFFF& / GetSystemMetrics(SM_CYSCREEN))
    End SubPrivate Sub Click(p As POINTAPI)
    'p.X and p.Y in absolute coordinates
    'Put the mouse on the pointmouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, p.x, p.y, 0, GetMessageExtraInfo()
    'Mouse Down
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo()
    'Mouse Up
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo()
    End SubPrivate Sub ClickMenuItem(ByVal mWnd As Long, ByVal hMenu As Long, ByVal Pos As Long)
    Dim ret As Long
    Dim r As RECT, p As POINTAPI
    ret = GetMenuItemRect(mWnd, hMenu, Pos, r)
    If ret = 0 Then Exit Sub
    p.x = (r.Left + r.Right) / 2
    p.y = (r.Top + r.Bottom) / 2
    ScreenToAbsolute p
    'Click on p
    Click p
    End SubPrivate Sub Form_Load()
    Dim mWnd As Long, p As POINTAPI
    mWnd = Me.hwnd
    Dim hMenu As Long, hSubMenu As Long
    hMenu = GetMenu(mWnd) 'Get the Menu of the Window(MenuBar)
    ClickMenuItem mWnd, hMenu, 0 'Click on the first SubMenu
    hSubMenu = GetSubMenu(hMenu, 0) 'Get its submenu
    ClickMenuItem mWnd, hSubMenu, 0 'Click on the first MenuItem of the Submenu
    p.x = &HFFFF& / 2
    p.y = &HFFFF& / 2
    Click p
    Me.AutoRedraw = True
    Me.BackColor = vbWhite
    Print "Press any key"
    End SubPrivate Sub menu2_Click()
    MsgBox "Click"
    End Sub
      

  2.   

    用mouse_event我知道,但问题是我用的mouse_event也被屏蔽了,mouse_event也是API啊我的意思是,mouse_event(中说API)是调用外部的函数,能不能不调用,自己写一个mouse_event出来。
    这样这个函数就是自己程序内部代码,应该就屏蔽不了了吧
      

  3.   

    mouse_event调用SendInput
    你这要看它是如何屏蔽的
      

  4.   


    Private Sub ScreenToAbsolute(lpPoint As POINTAPI)
    lpPoint.x = lpPoint.x * (&HFFFF& / GetSystemMetrics(SM_CXSCREEN))
    lpPoint.y = lpPoint.y * (&HFFFF& / GetSystemMetrics(SM_CYSCREEN))
    End Sub
    这个是转换什么坐标的?啥意思?
      

  5.   

    哎哟,按键精灵不就是驱动级别的?现成的,还不用写代码再来,CSDN下载频道有C++写的驱动级别的,直接调用就是了.