Board logo

标题: [问题求助] 怎样用VBS模拟:按"Ctrl +Num 1”?谢谢 [打印本页]

作者: yyz219    时间: 2023-8-25 11:43     标题: 怎样用VBS模拟:按"Ctrl +Num 1”?谢谢

怎样用VBS模拟:按"Ctrl +Num 1”?谢谢
作者: czjt1234    时间: 2023-8-25 22:14

Num 1 的虚拟键码是97
WshShell.SendKeys 方法会把小于127的编码视为ASCII码
所以vbs无法发送

去powershell板块问下,用API直接发送虚拟键码应该可以
作者: Five66    时间: 2023-8-25 22:43

不知这样行不行
wsh.sendkeys "^1"
作者: Nsqs    时间: 2023-8-26 05:03

本帖最后由 Nsqs 于 2023-8-26 05:06 编辑
  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
复制代码
保存为PowerShell代码

然后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 97,17 'Ctrl=17
复制代码
与PowerShell脚本保存在同一文件夹内进行测试




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2