none
C# 在Windows 8 Pro 上用avicap32控制視訊鏡頭問題 RRS feed

  • 問題

  • 最近在測試平板運用時撰寫一個小軟體可透過平板視訊鏡頭讀取QRcode後解析,但是撰寫出來的程式在XP、Windows 7、Windows 8 Standard上都可以運作,但換到Windows 8
    Pro版後建立CONNECT都會出現但一旦開始要圖片到剪貼簿就出問題,訊息是取出來的Drawing.Bitmap為NULL造成,可是在XP、Windows 7、Windows 8 Standard都可以正常運作,所以不知道有哪位前輩可以指點我是不是Windows 8上面有哪個安全性要開?
    1.程式撰寫環境:
    Windows 7 + Microsoft Visual C# 2010 + .netFramwork 2.0
    2.測試環境:
    Windows 8 Pro + ASUS VivoTab
    3.程式邏輯:
    mCapHwnd =
    capCreateCaptureWindowA("WebCap", WS_CHILD | WS_VISIBLE, 0, 0, m_Width,
    m_Height, this.Handle.ToInt32(), 0); // setup a capture
    window
    SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0); // connect to the capture
    device
    SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0); //// set the frame
    number
    // get the next frame;
    SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0,
    0);
    // copy the frame to the clipboard
    SendMessage(mCapHwnd, WM_CAP_COPY,
    0, 0);
    // paste the frame into the event args image
    // get from the
    clipboard
    tempObj = Clipboard.GetDataObject();
    tempImg =
    (System.Drawing.Bitmap)
    tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap);
    簡單來說是用avicap32.dll的功能取得對視訊鏡頭的控制將圖片COPY到剪貼簿中再取出來運用。
    4.測試過的解決辦法:
    A.透過Windows
    8內有的相容模式用WindowXP SP3及Windows 7試過皆不行(Windows 8Standard只要做這個部分就可以了).
    B.我肯定視訊鏡頭沒壞因為內建的相機可以正常使用.
    C.因為Pro支援AD認證,我試過加入網域的最高權限帳戶及未加入網預前最高權限帳戶(有到本機原則打開權限)也是不行.
    D.有試過用PrtScr鍵送一個畫面進剪貼簿,確實我的程式會抓到送進去的畫面,表示我抓取剪貼簿的內容沒問題,而是SendMessage(mCapHwnd, WM_CAP_COPY, 0, 0);這段執行時未將視訊鏡頭的畫面抓進剪貼簿中,導致後面(System.Drawing.Bitmap) tempObj.GetData (System.Windows.Forms.DataFormats.Bitmap);在取剪貼簿時會取到NULL導致後方錯誤。

    因為只有Windows 8 Pro有問題所以我實在也想不出解決方法,還請列位前輩指點迷津謝謝.

    2013年6月13日 上午 01:32

解答