2014-01-27 147 views
0

我有一個程序,它的屏幕的鏡頭在帕斯卡:帕斯卡漢譯

uses Graphics, 
    LCLIntf, 
    LCLType; 

var 
    Screen: TBitmap; 
    ScreenDC: HDC; 
begin 
    Screen := TBitmap.Create; 
    ScreenDC := GetDC(0); 
    Screen.LoadFromDevice(ScreenDC); 
    ReleaseDC(0, ScreenDC); 
    Screen.SaveToFile("Screen.bmp"); 
end. 

我的問題停留在LoadFromDevice()SaveToFile()功能。可以使用哪些函數(如果有的話)用C編程語言來實現這些函數。試圖儘可能遠離第三方庫。 (WinAPI的)

+3

WinAPI的** **是一個第三方庫。無論如何,谷歌搜索「winapi截圖」應該給你很多的參考。 [第一個](http://wiki.freepascal.org/LCL_Internals)來自freepascal維基。 –

+1

http://stackoverflow.com/questions/997175/how-can-i-take-a-screenshot-and-save-it-as-jpeg-on-windows –

+2

沒什麼。在C中沒有「屏幕」這樣的東西。您將需要一些特定於平臺的功能。在你的情況下,winapi聽起來很不錯。 –

回答

1

看看這個

HDC hDC = GetDC(g_hWnd); 
LPRECT rect = (LPRECT)malloc(sizeof(RECT)); 
GetWindowRect(g_hWnd,rect); 
int h = rect->right - rect->left; 
int w = rect->bottom - rect->top; 
LPRECT rect = (LPRECT)malloc(sizeof(RECT)); 

GetWindowRect(g_hWnd,rect); 
HBITMAP hBmp = CreateCompatibleBitmap(hDC,w,h); 
PBITMAPINFO pbmi; 
pbmi = CreateBitmapInfoStruct(g_hWnd,hBmp); 

CreateBMPFile(g_hWnd, TEXT("c:\\TEMPO\\TestG2.bmp"), pbmi, hBmp, hDC) ; 
ReleaseDC(g_hWnd,hDC); 
DeleteObject(hBmp); 
DeleteObject(pbmi); 

if (rect != nullptr) 
    free(rect); 
+4

你爲什麼選擇'RECT'?爲什麼不使用堆棧分配? – Dirk