屏幕拷贝,怎么样才能包括鼠标光标?

ynduanlian 2014-12-20 09:35:17
屏幕拷贝,怎么样才能包括鼠标光标?用QQ截图,或键盘上的硬拷贝键,都得不到鼠标光标
...全文
234 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Tiger_Zhao 2015-02-04
好像我用过的屏幕录像软件也只不过是把图和鼠标操作分别录下来,播放的时候用当前的鼠标来演示操作的。
并没有把原始的鼠标截下来。
  • 打赏
  • 举报
回复
Carlven2012 2015-02-03
DrawIcon Me.hdc, 0, 0, GetCursor 将当前鼠标样式绘出来。其他程序里面的鼠标样式好像不行,可能涉及注入之类的要麻烦些。
  • 打赏
  • 举报
回复
ynduanlian 2015-02-03
引用 3 楼 u011266608 的回复:
直接全屏截图貌似可以。。。
没试出来,请问怎么直接全屏截图?
  • 打赏
  • 举报
回复
ynduanlian 2015-02-03
引用 2 楼 Topc008 的回复:
有一个笨法叫 二次粘贴合成。先抓图,然后得到鼠标样式和相对位置,再把鼠标画到那个图里完成合成....
鼠标的样式,怎么能得到呢?比如说有些画图软件,点了某个按钮,鼠标变成个黑板擦……我怎么能得得到这些第三方软件里的样式?
  • 打赏
  • 举报
回复
赵4老师 2015-02-03
仅供参考
//本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jiangsheng/archive/2004/12/17/219176.aspx
//默认情况下屏幕捕捉下来的内容不包含鼠标的,但是可以把鼠标画到捉下来的图像里面

LPBITMAPINFOHEADER captureScreenFrame(int left,int top,int width, int height,int tempDisableRect)
{
#ifndef _DIRECTX_captureScreenFrame
 HDC hScreenDC = ::GetDC(NULL);
#else
 theApp.DirectXInit();
#endif

 //if flashing rect
 if (flashingRect && !tempDisableRect) {

  if (autopan) {

   pFrame->SetUpRegion(left,top,width,height,1);
   DrawFlashingRect( TRUE , 1);

  }
  else
   DrawFlashingRect( TRUE , 0);

 }

#ifndef _DIRECTX_captureScreenFrame
 HDC hMemDC = ::CreateCompatibleDC(hScreenDC);
 HBITMAP hbm;

    hbm = CreateCompatibleBitmap(hScreenDC, width, height);
 HBITMAP oldbm = (HBITMAP) SelectObject(hMemDC, hbm);
 BitBlt(hMemDC, 0, 0, width, height, hScreenDC, left, top, SRCCOPY);
#else
 theApp.DirectXCapture(left, top,width, height);
 HDC hMemDC = NULL;
 theApp.DirectXGetDC(hMemDC);
#endif

 //Get Cursor Pos
 POINT xPoint;
 GetCursorPos( &xPoint );
 HCURSOR hcur= FetchCursorHandle();
 xPoint.x-=left;
 xPoint.y-=top;


 //Draw the HighLight
 if (g_highlightcursor==1) {

  POINT highlightPoint;

  highlightPoint.x = xPoint.x -64 ;
  highlightPoint.y = xPoint.y -64 ;

  InsertHighLight( hMemDC, highlightPoint.x, highlightPoint.y);

 }

 //Draw the Cursor
 if (g_recordcursor==1) {



  ICONINFO iconinfo ;
  BOOL ret;
  ret = GetIconInfo( hcur,  &iconinfo );
  if (ret) {

   xPoint.x -= iconinfo.xHotspot;
   xPoint.y -= iconinfo.yHotspot;

   //need to delete the hbmMask and hbmColor bitmaps
   //otherwise the program will crash after a while after running out of resource
   if (iconinfo.hbmMask) DeleteObject(iconinfo.hbmMask);
   if (iconinfo.hbmColor) DeleteObject(iconinfo.hbmColor);

  }


  ::DrawIcon( hMemDC,  xPoint.x,  xPoint.y, hcur);

 }
 //CString strText=COleDateTime::GetCurrentTime().Format();
 //CRect rc(0,0,640,480);
    //DrawText(hMemDC,strText,-1,&rc,DT_LEFT);
#ifndef _DIRECTX_captureScreenFrame
 SelectObject(hMemDC,oldbm);
 LPBITMAPINFOHEADER pBM_HEADER = (LPBITMAPINFOHEADER)GlobalLock(Bitmap2Dib(hbm, bits));
 //LPBITMAPINFOHEADER pBM_HEADER = (LPBITMAPINFOHEADER)GlobalLock(Bitmap2Dib(hbm, 24));
#else
 theApp.DirectXReleaseDC(hMemDC);
 LPBITMAPINFOHEADER pBM_HEADER = (LPBITMAPINFOHEADER)GlobalLock(theApp.DirectXGetCaptureBitmap(bits));
#endif
 if (pBM_HEADER == NULL) {

  //MessageBox(NULL,"Error reading a frame!","Error",MB_OK | MB_ICONEXCLAMATION);
  AfxMessageBox(IDS_CAPTURE_FAIL);
  AfxPostQuitMessage(0);
  //exit(1);
 }
#ifndef _DIRECTX_captureScreenFrame
 DeleteObject(hbm);
 DeleteDC(hMemDC);
#endif
 //if flashing rect
 if (flashingRect && !tempDisableRect) {

  if (autopan) {
   DrawFlashingRect(FALSE , 1);
  }
  else
   DrawFlashingRect(FALSE , 0);

 }
#ifndef _DIRECTX_captureScreenFrame
 ReleaseDC(NULL,hScreenDC) ;
#else
 theApp.DirectXUninit();
#endif
 return pBM_HEADER;
}
  • 打赏
  • 举报
回复
楚狂歌 2015-02-02
直接全屏截图貌似可以。。。
  • 打赏
  • 举报
回复
一如既往哈 2015-02-02
有一个笨法叫 二次粘贴合成。先抓图,然后得到鼠标样式和相对位置,再把鼠标画到那个图里完成合成....
  • 打赏
  • 举报
回复
ynduanlian 2015-02-02
好人时间无人理睬的贴子!
  • 打赏
  • 举报
回复
相关推荐
发帖
API

1472

社区成员

VB API
社区管理员
  • API
加入社区
帖子事件
创建了帖子
2014-12-20 09:35
社区公告
暂无公告