[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] vbs如何模拟键盘按下 右边数字键盘的5 求大神指导

查了很久 也没找到解决办法  求大神指点

回复 10# buyiyang


    这也不算是bat,都用的是powershell(C#),不明白为什么一定要vbs,我参考http://demon.tw/programming/vbs-control-mouse.html写了一个vbs(vba)
  1. Option Explicit
  2. Dim WshShell
  3. Dim oExcel, oBook, oModule
  4. Dim strRegKey, strCode, x, y
  5. Set oExcel = CreateObject("Excel.Application")
  6. set WshShell = CreateObject("wscript.Shell")
  7. strRegKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\$\Excel\Security\AccessVBOM"
  8. strRegKey = Replace(strRegKey, "$", oExcel.Version)
  9. WshShell.RegWrite strRegKey, 1, "REG_DWORD"
  10. Set oBook = oExcel.Workbooks.Add
  11. Set oModule = obook.VBProject.VBComponents.Add(1)
  12. strCode = _
  13. "Private Declare PtrSafe Sub keybd_event Lib ""user32"" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)" & vbCrLf & _
  14. "Private Sub KeyClick()" & vbCrLf & _
  15. "keybd_event &H65, 0, 0, 0" & vbCrLf & _
  16. "keybd_event &H65, 0, 2, 0" & vbCrLf & _
  17. "keybd_event 1, &H45, &H65, 0" & vbCrLf & _
  18. "keybd_event 1, &H45, 2, 0" & vbCrLf & _
  19. "End Sub"
  20. oModule.CodeModule.AddFromString strCode
  21. oExcel.Run "KeyClick"
  22. oExcel.DisplayAlerts = False
  23. oBook.Close
  24. oExcel.Quit
复制代码
15、16行按下、释放Numpad5键,17、18行按下、释放左键。

TOP

回复 11# wyhs4000


你不需要懂PowerShell也不需要懂VBS,只需要知道怎么执行它们就行了。试试这样:
9楼第1段代码保存为 C:\SendKeys.ps1
9楼第2段代码保存为 C:\Run.vbs
双击文件 C:\Windows\System32\cmd.exe
在打开的CMD窗口中输入命令:
cd /d "C:\"
回车
输入命令:
cscript //nologo Run.vbs
回车
观察CMD窗口里面是否自动出现了数字5

如果有报错,或者不是你希望的效果。请给几个截图说明一下你的具体需求。
如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# jyswjjgdwtdtj


    谢谢

TOP

回复 4# Nsqs


    谢谢 :hug: :hug:  别人这个是组合键    可惜我不会该

TOP

回复 6# Five66


    谢谢

TOP

回复 10# buyiyang


    您好 万分感谢 我想要的是vbs 模拟小键盘 或者左键点击  批处理不适用  谢谢啦

TOP

回复 9# Batcher


   加班才下班 首先感谢贵论坛管理员的热心回复,这段脚本是我复制别人的Ctrl +Num 1 您回复的脚本, 我复制了, 还是不能使用,  估计是我不会弄的原因,还是万分感谢了
  原贴http://bbs.bathome.net/thread-67140-1-1.html  我想着 别人能组合键使用小键盘  按说单个按下小键盘应该也能实现  不过我不懂ps1 只会一点vbs 皮毛

TOP

本帖最后由 buyiyang 于 2023-10-8 16:51 编辑

回复 7# wyhs4000
保存为bat脚本
  1. #@&cls&powershell "type '%~f0'|out-string|iex"&exit
  2. Add-Type @"
  3. using System;
  4. using System.Runtime.InteropServices;
  5. public class ClickKey
  6. {
  7.     [DllImport("user32.dll")]
  8.     private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
  9.     public static void Click(){keybd_event(0x01, 0x45, 0x65, 0);}
  10.     public static void KeyPress(byte key){keybd_event(key, 0x45, 0x65, 0);}
  11.     public static void KeyUp(byte key){keybd_event(key, 0x45, 0x02, 0);}
  12.     public static void MouseUp(){keybd_event(0x01, 0x45, 0x02, 0);}
  13. }
  14. "@
  15. #以下按照需要调整顺序或删除
  16. # 按下左键
  17. [ClickKey]::Click()
  18. # 按下数字键盘的5键
  19. $key = 0x65
  20. [ClickKey]::KeyPress($key)
  21. # 释放左键
  22. [ClickKey]::MouseUp()
  23. # 释放数字键盘的5键
  24. [ClickKey]::KeyUp($key)
复制代码

TOP

回复 5# wyhs4000


SendKeys.ps1
  1. param([byte]$Key,[byte]$Shift)
  2. Add-Type @"
  3. using System;
  4. using System.Runtime.InteropServices;
  5. public class Keyboard {
  6.     [DllImport("user32.dll")]
  7.     private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
  8.     Keyboard(){}
  9.     public static void Sendkeys(byte key, byte shift = 0){
  10.         if(shift == 0){
  11.             keybd_event(key, 0, 0, 0);
  12.             keybd_event(key, 0, 2, 0);
  13.         }else{
  14.             keybd_event(shift, 0, 0, 0);
  15.             keybd_event(key, 0, 0, 0);
  16.             keybd_event(key, 0, 2, 0);
  17.             keybd_event(shift, 0, 2, 0);
  18.         }
  19.     }
  20. }
  21. "@;
  22. [Keyboard]::Sendkeys($Key,$Shift) # Ctrl=17;97=Num1
复制代码
Run.vbs
  1. function KeyBoard(byval vkey,byval shift)
  2. set ws=createobject("Wscript.Shell")
  3. ws.run "powershell -noprofile -executionpolicy bypass -file "&chr(34)& "SendKeys.ps1"&chr(34)&chr(32)&vKey&chr(32)&Shift,0
  4. end function
  5. '使用方法<键值,组合键值>
  6. KeyBoard 101,0
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6# Five66


    wscript.shell我不会运用  纯小白

TOP

30r vx红包求助 模拟鼠标左键点击  和小键盘输入5       实现单个的话 15                                             
上班去了  晚上回来  能实现必红包。知识就是金钱,本人刚工作 实在是囊中羞涩  无力给予更多经济补偿 请谅解

TOP

最后吗调用那
KeyBoard 97,17
换成
KeyBoard 101,0

不过vbs不区分小键盘吧,直接wscript.shell的SendKeys "5"应该也可以吧(也许大概)

TOP

你看看同样的问题
Nsqs 发表于 2023-10-7 21:12



    非常感谢 你的热心回复

我不会修改参数     有哪位好心人帮我修改一下  vbs按下小键盘5


param([byte]$Key,[byte]$Shift)
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Keyboard {
    [DllImport("user32.dll")]
    private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
    Keyboard(){}
    public static void Sendkeys(byte key, byte shift = 0){
        if(shift == 0){
            keybd_event(key, 0, 0, 0);
            keybd_event(key, 0, 2, 0);
        }else{
            keybd_event(shift, 0, 0, 0);
            keybd_event(key, 0, 0, 0);
            keybd_event(key, 0, 2, 0);
            keybd_event(shift, 0, 2, 0);
        }
    }
}
"@;
[Keyboard]::Sendkeys($Key,$Shift) # Ctrl=17;97=Num1COPY
保存为PowerShell代码

然后vbs代码
function KeyBoard(byval vkey,byval shift)
set ws=createobject("Wscript.Shell")
ws.run "powershell -noprofile -executionpolicy bypass -file "&chr(34)& "SendKeys.ps1"&chr(34)&chr(32)&vKey&chr(32)&Shift,0
end function
'使用方法<键值,组合键值>
KeyBoard 97,17        'Ctrl=17COPY
与PowerShell脚本保存在同一文件夹内进行测试

TOP

TOP

返回列表