уеб камера, се появява диалоговият прозорец Видео източник

Така че видях много хора със същия проблем, но без отговори. Моето изскачащо съобщение SendMessage показва диалоговия прозорец „Източник на видео“ на лаптоп с Windows 7 с една камера. Имам инсталиран Cyber ​​Link YouCam. Диалогов прозорец

Ако деинсталирам Cyber ​​Link YouCam, диалоговият прозорец „Източник на видео“ изчезва. Изглежда, че операционната система действа така, сякаш YouCam е втори драйвер за същото устройство. Въпросът ми е как да спра диалоговия прозорец за "Видео източник" да не се показва? След като избера опция в диалоговия прозорец, не получавам диалоговия прозорец (докато не рестартирам приложението), така че някъде трябва да има зададена настройка.

Въпреки че отстраняването на грешки установи, че този код (вижте целия раздел по-долу) е този, който изглежда е този, който извиква диалоговия прозорец - SendMessage (deviceHandle, WM_CAP_CONNECT, deviceno, ((IntPtr) 0).ToInt32 ())

 public void StartWebCam (int height, int width, int handleofthepicturebox, int deviceno)
        {

        string deviceIndex = "" + deviceno;

        deviceHandle = capCreateCaptureWindowA (ref deviceIndex, WS_VISIBLE | WS_CHILD, 0, 0, width, height, handleofthepicturebox, 0);


        if (SendMessage (deviceHandle, WM_CAP_CONNECT, deviceno, ((IntPtr) 0).ToInt32 ()) > 0)
            {


            SendMessage (deviceHandle, WM_CAP_SET_SCALE, -1, 0);
            SendMessage (deviceHandle, WM_CAP_SET_PREVIEWRATE, 0x42, 0);
            SendMessage (deviceHandle, WM_CAP_SET_PREVIEW, -1, 0);

            }
        else
            {
            // nothing failed maybe some clean up needed
            }

        }

Така че отново въпросът е - как да спра диалоговия прозорец за "Видео източник" да не се показва?


person Brian Hanf    schedule 23.05.2012    source източник
comment
Използвайте по-нови API за заснемане на видео в Windows: DirectShow или Media Foundation. VFW, който използвате, е остарял отдавна и изглежда, че YouCam го закача по някакъв лош начин, за да принуди изскачащия диалогов прозорец.   -  person Roman R.    schedule 16.06.2012
comment
Благодаря Roman R. Изглежда не мога да намеря много информация за C# или .net в Media Foundation.   -  person Brian Hanf    schedule 21.06.2012
comment
Бях създал въпрос Web Cam и c# относно каква посока трябва да взема.   -  person Brian Hanf    schedule 21.06.2012
comment
На това Q посочвате, че искате поддръжка на Windows XP. Media Foundation няма да работи добре за вас тогава, така че DirectShow е най-доброто, което можете да имате за поточно видео. Може би WIA за заснемане на снимки.   -  person Roman R.    schedule 21.06.2012


Отговори (5)


Невронната мрежа е много широко понятие. Какъв вид NN архитектура прилагате?
person slv    schedule 10.01.2013
comment
Не е късно, все още работим по проекта. Ще разгледам отговора ви по-отблизо след няколко седмици. - person Brian Hanf; 23.01.2013
comment
Вече не работя по този проект, така че не успях да опитам решението. Така че не знам дали отговори на въпроса. Все пак му даде плюс 1 - person Brian Hanf; 19.06.2013

Най-накрая намерих решение за това.
Проблемът възниква в Windows 7/8

Първо имате нужда от тази API функция

Private Declare Function GetTickCount Lib "kernel32" () As Long

След това... след като извикате capCreateCaptureWindowA(), трябва да изчакате 1 секунда за обработка на събития (забележка: заспиването не работи по същия начин)

IniTime = GetTickCount()
While GetTickCount() < (IniTime + 1000)
   DoEvents
Wend

след това се обаждате на WM_CAP_DRIVER_CONNECT (може би няколко пъти).. и ТОВА Е... няма повече диалогов прозорец за източник на видео

person Theo    schedule 02.10.2014

С това решение работи перфектно. GetTickCount() Изчакване на събития работи заедно с извикването на функцията, докато не върне истина.

Private Sub PreviewVideo(ByVal pbCtrl As PictureBox)    
    hWnd = capCreateCaptureWindowA(VideoSource, WS_VISIBLE Or WS_CHILD, 0, 0, 0,
   0, pbCtrl.Handle.ToInt64, 0)    
    Dim IniTime As Long = GetTickCount() 
    While GetTickCount() < (IniTime + 1000)
        Application.DoEvents()
    End While    
    Dim OKAnswer As Boolean = False
    For xretries As Integer = 1 To 10
          ' I'll give you Only 10 tries to connect, otherwise I AM LEAVING MICROSOFT!
          OKAnswer = SendMessage(hWnd, WM_CAP_DRIVER_CONNECT, VideoSource, 0)
          If OKAnswer Then
              Exit For
          End If    
    Next    
    If okanswer Then
          SendMessage(hWnd, WM_CAP_SET_SCALE, True, 0)
          SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0)
          SendMessage(hWnd, WM_CAP_SET_PREVIEW, True, 0)
          SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, pbCtrl.Width, pbCtrl.Height, SWP_NOMOVE Or SWP_NOZORDER)    
    Else
          DestroyWindow(hWnd)    
    End If    
End Sub
person cappcorp    schedule 12.06.2015

Имах същия проблем. Уверете се, че сте извикали capDriverDisconnect, след като вече нямате нужда от уеб камерата. Имайте предвид, че използвам Logitech C110, но предполагам, че трябва да работи и във вашия случай.

person limcy_at_mip    schedule 17.06.2013

Дойдох тук в търсене на решение за изскачащата грешка в диалоговия прозорец „WM_CAP_DRIVER_CONNECT“ и „Video Setup“.

НАМЕРИХ РЕШЕНИЕТО:

Това е проблем с драйвера. Използвайте драйвера на OEM, защото генеричните драйвери на Microsoft НЕ работят за вашата камера.

Използвайте www.astra32.com, за да разберете информацията за устройството на USB камерата: Производител или Модел; след това потърсете в Google правилните драйвери.

Късмет!

person carabez    schedule 19.07.2017