На ваш оригинальный вопрос, вот оно.
Захват неактивного окна в Windows довольно прост, с использованием класса робота, ТОЛЬКО и ТОЛЬКО, если окно видно в момент захвата. Если вы хотите избежать этого требования, вы ДОЛЖНЫ использовать DWM API.
Используя обычный Windows API (до Vista), вы можете использовать GetWindowRect (handle, RECT), где handle - это обработчик окна, которое вы хотите захватить. Это даст вам объект RECT (я полагаю, вы используете JNA), вот последовательность кода, которую вы должны написать:
RECT dimensionsOfWindow = new RECT();
GetWindowRect( handlerToWindow, dimensionsOfWindow );//now in the dimensionsOfWindow you have the dimensions
Robot robot = new Robot();
BufferedImage img = robot.createScreenCapture( dimensionsOfWindow.toRectangle() );//now in the img object you have only the image of your desired window
Однако !! Это будет работать ТОЛЬКО, если ваше окно в данный момент видно. Если оно свернуто, вы получите исключение в Java (потому что оно имеет отрицательные x и y). И если он частично скрыт, вы также сделаете снимок экрана с другими окнами, расположенными поверх него.
Вы не можете решить свою проблему на блоках, в которых нет dwm (Desktop Windows Manager), поскольку у него есть API, который позволяет различным окнам записывать данные во временный буфер до того, как они будут отображаться на экране.
На XP и не работающих DWM-машинах, однако, вы застряли с кодом, который я вам дал.
Кроме того, вы можете взглянуть на следующий вопрос:
текст ссылки
Edit:
Вот интересное руководство (хотя в C #, но вы можете использовать JNA + Java, применяя те же принципы), которое даст вам лучшее понимание DWM и того, как его использовать, чтобы ТОЧНО делать то, что вы хотите.
текст ссылки
EditEdit
Только что увидел, что у вас есть ссылка на то же руководство по C #, которое я вам дал. В чем проблема при переписывании кода для Java / JNA?
EditEditEdit
Чтобы ответить на ваш дополнительный вопрос (как преобразовать ваш BitBit в BufferedImage), вот парень, который сделал это в своем проекте Open Source. Это хорошая работа и дать ему некоторую оценку:
http://code.google.com/p/jmemoryeditorw/
Вы можете заметить, что если вы запустите программу, она выдаст вам все процессы, а также ... их значки. Если вы копаете код, вы увидите, как они конвертируются из BitBit в BufferedImages.
Ура, и я должен сказать, очень хороший вопрос.