Раскрываете ли вы IE из скрипта Powershell? - PullRequest
2 голосов
/ 27 августа 2009

Прошу прощения, если это слишком простой вопрос, но я пока не нахожу ничего в файлах справки или в Интернете относительно этого. Я открываю новое окно браузера, чтобы проверить функцию входа / выхода из веб-приложения, но я хочу открыть окно IE в развернутом режиме. Я мог бы установить размер как:

$ ie.height = 1024 $ ie.width - 768

Но есть ли ключевое слово или что-нибудь, что я могу использовать, чтобы просто открыть его в развернутом виде автоматически или мне нужно будет сначала запросить размер экрана, а затем заполнить значения из этого запроса?

/ матовый

Ответы [ 5 ]

4 голосов
/ 27 августа 2009

(new-object -com wscript.shell) .run ("url", 3)

3 голосов
/ 28 мая 2013

Решена проблема максимизации запуска IE следующим образом:

Function maxIE
{
param($ie)
$asm = [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

    $screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
    $ie.Width = $screen.width
    $ie.Height =$screen.height
    $ie.Top =  0
    $ie.Left = 0
}


cls
$ie = new-object -com "InternetExplorer.Application"
$ie.visible = $true
maxIE $ie
while ($ie.busy) {sleep -milliseconds 50}
$ie.navigate("http://www.google.com")
2 голосов
/ 31 марта 2016

Я не мог получить какой-то конкретный ответ на работу, но получил комбинацию на работу. Порядок, в котором они вызываются, важен, иначе он не работает.

Полный пример:

$ie = New-Object -Com "InternetExplorer.Application"
$urls = @("http://www.google.com","http://www.yahoo.com")
$ie.Visible = $true
CLS
write-output "Loading pages now..."
#Maximize IE window
$asm = [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
$ie.height = $screen.height
#Open webpages
foreach ($link in $urls) {
   $ie.Navigate2($link, 0x1000) 
}
#close first blank tab
$sa = New-Object -ComObject Shell.Application
$tab = $sa.windows() | Where {$_.Name -match 'Internet Explorer' -and     $_.LocationName -eq ''}
$tab.quit()
1 голос
/ 27 августа 2009

Если у вас есть PowerShell Community Extensions 1.2 (PSCX), установленный в PowerShell 2.0, я убедился, что это работает:

Pscx\Start-Process IExplore.exe; Start-Sleep 3; $hwnd = Get-ForegroundWindow
$sig = @'
[DllImport("user32.dll")] 
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
'@
Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32
[Win32.NativeMethods]::ShowWindowAsync($hwnd, 3)

Это немного рискованно, потому что он использует ожидание (start-sleep) 3 секунды, чтобы дождаться открытия IE, а затем использует командлет PSCX, чтобы получить дескриптор окна переднего окна. Если у вас работает только один экземпляр IExplore, вы можете использовать его для получения этого дескриптора:

@(Get-Process IExplore)[0].MainWindowHandle

PowerShell 2.0 требуется для поддержки Add-Type, которая позволяет нам вызывать Win32 API.

Кстати, из быстрого поиска в Bing кажется, что запуск IE в максимизированном режиме - довольно распространенная проблема. Например, в Start-Process вы можете указать -WindowStyle Maximized, но IE это не соблюдает.

0 голосов
/ 11 июня 2019
#We will use the Win32 API function ShowWindowAsync, and spawn an IE Window Maximized.
#Parameters can be used for ShowWindowAsync
$Hide = 0
$Normal = 1
$Minimized = 2
$Maximized = 3
$ShowNoActivateRecentPosition = 4
$Show = 5
$MinimizeActivateNext = 6
$MinimizeNoActivate = 7
$ShowNoActivate = 8
$Restore = 9
$ShowDefault = 10
$ForceMinimize = 11


#Specify an interwebs address :)
$URL="http://www.google.com/"
#Create internetexplorer.application object
$IE=new-object -com internetexplorer.application
#Set some parameters for the internetexplorer.application object
$IE.TheaterMode = $False
$IE.AddressBar = $True
$IE.StatusBar = $False
$IE.MenuBar = $True
$IE.FullScreen = $False
$IE.visible = $True
#Navigate to the URL
$IE.navigate2($URL)

#the C#-style signature of an API function
$code = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);'

#add signature as new type to PowerShell (for this session)
$type = Add-Type -MemberDefinition $code -Name myAPI -PassThru

#get the window handle
$hwnd =(Get-Process -Name "iexplore").MainWindowHandle
$hwnd

#Magic  -- in my tests, $hwnd returned an array with 2 handle IDs, but only 1 integer can be used as the IntPtr parameter for ShowWindowAsync, so I am taking the bigger/later one.
if($hwnd[0].ToInt32() -gt $hwnd[1].ToInt32()){
    $type::ShowWindowAsync($hwnd[0], $Maximized)
}else{
    $type::ShowWindowAsync($hwnd[1], $Maximized)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...