从Powershell脚本中打开IE最大化?

时间:2009-08-27 00:44:11

标签: powershell

请原谅我,如果这个问题太简单了,但到目前为止我没有在帮助文件或网上找到任何关于这样做的事情。我正在打开一个新的浏览器窗口来测试基于Web的应用程序的登录/注销功能,但我想以最大化模式打开IE窗口。我可以将大小设置为:

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

但是,是否有一个关键字或任何我可以用来自动打开它的最大化或者我是否需要首先查询屏幕尺寸然后填写该查询的值?

/亚光

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

通过以下方式解决了启动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 :(得分:2)

我无法得到任何具体的工作答案,但确实得到了一个组合工作。调用它们的顺序很重要,否则它不起作用。

完整示例:

$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()

答案 3 :(得分:1)

如果您在PowerShell 2.0上安装了PowerShell Community Extensions 1.2(PSCX),我已经确认这有效:

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)

它有点冒险,因为它使用3秒的等待(启动 - 睡眠)等待IE打开然后它使用PSCX cmdlet来获取前景窗口的窗口句柄。如果您只有一个IExplore实例正在运行,那么您可以使用它来获取该句柄:

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

支持Add-Type的支持需要PowerShell 2.0,以便我们调用Win32 API。

从快速的Bing搜索来看,似乎让IE开始最大化是一个非常常见的问题。例如,使用Start-Process,您可以指定-WindowStyle Maximized,但IE不支持。

答案 4 :(得分:0)

#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

#Convert string handle array to integer array
$hwndINT=$hwnd | % {[int]$_}

#Get maximum (=last/latest) handle of the integer array, and re-cast it to [System.IntPtr]
[System.IntPtr]$hwndPtr=[int]$($hwndINT | measure -Maximum).Maximum

#Magic:
$type::ShowWindowAsync($hwndPtr, $Maximized)

答案 5 :(得分:0)

以防万一其他人需要帮助,我最终只是打电话给iexplore maximize然后连接到它。您需要睡觉,因为它通话太快而无法连接。我敢肯定有更好的方法,但我想不通。

start iexplore -WindowStyle maximized
Start-Sleep -seconds 1
$ie = (New-Object -COM "Shell.Application").Windows() | ? { $_.Name -eq "Internet Explorer" }
$ie.navigate("URL")