線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2071
推到 Plurk!
推到 Facebook!

使用Thread寫截圖程式,卻出現錯誤訊息或空白截圖

缺席
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-20 13:47:27 IP:59.120.xxx.xxx 訂閱
各位大大您好!
小弟有個問題想請問!

小弟目前有個截圖程式是用Thread寫的,但不知是哪裡出了問題,debug很久還是不知如何解決,想請大大們指導一下!

小弟測試的結果有兩種,一種是錯誤訊息,另一種是截出來的圖都是空白的,好像取不到螢幕畫面一樣!

程式碼、錯誤訊息與空白畫面都附加在檔案裡!
附加檔案:4678bf6f8d39b_Thread.rar
編輯記錄
cashyy 重新編輯於 2007-06-22 00:11:26, 註解 無‧
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-20 16:14:10 IP:61.62.xxx.xxx 訂閱
之前有碰過類似的CASE

給你個方向


STEP1:
SENDKEY PrintScreen


STEP2:
Copy Image From ClipBoard.

cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-20 23:57:35 IP:211.74.xxx.xxx 訂閱
可以請shunchia63大大再講清楚一點嗎??不太瞭解您的意思!謝謝您回覆此問題!
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-21 00:07:40 IP:61.64.xxx.xxx 訂閱
<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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-21 00:25:26 IP:211.74.xxx.xxx 訂閱
大大您好!您的作法好像跟我不太一樣耶!不知我作法是錯在哪裡??請大大指導!謝謝您! <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 重新編輯於 2007-06-21 00:26:08, 註解 無‧
cashyy 重新編輯於 2007-06-21 00:29:37, 註解 無‧
cashyy 重新編輯於 2007-06-21 00:37:58, 註解 無‧
cashyy 重新編輯於 2007-06-21 00:39:33, 註解 無‧
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-22 00:18:11 IP:211.74.xxx.xxx 訂閱
目前問題還在,所以想重寫此程式!同時也謝謝shunchia63大大回應此問題!對於shunchia63大大可能無法給您分數,您的回覆小弟心存感激,因此小弟先結案了!
系統時間:2024-03-29 0:33:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!