使用Thread寫截圖程式,卻出現錯誤訊息或空白截圖 |
缺席
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
各位大大您好!
小弟有個問題想請問! 小弟目前有個截圖程式是用Thread寫的,但不知是哪裡出了問題,debug很久還是不知如何解決,想請大大們指導一下! 小弟測試的結果有兩種,一種是錯誤訊息,另一種是截出來的圖都是空白的,好像取不到螢幕畫面一樣! 程式碼、錯誤訊息與空白畫面都附加在檔案裡! 編輯記錄
cashyy 重新編輯於 2007-06-22 00:11:26, 註解 無‧
|
shunchia63
高階會員 發表:26 回覆:141 積分:198 註冊:2007-05-22 發送簡訊給我 |
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
可以請shunchia63大大再講清楚一點嗎??不太瞭解您的意思!謝謝您回覆此問題!
|
shunchia63
高階會員 發表:26 回覆:141 積分:198 註冊:2007-05-22 發送簡訊給我 |
<textarea class="delphi" rows="10" cols="60" name="code"> uses Clipbrd;
... procedure TForm1.Button1Click(Sender: TObject);
var img:TImage;
ImageID:integer;
b:TBitMap;
begin keybd_event(VK_SNAPSHOT , 0, 0, 0); //keydown
keybd_event(VK_SNAPSHOT , 0, KEYEVENTF_KEYUP, 0); //keyup while true do
begin
if (ClipBoard.HasFormat(CF_BITMAP) or ClipBoard.HasFormat(CF_PICTURE) ) then
break;
application.ProcessMessages();
end; b:=TBitmap.Create();
b.Assign(ClipBoard);
b.SaveToFile('c:\aa.bmp');
b.Free; end; </textarea> delphi Code 請自己翻BCB
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
大大您好!您的作法好像跟我不太一樣耶!不知我作法是錯在哪裡??請大大指導!謝謝您!
<textarea class="cpp" rows="10" cols="60" name="code"> void __fastcall TDynamicMonitorThread::Execute()
{
/* 執行緒程式主體 */
int x,y,serial,length,i;
unsigned int tmp;
while(ThreadLoop) //執行緒是否繼續執行,依ThreadLoop判斷
{
/* 取得全螢幕DC handle */
DesktopDC = ::GetDC(0);
/* 將DesktopDC擷取到的內容複製至MonitorBmp中 */
::BitBlt(MonitorBmp->Canvas->Handle, 0, 0, Screen->Width, Screen->Height,
DesktopDC, 0, 0, SRCCOPY);
DeleteDC(DesktopDC); //刪除DC
/* 取得滑鼠位置 */
hCur = GetCursor(); //GetCursor()取得目前游標識別碼
GetIconInfo(hCur, &IconInfo);
GetCursorPos(&pt); //GetCursorPos()取得目前游標之視窗座標位置
pt.x-=IconInfo.xHotspot;
pt.y-=IconInfo.yHotspot;
DrawIcon(MonitorBmp->Canvas->Handle,pt.x,pt.y,hCur);
for(y=0;y<8;y )
{
for(x=0;x<8;x )
{
/* 將MonitorBmp的內容複製至TestBmp中 */
::BitBlt(TestBmp->Canvas->Handle,0,0,TestBmp->Width, TestBmp->Height,
MonitorBmp->Canvas->Handle,x*TestBmp->Width, y*TestBmp->Height, SRCCOPY);
msBuf->Clear();
TestBmp->SaveToStream(msBuf); //將TestBmp寫入串流記憶體
tmp = Check.CheckBmp(msBuf->Memory,msBuf->Size); //將串流記憶體傳入CheckBmp做Check
if(bmpCRC[y*8 x] != tmp) //記錄值不等於運算值(表示畫面有變動)
{
bmpCRC[y*8 x] = tmp; //記錄運算值
/* CALL: ImageResize_Bilinear() */
pRefBitmap = TestBmp; //TestBmp為縮圖函式的來源
Resize.ImageResize_Bilinear(pRefBitmap, pDestBitmap);
jpg->Assign(pDestBitmap); //將pDestBitmap載入到jpg
//Synchronize(UpdateVCL);
msBuf->Clear();
yname = y;
xname = x;
name = yname xname ".jpg";
jpg->SaveToFile("C:\\pic\\" name);
}
}
}
::Sleep(50);
}
delete jpg;
delete msBuf;
delete pDestBitmap;
delete TestBmp;
delete MonitorBmp;
}
</textarea>
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |