Windows PowerShell Part4

このエントリーをはてなブックマークに追加
206名無し~3.EXE
とりあえずマウス位置のウィンドウをキャプチャするのを作ってみたんですが
大きく表示している Chrome とか デスクトップ とかしか拾ってくれません。
なんか 矩形の2番目にくる Top がいつも0になるんでポインタや構造体サイズ当たりが間違ってるのかなと思うんですけど
どこが間違っているんでしょうか。
32ビットウィンドウだけが見えると言うわけでもなさそうで。

$Win32APIs = Add-Type -Language CSharp -Namespace Win32APIs -Name Window -MemberDefinition @"

    public struct Rect{ public int left, top, right, bottom; }

    [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern IntPtr WindowFromPoint(int x, int y);

    [ DllImport( "user32.dll" ) ]
    public static extern int GetWindowRect( IntPtr hwnd, out Rect lpRect );
"@

function GetWindowRectFromPoint ($Point) {
  $handle = [Win32APIs.Window]::WindowFromPoint([int]$Point.X, [int]$Point.Y)
  $rect = New-Object Win32APIs.Window+Rect
  $ret = [Win32APIs.Window]::GetWindowRect($handle, [ref]$rect)
  if ($ret) {
    return $rect
  }
}

$Point  = [System.Windows.Forms.Cursor]::Position
$Rect   = GetWindowRectFromPoint($Point)
$Bitmap  = New-Object System.Drawing.Bitmap -ArgumentList $( $Rect.right - $Rect.left ), $( $Rect.bottom - $Rect.top )
$graphics = [Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen( $Rect.left, $Rect.top, 0, 0, $bitmap.Size)
[System.Windows.Forms.Clipboard]::SetDataObject($bitmap)
207名無し~3.EXE:2014/02/02(日) 08:29:29.15 ID:9TDhIV8j
ぐぐってたら COM呼び出しするソフト見つけたけど過去ログではテンプレだったんだな。
ActiveXPosh ってやつ。

これを使わずに呼び出すには .net かコマンド実行しかないのか。

PowerShell - PowerShell ならバック グラウンド ジョブがあるのか。
Start-Job, Get-Job, Receive-Job
208206:2014/02/03(月) 08:53:22.96 ID:+cUyijOr
どうも WindowFromPoint が 64bit ではまともに動かないらしい。
ネットにいっぱいありました。

32ビット版の Powershell ISE を起動して
32ビット版の Powershell ISE のポリシーを設定したら動くようになった。

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell_ise.exe
「管理者:Windows PowerShell ISE(x86)」
Set-ExecutionPolicy RemoteSigned

だけど取得できる対象ウィンドウがコントロールレベルだから予定と違うけど。


ttp://harikofu.blog.fc2.com/blog-entry-36.html
ttp://blog.ccm-lulu.com/2013/02/windows-7-64bit-jenkins-powershell.html
ttp://pieceofnostalgy.blogspot.jp/2011/11/net-framework.html
ttp://codename2010.blog11.fc2.com/blog-entry-125.html


SysWOW64のDLLを指定する方法があるけど動くかどうかは
ttp://cflat-inc.hatenablog.com/entry/20130723/1374535605