
В настоящее время я работаю над программным обеспечением для автоматизации бизнес-процессов, и буквально действия пользователя имитируются роботами. Мне нужно передать некоторую информацию в меню «Пуск» моего Windows 7, и мне интересно, можно ли открыть меню «Пуск» Windows с помощью скрипта PowerShell? Поскольку информация для открытия PowerShell может быть понята роботами. Пожалуйста, любые предложения были бы хороши.
решение1
Да, это возможно с помощьюмаленький ВБ.
Скопируйте этот код в Блокнот и сохраните как startmenu.vbs
. [Убедитесь, что онне делаетсохранить как startmenu.vbs.txt]
set wShell=wscript.createobject("wscript.shell")
wShell.sendkeys "^{ESC}"
Set WshShell = Nothing
Затем вы можете просто запустить его с помощью cscript C:\somefilepath\startmenu.vbs
.
(Разумеется, вам придется указать путь, куда вы его сохраните)
Или, в переводе наPowershellрешение:
$wShell = New-Object -ComObject "wscript.shell"
$wShell.SendKeys("^{ESC}")
Что можно сократить до:
(New-Object -ComObject "wscript.shell").SendKeys("^{ESC}")
решение2
Это немного более подробное решение, которое не эмулирует нажатия клавиш (для случаев, когда CTRL+ESC привязано к другой программе/команде и т. д.).
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class Win32API
{
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, String lpWindowName);
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
public static void OpenStartMenu ()
{
const int SC_TASKLIST = 0xf130;
const int WM_SYSCOMMAND = 0x112;
IntPtr hWnd = FindWindow("Shell_TrayWnd", "");
SendMessage(hWnd, WM_SYSCOMMAND, SC_TASKLIST, 0);
}
}
"@
[Win32API]::OpenStartMenu()