консоль и буфер обмена

Тема в разделе "Общие вопросы по С и С++", создана пользователем Seva, 5 май 2007.

  1. Seva

    Seva Гость

    вопрос в следующем: нужно, чтобы при открытии консольной программы в неё вставала строка из буфера обмена, затем, при нажатии <enter> строка обрабатывается программой и результат нужно "забить" в буфер обмена, пожалуйста, скажите, как реализовать работу с буфером обмена? большое спасибо!
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
  3. Seva

    Seva Гость

    Спасибо! вроде, так и делал, но при компиляции почему-то ошибок много, мож, библиотеку какую надо включить?
     
  4. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Может.
    Тонкий намек: текст ошибки позволит надеяться на более точный совет.
    Намек потолще: если бы ты все это включил в первую формулировку, сэкономил бы время и себе и окружающим.
     
  5. Seva

    Seva Гость

    простите тормоза! вот, написал код, всё по книжке-самоучителю:
    #include<iostream>
    #include<string>
    using namespace std;
    int main(void)
    {
    string fromClipboard;
    OpenClipboard();
    {
    HANDLE; hData=GetClipboardData(CF_TEXT);
    char* chBuffer=((char*)GlobalLock(nData));
    fromClipboard=chBuffer;
    GlobalUnlock(nData);
    CloseClipboard();
    }
    cout<<fromClipboard<<endl;
    return 0;
    }
    при компиляции-9 ошибок:
    все undeclared identifier:
    1. OpenClipboard
    2. HANDLE'
    3,4. hData (2 раза-9 и 10 строки)
    5. etClipboardData
    6. CF_TEXT
    7. GlobalLock
    8. GlobalUnlock
    9. CloseClipboard
    почему так происходит? может, библиотеку надо какую включить? спасибо за помощь начинающему программисту!
     
  6. North

    North Гость

    HANDLE; hData=GetClipboardData(CF_TEXT); // точку с запятой надо убрать B)

    далее
    обязательно включение
    #include <windows.h>
    спрашиваем MSDN про GetClipboardData (http://msdn2.microsoft.com/en-us/library/ms649039.aspx)
    в конце страницы примерно следующее:

    unction InformationMinimum DLL Version user32.dll
    Header Declared in Winuser.h, include Windows.h
    Import library User32.lib
    Minimum operating systems Windows 95, Windows NT 3.1
    Unicode Implemented as Unicode version.

    т.е. необходимо подключить биилиотеку "User32.lib"
    делается так
    #pragma comment(lib, "user32.lib")
     
  7. Seva

    Seva Гость

    ОГРОМНОЕ (и толстое) СПАСИБО!!! помогло! даже как-то стал разбираться в этом сайте (http://msdn.microsoft.com)... обучение продолжается!
     
  8. Seva

    Seva Гость

    думал, что дальше сам разберусь, наивный, в общем, написал код, который должен выводить текс в буфер...:
    #include<iostream>
    #include<string>
    #include <windows.h>

    #pragma comment(lib, "user32.lib")
    #pragma comment(lib, "Framedyn.lib")
    using namespace std;
    int main(void)
    {
    string source;

    if(OpenClipboard(0))
    {
    HGLOBAL hgBuffer;
    char* chBuffer;
    EmptyClipboard();
    hgBuffer= GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1);
    chBuffer= (char*)GlobalLock(hgBuffer);
    strcpy(chBuffer, LPCSTR(source));
    GlobalUnlock(hgBuffer);
    SetClipboardData(CF_TEXT, hgBuffer);
    CloseClipboard();
    }
    return 0;
    }
    при компиляции выдаёт 2 ошибки:
    error C2039: 'GetLength' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
    C:\Program Files\Microsoft Visual Studio\MyProjects\ðåîáìåí\buffer.cpp(19) : error C2440: 'type cast' : cannot convert from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *'
    No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    Error executing cl.exe.
    уже не один час просидел в мастдае- никак не пойму в чём дело, уже и библиотеки добавил, которые на мастдае и нашёл, а всё равно не пойму- почему компилятор не может обратиться по адресу..., почему не может конвертировать и т. д.? пожалуйста, помогите разобраться, конечно, не жизненно важно, но всё-таки хотелось бы понять. на будущее, так сказать! спасибо! пс. а что означает последняя строка в списке ошибок? а то пишет, что ошибок- 2, а пишет-то, пишет!
     
  9. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    std::string не реализует метода GetLength. дли строки берется через size();
    LPCSTR(source) логично что такое приведение не будет рабоать. эзай source.c_str()
     
  10. Seva

    Seva Гость

    очередное СПАСИБО!!!
     
Загрузка...

Поделиться этой страницей