2010-03-15 170 views
4

我想製作一個程序在現有的GUI上工作以對其進行註釋並提供額外的計算和統計信息。我想用圖像識別來做這件事,因爲我已經在使用Matlab和類似的東西在大學裏學到了相當多的東西。我可以得到一個窗口的句柄,我想要執行圖像識別,但我不知道如何將該句柄轉換爲該窗口的圖像及其所有可見的子窗口。我想我正在尋找類似截圖功能的東西,但只限於一個窗口。獲取窗口屏幕截圖窗口API

我該怎麼做呢?我想我會需要像.bmp這樣的東西來搞砸。此外,它必須足夠高效,以至於我可以每秒多次調用它,而不會讓我的電腦停止工作。

希望這不是一個明顯的問題,我在google中輸入了一些東西,但沒有得到任何相關的信息。

回答

4

一個簡單的方法是使用PrintWindow API(基本上是一個自動的Alt + Print)。以下示例使用計算器的屏幕截圖,但您只需更換手柄即可。

void CScreenShotDlg::OnPaint() 
{ 
    // device context for painting 
    CPaintDC dc(this); 

    // Get the window handle of calculator application. 
    HWND hWnd = ::FindWindow(0, _T("Calculator")); 

    // Take screenshot. 
    PrintWindow(hWnd, 
       dc.GetSafeHdc(), 
       0); 
} 

(見http://weseetips.com/2008/07/14/how-to-capture-the-screenshot-of-window/

+0

我無法找到關於MSDN – jondinham 2011-09-03 11:02:04

+0

上PrintWindow函數的描述,請描述如何保存爲位圖對象以供重用 – jondinham 2011-09-03 11:06:41

5

我覺得CImage班會有幫助。

void CreateImage(HWND hwnd) 
{ 

CImage img; 
img.m_hDC = ::GetWindowDC(hwnd); 
img.Save(strFileName); 

} 
+0

這看起來很方便,謝謝。我會嘗試一下。 – Oliver 2010-03-15 14:49:58