Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Программно нажать или хотя бы найти кнопку через Powershell (http://forum.oszone.net/showthread.php?t=335581)

morgan-12l1 03-07-2018 21:00 2820494

Программно нажать или хотя бы найти кнопку через Powershell
 
Добрый день.

Есть программа, находить её по данному участку кода (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 2820541

Цитата:

Цитата morgan-12l1
Но как отправить значение кнопки? и как именно посмотреть что отправить? »

Это зависит от того, на чём написана программа. Вернее: какая технология использована для GUI.

morgan-12l1 04-07-2018 11:57 2820553

Цитата:

Цитата Busla
на чём написана программа »

В данном случаи, я пробую нажимать кнопку на программе, например активатор от K M S AutoNet;

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


Время: 13:22.

Время: 13:22.
© OSzone.net 2001-