5

このコードを使用して画面上のマウスの位置を取得しましたが、機能しています。カーソルの幅と高さも取得します。必要なのは、関数 GetIconInfo を呼び出す瞬間のカーソル アイコンです。ii には ii.hbmColor と ii.hbmMask があります。hbmColor の値は 0x0、hbmMask は 0x2f0517f1 です。その2つのポインターからマウスカーソルを抽出できますか?

  CURSORINFO cursorInfo = { 0 };
  cursorInfo.cbSize = sizeof(cursorInfo);

  HDC memoryDC = (HDC)malloc(100);
  memset(memoryDC, 0x00, 100);

  if (::GetCursorInfo(&cursorInfo))  {
    ICONINFO ii = {0};
    GetIconInfo(cursorInfo.hCursor, &ii);

    BITMAP bm;
    GetObject(ii.hbmMask,sizeof(BITMAP),&bm);

    DeleteObject(ii.hbmColor);
    DeleteObject(ii.hbmMask);
    ::DrawIcon(memoryDC, cursorInfo.ptScreenPos.x - ii.xHotspot, cursorInfo.ptScreenPos.y - ii.yHotspot, cursorInfo.hCursor);


    for(int i = 0; i < bm.bmWidth; i++){
        for(int j = 0; j < bm.bmHeight; j++){
            COLORREF c = GetPixel(memoryDC, i, j);
            printf("%x", c);

        }
    }
  }
4

2 に答える 2

2
  CURSORINFO cursorInfo = { 0 };
  cursorInfo.cbSize = sizeof(cursorInfo);

  if (::GetCursorInfo(&cursorInfo))
  {
    ICONINFO ii = {0};
    GetIconInfo(cursorInfo.hCursor, &ii);
    DeleteObject(ii.hbmColor);
    DeleteObject(ii.hbmMask);
    ::DrawIcon(memoryDC, cursorPos.x - ii.xHotspot, cursorPos.y - ii.yHotspot, cursorInfo.hCursor);
  }
于 2010-08-18T07:51:38.877 に答える
-2

カーソル情報は、ここで説明されているようにフォーマットされています: http://www.daubnet.com/en/file-format-cur

各バイトからではなく、データ バッファーの各ビットから各ピクセルを取得する必要があるため、1 バイト = 8 ピクセルになります。また、26x23 のような特別なサイズのカーソル (8 の倍数ではない) を持つアプリケーションにも注意してください。この場合、各行の最後のビットを無視する必要があります。最初の 3 バイトを読み取って最初の 24 ピクセルを取得し、4 番目のバイトの 2 ビットを読み取って最後の 2 ピクセルを取得し、最後を無視します。次の行にジャンプする前に 6 ビット。

于 2011-05-13T13:09:01.657 に答える