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