Untitled
unknown
plain_text
8 months ago
6.6 kB
13
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