mam kamerkę, która ma przycisk na obudowie, który robi zdjęcie. Jednak ta funkcja działa tylko w dedykowanej aplikacji. Pewnie ten przycisk wysyła jakiś sygnał, który wywołuje funkcję przechwycenia obrazu.
Czy macie jakiś pomysł, jak przechwycić ten sygnał, abym mógł tego przycisku użyć w mojej aplikacji?
Podejrzewam, że to jest kwestia sterowników, które monitorują wciśnięcia tego przycisku, więc ciężko może być.
Jakbyś dał konkretny model kamerki, to można by było pokombinować.
nie sądzę aby to komuś pomogło, ale ta kamerka to
Professional Multifunction Skin Analysis System EH-9100
myślę że przechwycenie jakiegoś zdarzenia na przycisku może być niewykonalne bez modyfikacji sterownika. To jednak może być bardzo trudne.
Dlatego mogę zaproponować "protezę".
Domyślam się że praca z tym urządzeniem polega na tym że kamerą najeżdżasz na zmiany skórne i robisz po prostu zdjęcie. I rób tak dalej, uruchom aplikację od kamery jeśli jest niezbędna do obserwacji miejsca które fotografujesz i rób zdjęcia.
Jedyne co powinieneś zrobić w swojej aplikacji po np. rejestracji pacjenta to monitoring folderu ze zdjęciami, gdy pojawi się nowe po prostu kopiujesz je do swojej aplikacji i np. wyświetlasz.
Jeśli byś chciał bardziej zintegrować to rozwiązanie to możesz nawet wyświetlić okno aplikacji od kamery w oknie swojej aplikacji. Ostatnio była dość duża dyskusja na ten temat na forum. Chociaż ja twierdzę że nie jest to potrzebne.
Ale ta dedykowana aplikacja ma błędy i brak kilku ważnych funkcji, dlatego chciałem napisać własną.
Taki punkt zaczepienia - rzuć okiem na https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/usb-based-camera-with-a-capture-button.
Aczkolwiek to wszystko zależy od tego, jak do tematu podeszli producenci tego urządzenia - Vendors do not need to write a minidriver for their USB-based camera if it conforms to the UVC specification.
Jeśli urządzenie jest zgodne z podaną specyfikacją, jest szansa, że się do niego dobijesz. Jeśli zrobili to po swojemu, to albo trzeba uzyskać jakieś wsparcie od producenta urządzenia (np. informacje o API/sposobie komunikacji ze sterownikiem), albo próbować podsłuchać w jaki sposób apka "gada" z kamerką. Ale to już raczej grubszy temat i kiepsko to widzę.
My Razem napisał(a):
Ale ta dedykowana aplikacja ma błędy i brak kilku ważnych funkcji, dlatego chciałem napisać własną.
Czyli ta kamera nie tylko fotografuje ale jeszcze ma jakieś inne funkcje, w stylu dynamicznej zmiany podświetlenia i robienia serii zdjęć aby rozszerzyć zakres tonalny itp.?
Jeśli tak to rozumiem, jeśli jednak kamera robi tylko zdjęcia a resztę załatwia aplikacja i wbudowane w nią filtry operujące na przechwyconym obrazie to jednak dalej możesz użyć metody kopiowania obrazu z dysku (jak można to zapisuj w metodzie bezstratnej a może jakiś RAW nawet istnieje) i dalszej obróbki w swojej aplikacji.
Kamerka tylko wysyła obrazek do aplikacji, a resztę już robi ta aplikacja. Ale ona często wywala błędy.
Próbuję zrozumieć jak mam użyć tego sterownika od Microsoftu, który podał cerrato
zacznij od tego czy dasz radę odczytać obraz z kamery jakimś programem który obsługuje sterownik TWAIN (np IrfanView) lub np. VLC
w tym temacie są moje boje z kamerką, może Ci się przydadzą Kamerka
jeśli chodzi o samo przechwytywanie obrazu z kamerki to ja zrobiłem to na podstawie tego: http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample działa dobrze ale o obsłudze przycisku na kamerze nie ma mowy.
Sprawdziłem w IrfanView i po wybraniu sterownika TWAIN widzę obraz z kamerki. Mogę wcisnąć przycisk **acquire **i obraz zapisuje się na dysku.
Ale naciśnięcie przycisku na kamerze nie robi nic.
Pewnie wywołuje jakieś inne zdarzenie.
no to część związana z przechwytywaniem obrazu można powiedzieć że nie będzie sprawiała problemu, możesz użyć mojego rozwiązania lub tego co polecił @PrzemysławWiśniewski są z tego co gdzieś czytałem jakieś biblioteki do tego, chyba VLC coś udostępnia?
Jednak jeśli chodzi o przycisk to musisz szukać dalej rozwiązania, może napisanie do producenta kamerki prośby o udostępnienie informacji coś by dało?
Rozumiem że przycisk działa tylko w momencie gdy działa aplikacja kamery, czyli nie jest to jakiś serwis w systemie tylko ta aplikacja przechwytuje jakieś zdarzenie. Po szpieguj ją np. programem spyxx
Poszpiegowałem tę aplikację programem Spy++ i tam pokazał, że naciśnięcie przycisku na kamerze powoduje komunikat WM_USER+2
Więc napisałem najprostszą aplikację do obsługi tego komunikatu:
const
WM_BUTTON = WM_USER + 2;
type
TfrmMain = class(TForm)
Memo1: TMemo;
private
procedure WmButton(var Msg : TMessage); message WM_BUTTON;
public
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
{ TfrmMain }
procedure TfrmMain.WmButton(var Msg: TMessage);
begin
Memo1.Lines.Add('button');
end;
Ale nadal nic się nie dzieje.
I tutaj mam pytanie. Czy mój program nie działa czy może ta kamera wyszukuje tę dedykowaną aplikację i do niej "wstrzykuje" ten komunikat i dlatego ja nie mogę go przechwycić. Jest to możliwe?
My Razem napisał(a):
Poszpiegowałem tę aplikację programem Spy++ i tam pokazał, że naciśnięcie przycisku na kamerze powoduje komunikat WM_USER+2
A kto jest odbiorcą tego komunikatu?
Wątpię, aby był on rozgłaszany, czyli wysyłany do wszystkich okien (odpowiednik HWND_BROADCAST
), więc ta metoda nic Ci nie da, bo tego komunikatu Twoje okno po prostu nie otrzymuje. Przyda się najpierw założyć hooka, tak aby ten komunikat podsłuchać i dopiero wtedy można będzie zareagować.
Skoro kamera wysyła sygnał tylko do swojej aplikacji, to musi ją najpierw znaleźć. W jaki sposób może ją szukać?
Próbowałem nazwać moje okno tak jak tamten program ale nic to nie dało.
Sprawdź tym swoim narzędziem kto jest odbiorcą tego komunikatu (uchwyt określ). Albo załóż globalnego hooka.
Mogę prosić o nakierowanie jak zrobić globalnego hooka na komunikaty? Wszędzie są tylko na klawiaturę lub mysz.
Pewnie łatwo to przerobić ale nie widzę tego...
Zobacz tutaj: http://www.delphipages.com/forum/showthread.php?t=203324
Sam niewiele dłubię w WinAPI, dlatego też lepiej będzie, jeśli wypowie się ktoś bardziej obeznany w tych tematach. Myślę, że @kAzek, @olesio oraz @Stefan_3N będą w stanie pomóc.
Widzialem tę stronke, ale nie rozumum w jakim celu jest tam uzywany plik tekstowy.