Untitled

 avatar
unknown
plain_text
24 days ago
6.6 kB
6
Indexable
# Skrypt uruchamiający klawiaturę ekranową i symulujący naciśnięcie Shift

# Uruchom klawiaturę ekranową, jeśli nie jest jeszcze uruchomiona
$oskProcess = Get-Process osk -ErrorAction SilentlyContinue
if (-not $oskProcess) {
    Start-Process "osk.exe"
    # Daj czas na uruchomienie klawiatury ekranowej
    Start-Sleep -Seconds 3
}

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName UIAutomationClient

# Funkcja do wyświetlania właściwości elementu
function Show-ElementProperties {
    param([System.Windows.Automation.AutomationElement]$element)
    Write-Host "Element Name: " $element.Current.Name
    Write-Host "Element AutomationId: " $element.Current.AutomationId
    Write-Host "Element ClassName: " $element.Current.ClassName
    Write-Host "Element ControlType: " $element.Current.ControlType.ProgrammaticName
}

$count = 1
while ($true) {
    try {
        # Znajdź klawiaturę ekranową
        $oskWindow = [System.Diagnostics.Process]::GetProcessesByName("osk") | Select-Object -First 1
       
        if ($oskWindow) {
            # Znajdź wszystkie elementy automatyzacji UI
            $automation = [System.Windows.Automation.AutomationElement]::RootElement
           
            # Znajdź okno klawiatury ekranowej
            $oskWindowElement = $null
            $condition = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ProcessIdProperty, $oskWindow.Id)
            $oskWindowElement = $automation.FindFirst([System.Windows.Automation.TreeScope]::Children, $condition)
           
            if ($oskWindowElement) {
                Write-Host "Znaleziono okno klawiatury ekranowej"
               
                # Będziemy bezpośrednio szukać przycisku w lewym dolnym rogu
                $shiftButton = $null
                
                # Znajdź przycisk w lewym dolnym rogu klawiatury ekranowej
                Write-Host "Szukam przycisku w lewym dolnym rogu klawiatury..."
                    Write-Host "Próba znalezienia Shift przez skanowanie wszystkich przycisków..."
                    $buttonCondition = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Button)
                    $allButtons = $oskWindowElement.FindAll([System.Windows.Automation.TreeScope]::Descendants, $buttonCondition)
                    
                    # Szukaj przycisku w lewym dolnym rogu (gdzie zwykle jest lewy Shift)
                    $lowestLeftButton = $null
                    $maxY = 0
                    $minX = [System.Double]::MaxValue
                    
                    foreach ($button in $allButtons) {
                        try {
                            # Pobierz prostokąt przycisku
                            $rect = $button.Current.BoundingRectangle
                            
                            # Szukaj przycisków na dole (duża współrzędna Y)
                            if ($rect.Bottom -gt $maxY) {
                                $maxY = $rect.Bottom
                                $lowestLeftButton = $button
                                $minX = $rect.Left
                            }
                            # Jeśli przycisk jest na tej samej wysokości co najniższy, ale bardziej z lewej
                            elseif ($rect.Bottom -eq $maxY -and $rect.Left -lt $minX) {
                                $minX = $rect.Left
                                $lowestLeftButton = $button
                            }
                            
                            Write-Host ("Przycisk: {0}, Pozycja: Góra={1}, Lewo={2}, Dół={3}, Prawo={4}" -f $button.Current.Name, $rect.Top, $rect.Left, $rect.Bottom, $rect.Right)
                        }
                        catch {
                            Write-Host "Błąd podczas sprawdzania przycisku: $_"
                        }
                    }
                    
                    if ($lowestLeftButton) {
                        Write-Host "Wybrany przycisk w lewym dolnym rogu jako potencjalny Shift"
                        Show-ElementProperties -element $lowestLeftButton
                        $shiftButton = $lowestLeftButton
                    }
                }
                
                # Jeśli nie znaleziono przycisku w lewym dolnym rogu
                if (-not $shiftButton) {
                    Write-Host "Nie znaleziono przycisku w lewym dolnym rogu. Wyświetlam wszystkie kontrolki do debugowania:"
                    $allControls = $oskWindowElement.FindAll([System.Windows.Automation.TreeScope]::Descendants, [System.Windows.Automation.Condition]::TrueCondition)
                    
                    foreach ($control in $allControls) {
                        if ($control.Current.Name -or $control.Current.AutomationId) {
                            Write-Host "---------------------"
                            Show-ElementProperties -element $control
                        }
                    }
                }
               
                if ($shiftButton) {
                    # Pobierz wzorzec wywoływania
                    $invokePattern = $shiftButton.GetCurrentPattern([System.Windows.Automation.InvokePattern]::Pattern)
                    $invokePattern.Invoke()
                    Write-Host "Kliknięcie przycisku w lewym dolnym rogu nr $count wykonane o $(Get-Date -Format 'HH:mm:ss')"
                   
                    # Kliknij ponownie aby "zwolnić" po krótkiej chwili
                    Start-Sleep -Milliseconds 500
                    $invokePattern.Invoke()
                } else {
                    Write-Host "Nie znaleziono przycisku w lewym dolnym rogu klawiatury ekranowej"
                }
            } else {
                Write-Host "Nie znaleziono okna klawiatury ekranowej"
            }
        } else {
            Write-Host "Klawiatura ekranowa nie jest uruchomiona, próbuję uruchomić..."
            Start-Process "osk.exe"
            Start-Sleep -Seconds 3
        }
    } catch {
        Write-Host "Wystąpił błąd: $_"
        # Spróbuj ponownie uruchomić klawiaturę ekranową
        Stop-Process -Name "osk" -ErrorAction SilentlyContinue
        Start-Sleep -Seconds 1
        Start-Process "osk.exe"
        Start-Sleep -Seconds 3
    }
   
    $count++
    # Czekaj 10 minut
    Write-Host "Oczekiwanie 10 minut do następnej akcji..."
    Start-Sleep -Seconds 600
}
Editor is loading...
Leave a Comment