怎样用vb模拟发送系统级的按键信息,最好可以达到和从键盘按下无任何区别?
我试过KEYBROAD_EVENT,好象达不到,SENDKEY就更不行了~

解决方案 »

  1.   

    什么是“系统级的按键信息”???它跟sendkey有什么不同???
    如果用sendkey不行那么用api试试:sendmessage
      

  2.   

    系统级就是要和系统一个级别的,要可以控制所有的程序,
    SENDMESSAGE?
    是不是和POSTMESSAGE WERM_CHAR一个类型?
    ===========================================
    我其实想控制游戏。最好有免费的控件~~~~
    先谢谢大家了!!!
      

  3.   

    全局热键
    简单一点就用SENDMESSAGE试试Hook,网上有例子
      

  4.   

    思路错误,这种应用不是“系统级的的按键信息”这样解决的。应该用procedure,也就是窗体总的消息处理,窗体中所有消息都要发到这里。
    fomr:
    Private Sub Form_Load()    ''init the variables hole the hwnd of "form1" and "cmdExit"
        MyLongfrmHwnd = Me.hwnd
        
        ''redirecting procedure of the specific window
        'ProcOld = SetWindowLong(MyLongfrmHwnd, GWL_WNDPROC, AddressOf OnMenu)     '设置Fomr1的procedure
    End Sub
    module:
    Public Function OnMenu(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        
        Select Case wMsg
            Case WM_SYSCOMMAND
                GoTo SYSPROC
            Case WM_COMMAND
                GoTo SYSPROC
            Case WM_LBUTTONUP
                GoTo SYSPROC
        End Select
        
        
    SYSPROC:
        OnMenu = CallWindowProc(ProcOld, MyLongfrmHwnd, wMsg, wParam, lParam)
        
    End Function
    其中用到的api你自己差一下。
      

  5.   

    你先用findwindow找到接受按键消息的目标程序窗口句柄,然后用enumchildwindow找到目标按钮的句柄,然后sendmessage向这个按钮发送按键消息。
      

  6.   

    FINDWINDOW?
    可是程序的窗体句柄会不停的变怎么办?
      

  7.   

    KEYBROAD_EVENT 达不到?
    你做了什么功能?
      

  8.   

    模拟键盘事件可以用汇编的dos和bios调用中断呀
      

  9.   

    调用中断????
    能详细说说吗?我很想知道啊?
    不知道大家有没有见过JOYTOKEY这个软件,
    就是把手柄上的按键对应到键盘上的按键,对应后可以任何的程序,级别很高。
    不知道是怎么完成的,看程序也是用VB写的!!!
      

  10.   

    SendMessage 是作为消息发送到指定窗口的,不能发送系统级的按键消息。
    keybd_event 发送的应该是底层的按键消息了。keybd_event 将会被初始按键消息发送到KeyboardProc Hook中接受处理,然后发送到拥有活动窗口的应用程序中,然后转换为窗口消息发送到活动窗口。可能在其他的环节出现问题。
      

  11.   

    我说的是汇编中的int 21h,和int 10h,中有按键的处理,具体你翻一下书,设好ah,al等的值就好了,然后编译连接为.exe,然后再在vb中ole
      

  12.   

    怎样使KEYBD_EVENT发送给任何程序?
      

  13.   

    试试 SendKeys 是不是能达到你的目的?
    使用方式为:SendKeys "%{F4}"   '此代码发送 Alt+F4,具体参数如下:
    Key Code 
    BACKSPACE {BACKSPACE}, {BS}, or {BKSP} 
    BREAK {BREAK} 
    CAPS LOCK {CAPSLOCK} 
    DEL or DELETE {DELETE} or {DEL} 
    DOWN ARROW {DOWN} 
    END {END} 
    ENTER  {ENTER}or ~ 
    ESC {ESC} 
    HELP {HELP} 
    HOME {HOME} 
    INS or INSERT {INSERT} or {INS} 
    LEFT ARROW {LEFT} 
    NUM LOCK {NUMLOCK} 
    PAGE DOWN {PGDN} 
    PAGE UP {PGUP} 
    PRINT SCREEN {PRTSC} 
    RIGHT ARROW {RIGHT} 
    SCROLL LOCK {SCROLLLOCK} 
    TAB {TAB} 
    UP ARROW {UP} 
    F1 {F1} 
    F2 {F2} 
    F3 {F3} 
    F4 {F4} 
    F5 {F5} 
    F6 {F6} 
    F7 {F7} 
    F8 {F8} 
    F9 {F9} 
    F10 {F10} 
    F11 {F11} 
    F12 {F12} 
    F13 {F13} 
    F14 {F14} 
    F15 {F15} 
    F16 {F16} 
    SHIFT  + 
    CTRL   ^ 
    ALT   % 
      

  14.   

    sendkey 不可以。好象在USER32。DLL上操作的都不可以?
    USER32。DLL不够级别。
    我在APPLEVB上见到一个SOFTKEY的控件。
    但是已经不能下载了~
    谁还有这方面的资料吗?谢谢大家了。
      

  15.   

    同志们可以体验一下楼主的心情。
    VisualBoyAdvance就是这样的。用Sendkeys不灵的。
      

  16.   

    >模拟组合键PRESS 
    '*[email protected]
    Public Function CombineKeyPress(ParamArray avntVK())
    'Purpose :模拟组合键按键PRESS
    'Useage: CombineKeyPress mclsVK.VK_CONTROL, mclsVK.VK_A     'Ctrl+A
     On Error GoTo PROC_ERR
     Dim vk
     '***************
     '*KEYDOWN
     Dim bytVK As Byte
     For Each vk In avntVK
        bytVK = vk
        '*关键外部调用:Keybd_event
        keybd_event bytVK, 0, 0, 0
     Next
     '***************
     '*KeyUp
     For Each vk In avntVK
        bytVK = vk
        '*关键外部调用:Keybd_event
        keybd_event bytVK, 0, KEYEVENTF_KEYUP, 0
     NextPROC_EXIT:
    Exit FunctionPROC_ERR:
    CombineKeyPress = Err.Number
    Debug.Print "CombineKeyPress.Err(" & Err.Number & "):" & Err.Description
    End Function'***********************************************************'***********************************************************
    '*希望能够对你有所帮助!
    '***********************************************************
    "为振兴民族软件产业而奋斗!"
    这是谁啊!公众场所禁止喧哗!'********************************************
    '对不起,是我哪!放一点广告,对您带来的不便敬请原谅!
    广告:我的第一个Visual Basic 6.0作品,欢迎大家试用,注册用户得到全部源代码。         EasyDialog能够做什么?
    (为了增强Windows通用打开/保存对话框,能够快速的打开经常访问的文件夹或者文件)
    一、快速地在通用打开/保存对话框中打开你经常访问的文件夹/文件。
    二、快速地在Windows Explorer中打开经常访问的文件夹/文件。
    三、快速地在IE浏览器打开你经常访问的网站。
    四、快速地给你的朋友发Email
    五、能够使您方便地按照逻辑分类来组织和管理您的文件夹/文件,您经常访问的网址,您的Email地址。'********************************************
    '*下载EasyDialog:
    http://www.softboyzhou.com/download/EasyDialog.asp
    '***************
    '*购买EasyDialog:
    http://www.softreg.com.cn/shareware_view.asp?id=/7148D197-1C1D-4E84-B92A-EE2CC07D27C0/
    '***************
    '*给我写信:有什么问题请来信。
    [email protected]