Functions Sendkeys

#Functions_SendKeys
Add-Type -AssemblyName Microsoft.VisualBasic
Add-Type -AssemblyName System.Windows.Forms

function CntPs($PsIn){
    if($PsIn -eq $null){ return 0 }
    try{ $huga = $PsIn[0] }
    catch{ return 1 }
    return @($PsIn).Length
}

function IsInPs($Title){
    $Ps = Get-Process | select MainWindowTitle | `
        where{$_.MainWindowTitle -like "*$Title*"}
    if(CntPs $Ps -gt 0){return $true}else{return $false}
}

# "*"無しで指定
function OpenAndActivate{
    param(
        [string]$FullOpen,
        [string]$AddPara,  # 飛ばしてもいい
        [string]$TitleKey
        )

    if([bool]$TitleKey -eq $false){
        $TitleKeyEffect = $AddPara
    }else{
        $TitleKeyEffect = $TitleKey
    }

    $PsMoto = Get-Process | select Id,MainWindowTitle | `
        where{$_.MainWindowTitle -like "*$TitleKeyEffect*"}
    if([bool]$AddPara -and [bool]$TitleKey){
        & $FullOpen $AddPara
    }else{
        & $FullOpen
        #Invoke-Item $FullOpen
    }

    $flagStart = $false
    for ($i=0; $i -lt 20; $i++){
        Start-Sleep -Milliseconds 200
        $PsShin = Get-Process | select Id,MainWindowTitle,CPU | `
            where{$_.MainWindowTitle -like "*$TitleKeyEffect*"}
        if( (CntPs $PsShin) -gt ( CntPs $PsMoto)){
            $PsShin = $PsShin | sort -Property CPU | select -First 1
            $IdShin = $PsShin.Id
            Write-Host "Process Started."
            $flagStart = $true
            break
        }else{
            Write-Host "Waite Starting…"
        }
    }
    if($flagStart -eq $false){
        Write-Warning "Fail Start. Exit."
        return $false
    }

    for ($i=0; $i -lt 20; $i++){
        Start-Sleep -Milliseconds 200
        $flagActive = $true
        try{
            [Microsoft.VisualBasic.Interaction]::AppActivate($IdShin)
        }
        catch{
            Write-Host "Waite Activating…"
            $flagActive = $false
        }

        if($flagActive -eq $true){
            Write-Host "Successful Activated."
            return $true
        }
    }
    Write-Warning "Fail Activate."
    return $false
}

# "*"無しで指定
function MyActivate($TitleKey){
    for ($i=0; $i -lt 20; $i++){
        Start-Sleep -Milliseconds 100
        $flagActive=$true
        try{
            [Microsoft.VisualBasic.Interaction]::AppActivate($TitleKey)
        }
        catch{
            Write-Host "Waite Activating…"
            $flagActive=$false
        }

        if($flagActive -eq $true){
            Write-Host "Successful Activated."
            return $true
        }
    }
    Write-Warning "Fail Activate."
    return $false
}

function SendKeys($TitleKey,$StrKeyStroke,$WaiteMilli){
    MyActivate($TitleKey)
    Start-Sleep -Milliseconds $WaiteMilli
    [Windows.Forms.SendKeys]::SendWait($StrKeyStroke)
    Start-Sleep -Milliseconds $WaiteMilli
}


#$fullOpen = 'C:\WINDOWS\system32\notepad.exe'
#$titleKey ='メモ帳'
#OpenAndActivate $fullOpen $titleKey
#SendKeys $titleKey "aab" 100


# KeyStroke
<#
"a", "A" "1", "!"
Space : " "
Enter : "~" "{ENTER}"
Tab : "{TAB}"
Ctrl : "^"
Shift : "+"
Alt : "%"
複数指定
    "aBc123"
    "^(ac)" :Ctrl+A,Ctrl+C
他
    "{BS}" "{DEL}" "{LEFT}" "{F4}"
ループ
    "{a 5}"
    "{TAB 5}"
#>