Я пытаюсь написать сценарий, который может выполнять несколько основных событий клавиатуры и мыши, а затем «открыть» текущее окно Chrome и продолжить с него.
Единственная проблема заключается в том, что я не могунайдите способ вывести окно Chrome на передний план.Код работает с простыми вещами, такими как Блокнот, но он просто не может найти Chrome, независимо от того, сколько вариантов имени я пытался вставить.
Я просматривал Интернет и не смогнайти решение этой проблемы.
Мой текущий код:
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Tricks {
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
}
"@
sleep -sec 2
$h = (Get-Process Chrome).MainWindowHandle
[void] [Tricks]::SetForegroundWindow($h)
Если я использую Get-Process Chrome
, эта ошибка выдается:
Cannot convert argument "hWnd", with value: "System.Object[]", for
"SetForegroundWindow" to type "System.IntPtr": "Cannot convert the
"System.Object[]" value of type "System.Object[]" to type "System.IntPtr"."
At line:12 char:1
+ [void] [Tricks]::SetForegroundWindow($h)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
Если я использую любойеще, эта ошибка выдается:
Get-Process : Cannot find a process with the name "Google Chrome". Verify the
process name and call the cmdlet again.
At line:11 char:7
+ $h = (Get-Process "Google Chrome").MainWindowHandle
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Google Chrome:String) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
вместе с предыдущей ошибкой.
Однако, если я использую что-то вроде «Блокнота», ошибка не выдается, и программа работает, как ожидалось.
РЕДАКТИРОВАТЬ:
Мне даже удалось найти сокращенную версию сценария:
(New-Object -ComObject WScript.Shell).AppActivate((get-process Notepad).MainWindowTitle)
Однако, как и раньше, этоработает с чем-то вроде Блокнота, но в тот момент, когда я пытаюсь использовать Chrome, я получаю следующее:
Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
At line:1 char:1
+ (New-Object -ComObject WScript.Shell).AppActivate((get-process Chrome ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
То же самое относится и к Firefox.