Получить строку из Editbox по Hwnd. Язык С

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

Статус темы:
Закрыта.
  1. Yareg

    Yareg Гость

    Изменяю программку для терминала сбора данных Symbol MC 3000.
    Программка считывает штрих код и выводит его в диалогом окне в EditBox. Я знаю только HWND этого окна. Как мне загнать текст из EditBox в строковую переменную? C++ не предлагать - программка на С
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Yareg+26:11:2007, 10:52 -->
    <span class="vbquote">(Yareg @ 26:11:2007, 10:52 )</span><!--QuoteEBegin-->C++ не предлагать - программка на С
    [snapback]87306" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    А причем здесь C или С++. Нужно использовать сервисы ОС. Я так понимаю, Windows у тебя. Тогда нужно обрабатывать сообщения WM_GETTEXT/WM_SETTEXT
     
  3. Yareg

    Yareg Гость

    Э-э. Пардон... Я данные в резудьтате получу в буфер lpszText? А что с ними делать потом? Как в строковую переменную их отдать?
     
  4. Yareg

    Yareg Гость

    А может мне можно использовать буфер, из которого в это окно данные и закидываются? Правда я не знаю как :-(
    Код (Text):
    ...
    char *barcode
    ...
    case E_SCN_SUCCESS:

    Edit_SetText(hctl_data, (LPTSTR)SCNBUF_GETDATA(lpScanBuffer));

    // Format label type as a hex constant for display

    wsprintf(szLabelType, TEXT("0x%.2X"), SCNBUF_GETLBLTYP(lpScanBuf));

    Edit_SetText(hctl_type, szLabelType);

    wsprintf(szLen, TEXT("%d"), SCNBUF_GETLEN(lpScanBuf));

    Edit_SetText(hctl_length, szLen);

    barcode = ...

    break;
    ...
     
  5. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Yareg+26:11:2007, 11:34 -->
    <span class="vbquote">(Yareg @ 26:11:2007, 11:34 )</span><!--QuoteEBegin-->Как в строковую переменную их отдать?
    [snapback]87316" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Строковая переменная - это строка в С? Не понимаю в чем проблема:
    Код (Text):
    char Buffer[100];
    SendMessage( hWnd, WM_GETTEXT, 100, (LPARAM)Buffer );
     
  6. Yareg

    Yareg Гость

    Почему-то закидывает только один первый символ.
    Я эту строчку потом в файл пишу - там только один символ...
     
  7. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Yareg+26:11:2007, 12:27 -->
    <span class="vbquote">(Yareg @ 26:11:2007, 12:27 )</span><!--QuoteEBegin-->Я эту строчку потом в файл пишу - там только один символ...
    [snapback]87323" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Проверь, какое количество символов возвращает SendMessage
     
  8. Yareg

    Yareg Гость

    Как?
    Я сдедлал так:
    char strBarcode[20];
    SendMessage(hctl_data, WM_GETTEXT, 20, (LPARAM)strBarcode);
    printf(strBarcode);

    вывелся только первый символ.

    Извини, что так туплю. Я сисадмин, привык к скриптовым языкам, на крайняк на T-SQL че-то делал, а меня тут грузят этим сканером. Все примеры в SDK на С. :-(
    Может по аське свяжемся? 315701199
     
  9. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Может, строка в UNICODE возвращается?
     
  10. Yareg

    Yareg Гость

    Действительно в юникоде
    теперь в переменную пишет. А как эту переменную в юникоде записать в файл?
     
  11. Yareg

    Yareg Гость

    А можно переделать переменную из юникода а ASCII?
     
  12. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Можно использовать функцию WideCharToMultiByte.
    Вот что про неё в MSDN написано

    Должно быть что-то типа такого:
    Код (Text):
     
    int wtoa(LPCWSTR w_str, LPSTR s_str, int len)
    {
    int ret = ::WideCharToMultiByte(CP_UTF8, 0, w_str, -1, NULL, 0, 0, 0);
    if(len >= ret)
    ::WideCharToMultiByte(CP_UTF8, 0, w_str, -1, s_str, len, 0, 0);

    return ret;
    }
     
  13. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Yareg+26:11:2007, 13:58 -->
    <span class="vbquote">(Yareg @ 26:11:2007, 13:58 )</span><!--QuoteEBegin-->А можно переделать переменную из юникода а ASCII?
    [snapback]87348" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    А смысл?
    <!--QuoteBegin-Yareg+26:11:2007, 13:42 -->
    <span class="vbquote">(Yareg @ 26:11:2007, 13:42 )</span><!--QuoteEBegin-->А как эту переменную в юникоде записать в файл?
    [snapback]87342" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Компилятора под рукой нет, что-то типа того:
    Код (Text):
    #include <tchar.h>
    #include <stdio.h>

    int _tmain()
    {
    TCHAR Value[20] = _T("Some value...\n");

    FILE* pFile = _tfopen( _T("c:\\some_file.txt"), _T("a") );
    if( pFile == NULL )
    {
    _tprintf( _T("Error - file open") );
    return 1;
    }

    if( _ftprintf( pFile, _T("%s"), Value ) != _tcslen( Value ) )
    _tprintf( _T("Error - write to file") );

    fclose( pFile );
    return 0;
    }
     
  14. Yareg

    Yareg Гость

    Сделал не совсем так. Получилось. Правда кривовато, да и файл нужен не в Юникоде. В файле получается такая байда:
    4 6 0 7 0 4 9 6 3 0 2 7 2 ?Р| „ш
     dщ ?S Ђе ` E  S І?S ¦ ъ$щ dщ ІE $щ T
    b a r c o d e . t x t a % d 0 x % . 2 X S C A N _ R e a d L a b e l M s g % s % s Ђoвш{0 4   ` 0 2 3 9 4 2 4 3 3 4 7 7  ?Р| „ш
     dщ ?S Ђе ` E  S gЋ?S ¦ ъ$щ dщ gЋE
    b a r c o d e . t x t a % d 0 x % . 2 X S C A N _ R e a d L a b e l M s g % s % s Ђoвш{0
    а хочется:
    4 6 0 7 0 4 9 6 3 0 2 7 2
    0 2 3 9 4 2 4 3 3 4 7 7
    и т.д.
     
  15. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Yareg+27:11:2007, 07:13 -->
    <span class="vbquote">(Yareg @ 27:11:2007, 07:13 )</span><!--QuoteEBegin-->Правда кривовато, да и файл нужен не в Юникоде. В файле получается такая байда
    [snapback]87448" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Знаешь, не видя твоего кода, получается лечение запоя по фотографии
     
  16. Yareg

    Yareg Гость

    Код (Text):
    int Count;
    TCHAR strBarcode[14]
    FILE *fr;

    Count = (int)SendMessage(hctl_data, WM_GETTEXT, 14, (LPARAM)strBarcode);
    fr = _tfopen( _T("barcode.txt"),_T("a") );
    if (NULL != fr)
    {
    fwrite(strBarcode, Count, Count, fr);
    fwrite("\n", Count, Count, fr);
    fclose(fr);
    }
     
  17. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Код (Text):
        int Count;
    WCHAR strBarcode[14];
    FILE *fr;

    // Размер в символах, а не в байтах
    Count = (int)::SendMessage(wnd, WM_GETTEXT, 14, (LPARAM)strBarcode);
    fr = _tfopen( _T("barcode.txt"),_T("a") );
    if (NULL != fr)
    {
    fwrite(strBarcode, Count*2, 1, fr);//*2 если была получена UNICODE строка
    fwrite("\n", strlen("\n"), 1, fr);
    fclose(fr);
    }
    Строка будет добавлена в конец файла barcode.txt.
    В fwrite 3-ий параметр определяет сколько раз в файл будет записан буфер из 1-го параметра.
     
  18. Yareg

    Yareg Гость

    <!--QuoteBegin-SunSanych+27:11:2007, 14:58 -->
    <span class="vbquote">(SunSanych @ 27:11:2007, 14:58 )</span><!--QuoteEBegin-->Перед запуском удалить файл barcode.txt или установить в _tfopen чтобы он всегда создавался заново.
    [snapback]87486" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Но мне нужно чтобы в него дописывалось
     
  19. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Это я не туда посмотрел, не обращай внимание, уже исправил.
     
  20. Yareg

    Yareg Гость

    Но в итоге файл получается все равно в юникоде. А нужно не в юникоде
     
Загрузка...
Статус темы:
Закрыта.

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