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

  • Автор темы Yareg
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Y

Yareg

#1
Изменяю программку для терминала сбора данных Symbol MC 3000.
Программка считывает штрих код и выводит его в диалогом окне в EditBox. Я знаю только HWND этого окна. Как мне загнать текст из EditBox в строковую переменную? C++ не предлагать - программка на С
 
04.09.2006
2 566
3
#2
<!--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
 
Y

Yareg

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

Yareg

#4
А может мне можно использовать буфер, из которого в это окно данные и закидываются? Правда я не знаю как :-(
Код:
...
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;
...
 
04.09.2006
2 566
3
#5
<!--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]
Строковая переменная - это строка в С? Не понимаю в чем проблема:
Код:
char Buffer[100];
SendMessage( hWnd, WM_GETTEXT, 100, (LPARAM)Buffer );
 
Y

Yareg

#6
Почему-то закидывает только один первый символ.
Я эту строчку потом в файл пишу - там только один символ...
 
04.09.2006
2 566
3
#7
<!--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
 
Y

Yareg

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

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

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

Yareg

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

SunSanych

Well-known member
28.06.2006
71
0
#12
А можно переделать переменную из юникода в ASCII?
Можно использовать функцию WideCharToMultiByte.
Вот что про неё в MSDN написано

Должно быть что-то типа такого:
Код:
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;
}
 
04.09.2006
2 566
3
#13
<!--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]
Компилятора под рукой нет, что-то типа того:
Код:
#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;
}
 
Y

Yareg

#14
А смысл?

Компилятора под рукой нет, что-то типа того:
Код:
#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;
}
Сделал не совсем так. Получилось. Правда кривовато, да и файл нужен не в Юникоде. В файле получается такая байда:
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
и т.д.
 
04.09.2006
2 566
3
#15
<!--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]
Знаешь, не видя твоего кода, получается лечение запоя по фотографии
 
Y

Yareg

#16
Код:
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);
}
 

SunSanych

Well-known member
28.06.2006
71
0
#17
Код:
	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-го параметра.
 
Y

Yareg

#18
<!--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]
Но мне нужно чтобы в него дописывалось
 

SunSanych

Well-known member
28.06.2006
71
0
#19
Перед запуском удалить файл barcode.txt или установить в _tfopen чтобы он всегда создавался заново.

Но мне нужно чтобы в него дописывалось
Это я не туда посмотрел, не обращай внимание, уже исправил.
 
Y

Yareg

#20
Но в итоге файл получается все равно в юникоде. А нужно не в юникоде
 
Статус
Закрыто для дальнейших ответов.