Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Робота с буффером обмена, как досать скопированые файлы? 
V
    Опции темы
Sergio
  Дата 9.10.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



Всем привет. 
Как достать с буфера обмена скопированые файлы?  Можно примерчик или линку  smile 
Спасибо.
PM MAIL ICQ   Вверх
azesmcar
Дата 10.10.2008, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



посмотри функции

OpenClipboard
GetClipboardData
CloseClipboard

остальное есть в примерах в MSDN

Это сообщение отредактировал(а) azesmcar - 10.10.2008, 07:07
PM   Вверх
Sergio
Дата 10.10.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



azesmcar, смотрел. Какой парамет использовать при GetClipboardData() ?
PM MAIL ICQ   Вверх
Earnest
Дата 10.10.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Тот, который был использован при SetClipboardData. Ты должен знать, чтО пытаешься извлечь. И сначала надо спросить, есть ли там оно.


--------------------
...
PM   Вверх
Sergio
Дата 10.10.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



Earnest, а есть функция которая вытянет даный тип? На подобии может GetCurrentClipboardType()
PM MAIL ICQ   Вверх
Earnest
Дата 11.10.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Так именно это и делает GetClipboardData - достает данные запрашиваемого типа. А IsClipboardFormatAvailable скажет, есть ли там нужные данные.


--------------------
...
PM   Вверх
Sergio
Дата 11.10.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



Earnest, еще вопрос: когда я выделяю файлы и используюю контрол + С, то какие даные попадают в буффер обмена?
Вот что написал:
Код

while (1)
{
    char * buffer;
    HWND windowPtr = GetForegroundWindow();

    if(OpenClipboard(windowPtr))
    {
        buffer = (char*)GetClipboardData(CF_TEXT);
        printf("Clipboard: %s\n", buffer);
    }

    CloseClipboard();
    CloseHandle(windowPtr);
}        

Вытягивает текст з активного окна. 
Но  не вытягивает файлы (пути) которые были скопированы. 
В чём проблема? Я думаю тип не подходящий. 

Это сообщение отредактировал(а) Sergio - 11.10.2008, 13:01
PM MAIL ICQ   Вверх
Earnest
Дата 11.10.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



А с какой радости он должен пути запоминать? Запоминается действительно текст из окна. А пути хранятся во внутренних данных, до которых ты вряд ли сумеешь добраться. И тип тут не причем - телепатов нет не только среди людей, но и среди программ. Если ты про окно эксплорера, то попробуй прочитать путь из поля-редактора вверху окна. Однако не факт, что он там есть... Наверняка можно добраться через интерфейс эксплорера... но как - без понятия.


--------------------
...
PM   Вверх
586
Дата 11.10.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Sergio, для HWND не нужно вызывать CloseHandle.
PM   Вверх
Sergio
  Дата 12.10.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: нет
Всего: 1



Нашёл ответ на мсдн но он написан не на С/С++. 
https://forums.microsoft.com/Forums/ShowPos...29&SiteID=1
Поэтому постарался переписать. Вроде всё правильно но имя в консоль непишется
smile
Код

printf("File Name: %s\n", filename); 

Вот что получилось:
Код

    while (1)
    {
        HANDLE buffer = NULL;
        UINT nFiles = 0;

        HWND windowPtr = GetForegroundWindow();        //FindWindowEx(0, 0, _T("CabinetWClass"), 0);
        
        if (IsClipboardFormatAvailable(CF_HDROP))
        {
            printf("CF_HDROP is available\n");

            if(OpenClipboard(windowPtr))
            {
                buffer = GetClipboardData(CF_HDROP);    
                nFiles = DragQueryFileA((HDROP)buffer, 0xFFFFFFFF, "", 0);

                printf("nFiles: %d\n", nFiles);

                for (int a = 0; a<nFiles; a++)
                {
                    char filename[MAX_PATH];
                    DragQueryFileA((HDROP)buffer, a, filename, strlen(filename));
                    printf("File Name: %s\n", filename);
                }
            }
            CloseClipboard();
        }
    }    


Это сообщение отредактировал(а) Sergio - 12.10.2008, 14:16
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.