2012-05-05 8 views
0

ユーザは、スクリーンショットをキャプチャしてユーザ定義の場所にイメージを保存できる小さなアプリケーションを作成しました。また、アクティブなウィンドウのスクリーンショットをキャプチャすることもできます。アクティブウィンドウのキャプチャスクリーンショット

問題はアクティブなウィンドウにあります。 Javaがアクティブなウィンドウのスクリーンショットを取得する方法を提供していないことを知りました。だから、私は探偵と私は、開発者がスクリーンショットを取得し、クリップボードから画像を取得するAlt + PrntScrnを使用していることがわかりました。

コードは、次のいずれかになります。Altキーをロボットクラスによって押されたとき

 robot.keyPress(KeyEvent.VK_ALT); 
    robot.keyPress(KeyEvent.VK_PRINTSCREEN); 
    robot.keyRelease(KeyEvent.VK_PRINTSCREEN); 
    robot.keyRelease(KeyEvent.VK_ALT); 
    Thread.sleep(1500); 
    RenderedImage image = (RenderedImage)getClipboard(); 
    saveToImage(image,targetLocation); 

今何が起こるかは、フォーカスは、ユーザーが取得したいそのアプリケーションのツールバーに行くされていることスクリーンショットとスクリーンショットはツールバーから取得され、ユーザーがフォーカスしているウィンドウのスクリーンショットではありません。

この問題を解決する方法についてアドバイスしてください。

+0

* "開発者はAlt + PrntScrnを使用してスクリーンショットを取得しています" * Windows上でのみ動作するAFAIU。 –

答えて

1

これが私のアプリケーションの場合は、アクティブなウィンドウとそのサイズを取得し、その情報を使用してロボットが画像を取得できるようにするために、JNA -- Java Native Accessを使用します。

+0

@Hovercraftの答えに基づいて、私は最初のものとして 'GetForegroundWindow()'を渡して、[this](http://stackoverflow.com/questions/4433994/java-window-image/4453456#4453456) 'GetWindowRect'のパラメータです。 –