Untitled
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