Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125

Буфер обмена, перехватывается микрософтовскими программами

12.03.2013, 12:54. Показов 4900. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет форумчане, суть вопроса состоит в том, что моя программа, перехватывает картинку с веб камеры и через буфер(не особо понимаю как, пытаюсь разобратся) в общем буфер обмена постоянно забивается картинками с веб камеры, но если открыта микрософт офисовская прога, то прога начинает матерится, что нет доступа к буферу обмена, как обойти эту проблемку? Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
pCBL = Clipboard ();
 hWndC=capCreateCaptureWindow("",WS_CHILD,  this->Left, this->Top, Image1->Width, Image1->Height, this->Handle, 11011);capDriverConnect (hWndC,0);
 Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
                capGrabFrame(hWndC);
            if(capEditCopy(hWndC))
    Image1->Picture->LoadFromClipboardFormat(CF_BITMAP, pCBL->GetAsHandle(CF_BITMAP),0);
                Image1->Canvas->TextOutA(10,10,Now());
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2013, 12:54
Ответы с готовыми решениями:

Программа для обмена данными между другим программами
Не знаю в какую часть форума написать, изучаю c# поэтому тут. Надо сделать небольшую программу для экспорт данных из 1С, преобразование и...

Реализация ssl для обмена между программами на одном устройстве
Вопрос как создать защищенный сеанс используя протокол ssl между двумя программами. Программы обмениваются сообщениями и запущены на одном...

Буфер обмена
Здравствуйте, мне срочно надо добавить в одну программу поддержку работы с буфером обмена. Я про него ничего не знаю! Не могли бы вы дать...

36
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.03.2013, 15:52
Студворк — интернет-сервис помощи студентам
Вот тупо выдрал код из исходников, на которые приводил ссылку раньше.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
    //STEP 1: Create capture window
    HWND hwndParent=this->Handle;
    hWndC = capCreateCaptureWindow ( NULL, WS_CHILD | WS_VISIBLE , 0, 0, 640, 480, hwndParent, 0);
 
    /*
    //OPTIONAL STEP: Get capture devices information
    char DeviceName[80];
    char DeviceVersion[80];
    for (int index = 0; index < 10; index++) { // We assume the number of capture decvices is less than 10
        if (capGetDriverDescription(index, DeviceName, sizeof (DeviceName), DeviceVersion, sizeof (DeviceVersion))){
                // we can now show the capteure device information here
        }
    }
    */
    //STEP 2: Connect to a capture device
    capDriverConnect (hWndC, 0);
 
    /*
    //OPTIONAL STEP: Use hardware to render the video input directly into the framebuffer.
    CAPDRIVERCAPS CapDrvCaps;
    capDriverGetCaps(hWndC, &CapDrvCaps, sizeof (CAPDRIVERCAPS));
    if (CapDrvCaps.fHasOverlay)
        capOverlay(hWndC, TRUE);
    */
 
    // OPTIONAL STEP: Setup frame rate
    CAPTUREPARMS CaptureParms;
    float FramesPerSec = 30.0;
    capCaptureGetSetup(hWndC, &CaptureParms, sizeof(CAPTUREPARMS));
    CaptureParms.dwRequestMicroSecPerFrame = (DWORD) (1.0e6 / FramesPerSec);
    capCaptureSetSetup(hWndC, &CaptureParms, sizeof (CAPTUREPARMS));
 
    // OPTIONAL STEP: Setup resolution
    BITMAPINFO psVideoFormat;
    capGetVideoFormat(hWndC, &psVideoFormat,sizeof(psVideoFormat));
    psVideoFormat.bmiHeader.biWidth = 640;
    psVideoFormat.bmiHeader.biHeight = 480;
    capSetVideoFormat(hWndC, &psVideoFormat,sizeof(psVideoFormat));
    capDriverDisconnect (hWndC); /* <- тут почемуто два параметра передавалось */
                                                 //, 0);//Can we do better?    
    capDriverConnect (hWndC, 0);
 
    //STEP 3: Setup the preview window size
        CAPSTATUS CapStatus;
    capGetStatus(hWndC, &CapStatus, sizeof (CAPSTATUS));
    ::SetWindowPos(hWndC, NULL, 0, 0, CapStatus.uiImageWidth, CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);
 
    //STEP 4: Previewing video
    capPreview(hWndC, TRUE);       // start preview
    capPreviewRate(hWndC, 15);     // rate, in milliseconds, the frame rate here is just for preview window, not for capturing
    capPreviewScale(hWndC,TRUE);
 
    //OPTIONAL STEP: Setup callback functions
        //capSetCallbackOnFrame(hWndC, FrameCallbackProc); // For frame callback
    //capSetCallbackOnFrame(hWndC, NULL); //Disable callback function
}
//---------------------------------------------------------------------------
У меня прекрасно работает ( хотя подтормаживает но думаю так и должно быть )
Остается только разобраться как оно работает...
2
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
12.03.2013, 16:13  [ТС]
Avazart, Сейчас проверю, хоть моя вебка не подходит для таких дел, но все равно)

Добавлено через 6 минут
Avazart, Окэ, код компилит, не ругает, теперь такой вопрос, а куда оно должно это выводить? Х)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.03.2013, 16:14
Цитата Сообщение от Graf_N Посмотреть сообщение
Avazart, Окэ, код компилит, не ругает, теперь такой вопрос, а куда оно должно это выводить? Х)
В окно формы
В место
C++
1
HWND hwndParent= this->Handle;
Можно использовать панельку
C++
1
HWND hwndParent= Panel1->Handle;
Но вот как масштабирование сделать ?
1
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
12.03.2013, 16:18  [ТС]
Avazart, Угу, отлично, а что если вывод сделать не в окошко, а в компонент, ну ладно, это не принципиально, а в смысле масштабирование? Что конкретно?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.03.2013, 16:23
Цитата Сообщение от Graf_N Посмотреть сообщение
Avazart, Угу, отлично, а что если вывод сделать не в окошко, а в компонент, ну ладно, это не принципиально, а в смысле масштабирование? Что конкретно?
Ну так привел же с Panel1
Я имею ввиду растяжение изображения под "окно" компонента...
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
12.03.2013, 16:26  [ТС]
Avazart, да с имейджем вроде сделал, только, как понял, там не Handle а Picture, так?
ммм сложно сказал, я могу понять, если компонент тот же Имейдж сделать alClient а дальше форму мять)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.03.2013, 16:44
Цитата Сообщение от Graf_N Посмотреть сообщение
ммм сложно сказал, я могу понять, если компонент тот же Имейдж сделать alClient а дальше форму мять)
Ну думаю не получится ...
Ибо размер тут устанавливается
C++
1
2
3
4
BITMAPINFO psVideoFormat;
capGetVideoFormat(hWndC, &psVideoFormat,sizeof(psVideoFormat));
psVideoFormat.bmiHeader.biWidth = 640;
psVideoFormat.bmiHeader.biHeight = 480;
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
12.03.2013, 17:20  [ТС]
Avazart, тогда другая идея, как на счет того, чтобы этот размер видео приклеить к размеру имейджа или компонента и повесить это все на онресайз формы?)
0
1409 / 573 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
12.03.2013, 18:01
так очень сильно не увеличишь, смотря сколько твоя камера макс. может дать (может я чот упустил)

Добавлено через 2 минуты
а так в событии формы OnResize меняй размер изображения относительно ClientWidth ClientHeight
вроде так
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.03.2013, 18:17
Цитата Сообщение от Graf_N Посмотреть сообщение
Avazart, тогда другая идея, как на счет того, чтобы этот размер видео приклеить к размеру имейджа или компонента и повесить это все на онресайз формы?)
Лучше посмотреть как там там колбек организовать и уже полученное изображение трансформировать...
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
13.03.2013, 11:14  [ТС]
Avazart, Ну да тоже вариант, но я то что хотел уже узнал еще раз спасибо) Завтра буду тестить)

Добавлено через 15 часов 50 минут
Avazart, Не хочет у меня в хэндл канвы имейджа запихивать то, что в хендле формы... А если поставить Имейдж - хандл, то туда белое окно передается... Как получить из хендла формы в имейдж?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.03.2013, 13:51
У Image как я помню нет хендла это не оконный компонент вроде.
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
13.03.2013, 13:53  [ТС]
Avazart, у него самого по сути хендла нету, но есть у его канвы.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.03.2013, 14:09
Цитата Сообщение от Graf_N Посмотреть сообщение
Avazart, у него самого по сути хендла нету, но есть у его канвы.
Ну то уже другой хендл ...
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
13.03.2013, 14:25  [ТС]
Avazart, Ок, тогда такой вопрос, могу ли я простеньким способом, перенести изображение с формы в имейдж?) А то сохранять фрейм, потом загружать это в имейдж и только после этого сохранять или удалять Оо Или только так?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.03.2013, 14:47
Цитата Сообщение от Graf_N Посмотреть сообщение
Avazart, Ок, тогда такой вопрос, могу ли я простеньким способом, перенести изображение с формы в имейдж?) А то сохранять фрейм, потом загружать это в имейдж и только после этого сохранять или удалять Оо Или только так?
Колбеки смотреть надо как реализовать ... и брать изображение непосредственно с камеры...
Кстати в исходниках там вроде бы есть запись виде видео файлов...
0
26 / 26 / 0
Регистрация: 30.12.2012
Сообщений: 125
13.03.2013, 14:58  [ТС]
Avazart, я из исходника получил фото, мне видео не надо, но там сразу в файл сохраняет!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.03.2013, 14:58

Буфер обмена
Привет всем! Возникла такая проблема с буфером обмена, которая заключается в том, что при копировании элементов (неважно сколько) они не...

Буфер обмена
Добрый вечер форумчане. Выручайте. Вот код Delphi 7: procedure TSpisok.BitBtn1Click(Sender: TObject); var Path : String; ...

Буфер обмена
Как сделать так что бы программа постоянно проверяла буфер обмена и содержимое буфера добавляла в Memo1. Додумался только до : ...

Буфер обмена.
В паскале будер обмена как представлен? Если он представлен файлом то можно ли его связать с переменной? Если он представлен в виде...

Буфер обмена
Не могу понять как правильно написать скрипт. Задача скрипта при поступление информации в буфер обмена скрипт ищет совпадение в текстовом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru