PDA

Показать полную графическую версию : Программно нажать или хотя бы найти кнопку через Powershell


morgan-12l1
03-07-2018, 21:00
Добрый день.

Есть программа, находить её по данному участку кода (1 часть) находит. А вот со второй не разобрался. Так понимаю это уже используется участок кода C#. Пробовал различные методы, но думаю все равно потребуется использовать user32.dll. Но как отправить значение кнопки? и как именно посмотреть что отправить? Помогите пожалуйста. скрипт взят у уважаемого greg zakharov, но связи с ним нету:-(

На просторах форума нашел данный код:

#пример того, как можно переключиться на окно запущенного ранее Блокнота...
Add-Type -AssemblyName ($a = 'System.Windows.Forms')

$FindWindow = ($unm = ($asm = [AppDomain]::CurrentDomain.GetAssemblies() | ? {
$_.ManifestModule.ScopeName.Equals("$a.dll")
}).GetType("$a.UnsafeNativeMethods")).GetMethod('FindWindow')
$SetForegroundWindow = $unm.GetMethod('SetForegroundWindow')
$ShowWindow = $asm.GetType("$a.SafeNativeMethods").GetMethod('ShowWindow')

if (($ptr = $FindWindow.Invoke($null, @('Notepad', $null))) -eq [IntPtr]::Zero) {
"Невозможно найти окно Блокнота.`n"
break
}

[Runtime.InteropServices.HandleRef]$href = New-Object Runtime.InteropServices.HandleRef(
(New-Object IntPtr), $ptr
)

[void]$SetForegroundWindow.Invoke($null, @($href))
[void]$ShowWindow.Invoke($null, @($href, 5))

#...и того, как изменить его размер и положение
$asm = Add-Type -MemberDefinition @'
[DllImport("user32.dll")]
public static extern Boolean MoveWindow(
IntPtr hWnd,
Int32 x,
Int32 y,
Int32 nWidth,
Int32 nHeight,
Boolean bRepaint
);
'@ -Name Win -NameSpace Win32API -PassThru
[void]$asm::MoveWindow($ptr, 1230, 750, 200, 100, $true)

Пробовал участок делать так:


$asm = Add-Type -MemberDefinition @'
[DllImport("user32.dll")]
public static extern bool PostMessage(
IntPtr hWnd,
uint message,
IntPtr wParam,
IntPtr lParam
);
'@ -Name Win -NameSpace Win32API -PassThru
[void]$asm::PostMessage($ptr, 000A0EB2,$true)

Busla
04-07-2018, 10:44
Но как отправить значение кнопки? и как именно посмотреть что отправить? »
Это зависит от того, на чём написана программа. Вернее: какая технология использована для GUI.

morgan-12l1
04-07-2018, 11:57
на чём написана программа »
В данном случаи, я пробую нажимать кнопку на программе, например активатор от K M S AutoNet;

Но в целом, мне бы понять суть. Как минимум, окно находится через Assembly выше, думаю можно и кнопку нажать. Только не могу понять во-первых какой параметр отправлять через postmessage и как его посмотреть. И так же отправить. Пробую, пока что не получается.




© OSzone.net 2001-2012