Отправить ключ Windows в пакетном сценарии

Недавно я использовал функцию SendKeys с помощью пакетного сценария.

Я понял, как вводить определенные клавиши в окно, например клавишу табуляции:

%SendKeys% "{TAB}"

Или клавиша возврата:

%SendKeys% "{BACKSPACE}"

Но я пытался ввести ключ Windows, не нажимая его.

К сожалению, я не знаю, как называется его партия. Я пробовал:

WIN
WINDOWS
WINKEY
START
LWIN

Но ни один не сработал.

Я везде искал это, и помощь будет принята с благодарностью.


person Zinger    schedule 16.08.2018    source источник
comment
Вы не сказали нам, откуда вы взяли решение SendKeys, но если оно было из этого ответа, то в том же сообщении есть эта ссылка на все имена ключей SendKeys. И нет, для ключа Windows нет названия...   -  person Aacini    schedule 16.08.2018
comment
как вы используете метод sendkeys в сценарии оболочки? мне нужно создать экземпляр?   -  person crappidy    schedule 12.10.2020


Ответы (4)


В настоящее время нет возможности имитировать логотип Windows Home в sendkey's, однако это не означает, что это невозможно.

Если вы посмотрите на горячие клавиши Windows вы обнаружите, что можете имитировать Открыть Пуск с помощью следующих комбинаций клавиш: Ctrl + Esc.

Чтобы имитировать это в пакетном режиме, вы можете использовать: powershell -c "$wshell = New-Object -ComObject wscript.shell; $wshell.SendKeys('^{ESCAPE}') или в вашем случае: %SendKeys% "^{ESCAPE}".

Как указано в sendkeys:

  • "^" — имитирует нажатие клавиши Ctrl.
  • "{ESCAPE}" — имитирует нажатие клавиши Esc.
person John Kens    schedule 16.08.2018
comment
Спасибо! Я не знал, что это короткий путь. Кроме того, спасибо за форматирование моего вопроса. - person Zinger; 16.08.2018
comment
@ZekeYoung Я здесь, чтобы помочь в любое время! :-) - person John Kens; 16.08.2018

Вы можете написать программу, имитирующую нажатие клавиши winkey.

WinKey+R.VB

Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Public Module SendWinKey

    Const KEYEVENTF_KEYDOWN As Integer = &H0
    Const KEYEVENTF_KEYUP As Integer = &H2

    Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As UInteger, ByVal dwExtraInfo As UInteger)

       Public Sub Main()    
           keybd_event(CByte(Keys.LWin), 0, KEYEVENTF_KEYDOWN, 0) 'press the left Win key down
           keybd_event(CByte(Keys.R), 0, KEYEVENTF_KEYDOWN, 0) 'press the R key down
           keybd_event(CByte(Keys.R), 0, KEYEVENTF_KEYUP, 0) 'release the R key
           keybd_event(CByte(Keys.LWin), 0, KEYEVENTF_KEYUP, 0) 'release the left Win key
       End Sub
End Module

Разместите на рабочем столе.

Откройте командную строку и введите

C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%userprofile%\desktop\Win+R.vb" /out:"%userprofile%\Desktop\Win+R.exe" /target:winexe

На рабочем столе появится файл Win+R.exe. Переместите его в любое место на пути.

person CatCat    schedule 16.08.2018

Без создания временных файлов. «Петля» была показана только для того, чтобы можно было открыть блокнот для вывода. Удалите его после.

    @echo off
        :loop
            ::------------begin main code------------
            set command=new ActiveXObject('WScript.Shell').SendKeys('WoW{ENTER}{ENTER}');
            for /f "delims=" %%i in ('mshta "javascript:%command%close(new ActiveXObject('Scripting.FileSystemObject'));"') do set
            ::-------------end main code-------------
            timeout /t 1 /nobreak >nul
        goto :loop
person Garric    schedule 27.05.2020

РЕШЕНО - сначала создайте файл .vbs с кодом

Set WshShell = WScript.CreateObject("WScript.Shell")`   
WshShell.AppActivate "notepad"
WshShell.SendKeys "^{pgdn}"

и после этого вы должны вызвать этот файл из файла .bat

person Raúl Martínez    schedule 18.12.2020