none
powershell api RRS feed

  • Вопрос

  • Может быть существует какие нибудь готовые библиотеки или приемы.
    Чтобы можно было из powershell использовать WinAPI удобно.
    Чтобы не городить подобные конструкции.
    Или хотя-бы может быть где нибудь есть наработанные эти конструкции

    $signature = @'

    [DllImport("user32.dll")]
    public static extern bool MoveWindow(
        IntPtr hWnd,
        int X,
        int Y,
        int nWidth,
        int nHeight,
        bool bRepaint);

    '@

    Add-Type -MemberDefinition $signature -Name Wutils -Namespace WindowsUtils
    20 марта 2016 г. 16:35

Ответы

  • Это  простой и удобный способ для вызова простых WinAPI функций. Для определения функций есть портал - http://www.pinvoke.net/ . Но сама тема довольно сложная и есть куча неясных моментов.

    Единственный моудль, который я знаю - PSReflect. Пример использования модуля - http://www.powershellmagazine.com/2014/09/25/easily-defining-enums-structs-and-win32-functions-in-memory/

    Import-Module PsReflect
    $Mod = New-InMemoryModule
    
    $FunctionDefinitions = @(
      (func user32 MoveWindow ([Bool]) @([IntPtr], [Int], [Int], [Int], [Int], [Bool]))
    )
     
    $Types = $FunctionDefinitions | Add-Win32Type -Module $Mod -Namespace 'Win32'
    $User32 = $Types['user32']
    

    И как пример вызова:

    PS >  calc
    PS >  gps calc | ft MainWindowHandle -a
    
    MainWindowHandle
    ----------------
             4067684
    
    PS >  $User32::MoveWindow(4067684,200,500,100,100,$true)
    True

    • Предложено в качестве ответа Vector BCOModerator 22 марта 2016 г. 22:32
    • Помечено в качестве ответа KazunEditor 24 марта 2016 г. 5:54
    20 марта 2016 г. 17:16
    Отвечающий