擷取螢幕上的影像如何不取到自己的Form? |
答題得分者是:wameng
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
請教各位前輩 擷取螢幕上的影像如何不取到自己的Form? 我寫一個Form當按一Button後會擷取到目前螢幕但不含自己的Form
目前是用 self.Visible :=False; 的方式
但不行會擷取到自己
可能要等個2秒就可以,但是否有更好的方法可以不擷取到自己?? 謝謝各位前輩!!
有了你這世界變的更美好!!
程式如下: procedure TForm1.Button1Click(Sender: TObject); var d:HWND; dc:HDC; begin self.Visible :=False; self.Image1.Picture.Graphic:=nil; d:=GetDesktopWindow(); if (d<>0) then begin dc:=GetDC(d); BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,dc,0,0,SRCCOPY); ReleaseDC(d,dc); end; SELF.Show; end; |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
改成這樣試試!
procedure TfMain.Button1Click(Sender: TObject); var d:HWND; dc:HDC; begin ShowWindow(Handle,SW_HIDE); Sleep(50); Image1.Picture.Graphic:=nil; d:=GetDesktopWindow(); if (d<>0) then begin dc:=GetDC(d); BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,dc,0,0,SRCCOPY); ReleaseDC(d,dc); end; ShowWindow(Handle,SW_SHOW); end;SLEEP 用意再等待桌面自行刷新。 |
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
引言: 改成這樣試試!可以了真是感謝!! 再請教 1. Sleep(50); 是等待50毫秒嗎?? 2. 這様寫會不會因電腦過於忙碌,來不級刷新呢,就取到自己了?? 謝謝 wameng 前輩procedure TfMain.Button1Click(Sender: TObject); var d:HWND; dc:HDC; begin ShowWindow(Handle,SW_HIDE); Sleep(50); Image1.Picture.Graphic:=nil; d:=GetDesktopWindow(); if (d<>0) then begin dc:=GetDC(d); BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,dc,0,0,SRCCOPY); ReleaseDC(d,dc); end; ShowWindow(Handle,SW_SHOW); end;SLEEP 用意再等待桌面自行刷新。 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
1. 是的。單位為 MilliSeconds
2. 如果電腦過於忙碌,我想既使強迫刷新也是無效的。
如果要使桌面刷新,可以用下列方式。 Wnd := GetDesktopWindow;
Wnd := FindWindowEx(Wnd, 0, 'Progman', nil);
Wnd := FindWindowEx(Wnd, 0, 'SHELLDLL_DefView', nil);
Wnd := FindWindowEx(Wnd, 0, 'SysListView32', nil); SendMessage(Wnd,WM_PAINT,0,0);
或者
InvalidateRect(Wnd, nil, TRUE);
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |