Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 5

Как сохранить буфер обмена в файл?

14.12.2009, 20:43. Показов 6557. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я начинающий программист на Builder C, я решил обратиться к Вам за помощью. Итак, задача такая: у меня есть некий перехваченный пакет, который сохраняется в буфер обмена, мне нужно сохранить этот пакет в текстовый файл на жесткий диск. Подскажите, буду признателен за любую помощь, заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2009, 20:43
Ответы с готовыми решениями:

Сохранение рисунка в буфер обмена и в файл
Привет! Подскажите, пожалуйста, как сохранить изображенное на TImage в файл и буфер обмена. Чтобы можно было вставлять в Word.

Как перехватить буфер обмена?
Подскажите, как сделать чтоб скопированную в буфер обмена картинку, или текст отправилялась на почту? к примеру на дельфине отправка...

Как Caption скопировать в буфер обмена
Добрый день! Есть программа которая считает значения полей Edit и выводит результат в Button1->Caption. Внимание вопрос. Как сделать...

6
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
14.12.2009, 20:53
Во первых, подобная тема уже есть, надо было прочитать правила форума, сделать поиск и задать свой вопрос тут

ну а во вторых, если в буфере только текст, то тут стопицот вариантов....

например:
C++
1
2
Memo1=Clipboard()->AsText; //в Memo текст из буфера
Memo1->Lines->SaveToFile(ExtractFileDir(Application->ExeName)+"\\1.txt"); //сохраняем в файл
не забудь #include <clipbrd.hpp>

вместо Memo1 можно использовать например TStringList
2
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 5
14.12.2009, 21:27  [ТС]
Добавлено через 30 минут
Что то Builder у меня ругается.
C++
1
[C++ Error] Unit1.cpp(145): E2451 Undefined symbol 'Memo1'
Хотя поле Memo1 существует. Вопрос у меня состоит немного вдругом: Как сохранить данные из выделенной мной области под буфер приема данных char Buffer [MAX_PACKET_SIZE] в файл на жесткий диск, а не из поля Memo1.
C++
1
2
#define MAX_PACKET_SIZE    0x10000
char Buffer[MAX_PACKET_SIZE];
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
14.12.2009, 22:06
попробуй так, не уверен конешн.. надо подумать... там еще можно по другому, но я так быстро не напишу (терпеть не могу на "чистом" с++ кодить)

C++
1
2
3
4
5
6
#define MAX_PACKET_SIZE    0x10000
char Buffer[MAX_PACKET_SIZE];
TStringList* list1= new TStringList();
AnsiString a1=Buffer;
list1->Add(a1);
list1->SaveToFile(ExtractFileDir(Application->ExeName)+"\\1.txt");
Добавлено через 15 минут
C++
1
2
3
4
5
6
7
8
FILE *F;
if ((F=fopen("1.txt", "wt"))==NULL)
{
ShowMessage("Error");
return;
}
fprintf(F, Buffer);
fclose(F);
вот так еще мона
1
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 5
14.12.2009, 22:17  [ТС]
Неробит вообще это должен быть сниффер который перехватывает пакеты и сохраняет их в отдельный файл. Ничего более как оставить код я не придумал, может это чем поможет.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <conio.h>
#include <stdio.h>
#include <winsock2.h>
#include <clipbrd.hpp>
#define SIO_RCVALL         0x98000001
#define MAX_PACKET_SIZE    0x10000
 
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// Буфер для приёма данных
char Buffer[MAX_PACKET_SIZE]; // 64 Kb
//Структура заголовка IP-пакета
 
typedef struct IPHeader {
  UCHAR   iph_verlen;   // версия и длина заголовка
  UCHAR   iph_tos;      // тип сервиса
  USHORT  iph_length;   // длина всего пакета
  USHORT  iph_id;       // Идентификация
  USHORT  iph_offset;   // флаги и смещения
  UCHAR   iph_ttl;      // время жизни пакета
  UCHAR   iph_protocol; // протокол
  USHORT  iph_xsum;     // контрольная сумма
  ULONG   iph_src;      // IP-адрес отправителя
  ULONG   iph_dest;     // IP-адрес назначения
} IPHeader;
char src[10];
char dest[10];
char ds[15];
unsigned short lowbyte;
unsigned short hibyte;
int fl;
 
DWORD WINAPI NetThread(LPVOID lpParam)
{    WSADATA wsaData;
    SOCKET  sServerListen,
        sock;
    struct sockaddr_in localaddr,
            clientaddr;
    HANDLE  hThread;
    DWORD   dwThreadId;
        char    str[1024];
    int ret;
 IN_ADDR sa1;
    int iSize;
    // Создание сокета
 
   int err = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (err != 0)
    {
        // Tell the user that WinSock not loaded
        return 0;
    }
 
    sServerListen = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
    if (sServerListen == SOCKET_ERROR)
    {
        MessageBox(0, "Can't load WinSock", "Error", 0);
        return 0;
    }
    // Заполнение структуры localaddr типа sockaddr_in
    localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    localaddr.sin_family = AF_INET;
 
    // Связывание адреса с переменной localaddr типа sockaddr_in
    if (bind(sServerListen, (struct sockaddr *)&localaddr,
        sizeof(localaddr)) == SOCKET_ERROR)
    {
        MessageBox(0, "Can't bind", "Error", 0);
        return 1;
    }
          // Включение promiscuous mode.
    // Запуск бесконечного цикла
        // Создание нового потока для работы с клиентом
   unsigned long        flag = 1;
   ioctlsocket(sock, SIO_RCVALL, &flag);// переход в неразборчивый режим
   sock=sServerListen;
  
    while(1)
    {
     char   str[1024]="";
        // Получение данных
        ret = recv(sock, Buffer, sizeof(Buffer), 0);
        // Проверка полученных данных
 
 
 
       if(( ret >= sizeof(IPHeader) ))
    {
      IPHeader* hdr = (IPHeader *)Buffer;
      //Начинаем разбор пакета...
    strcat(str,"Пакет: ");
    // Преобразуем в понятный вид адрес отправителя.
    sa1.s_addr = hdr->iph_src;
    strcat(str,inet_ntoa(sa1));
 
    // Преобразуем в понятный вид адрес получателя.
    strcat(str," К ");
    sa1.s_addr = hdr->iph_dest;
    strcat(str,inet_ntoa(sa1));
 
    // Вычисляем протокол. Полный список этих констант
    // содержится в файле winsock2.h
    strcat(str," Сетевой протокол: ");
    if(hdr->iph_protocol == IPPROTO_TCP) strcat(str,"TCP ");
        if(hdr->iph_protocol == IPPROTO_PUP) strcat(str,"PUP ");
        if(hdr->iph_protocol == IPPROTO_ICMP) strcat(str,"ICMP ");
        if(hdr->iph_protocol == IPPROTO_UDP) strcat(str,"UDP ");
 
// Вычисляем время жизни пакета.
    strcat(str, " Время жизни пакета: ");
        strcat(str,itoa(hdr->iph_ttl,"",10));
    //printf("\n");
 
 
      // Вычисляем размер. Так как в сети принят прямой порядок
    // байтов, а не обратный, то прийдётся поменять байты местами.
       Form1->Memo1->Lines->Add("Размер: ");
    //  lowbyte = hdr->iph_length>>8;
    //   hibyte = hdr->iph_length<<8;
    //  hibyte = hibyte + lowbyte;
    //  Form1->Memo1->Lines->Add(itoa(hibyte,"",10));
 
        TStringList* list1= new TStringList();
        AnsiString a1=Buffer;
        list1->Add(a1);
        list1->SaveToFile(ExtractFileDir(Application->ExeName)+"\\save.txt");
 
        //TS->SaveToFile("save.txt");
           // Form1->Memo1->Lines->SaveToFile("save.txt");
        Form1->Memo1->Lines->Add(str);
    }}}
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 WSADATA wsaData;
 HANDLE hThread;
    DWORD   dwThreadId;
char mText[255];
 
int flag;
int err = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (err != 0)
    {
        // Tell the user that WinSock not loaded
        return;
    }
Edit1->Text=itoa(wsaData.wVersion, mText, 10);
Edit2->Text=(itoa(wsaData.wHighVersion, mText, 10));
Edit3->Text=wsaData.szDescription;
Edit4->Text=wsaData.szSystemStatus;
WSACleanup();
hThread = CreateThread(NULL, 0, NetThread,
            (LPVOID)flag, 0, &dwThreadId);
 
}
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
15.12.2009, 15:22
короче я начал разбирать код... но собственно не пойму, что именно необходимо сохранять в текстовый файл. Причем это не функция сохраняет кусок Buffer (в смысле что не полностью), а просто в Buffer на момент сохранения (ставил контроль на 88 строчку и на 127) содержится "Е" и иногда "ЕД"... поэтому тут надо копать не от этого. Вообще не вижу того, что тут можно было бы сохранять (на первый взгляд)...

Цитата Сообщение от San4as
Т.к. идет привязка к hdr можно попробовать сохранять его, ведь именно из него я получаю все данные.(Только незнаю как сделать сохранение hdr, билдер ругается )
C++
1
IPHeader* hdr = (IPHeader *)Buffer;
я так понял тебе надо вытащить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef struct IPHeader {
  UCHAR   iph_verlen;   // версия и длина заголовка
  UCHAR   iph_tos;      // тип сервиса
  USHORT  iph_length;   // длина всего пакета
  USHORT  iph_id;       // Идентификация
  USHORT  iph_offset;   // флаги и смещения
  UCHAR   iph_ttl;      // время жизни пакета
  UCHAR   iph_protocol; // протокол
  USHORT  iph_xsum;     // контрольная сумма
  ULONG   iph_src;      // IP-адрес отправителя
  ULONG   iph_dest;     // IP-адрес назначения
} IPHeader;
 
эти значения?
0
0 / 0 / 0
Регистрация: 14.12.2009
Сообщений: 5
15.12.2009, 22:57  [ТС]
Мне нужно сохранить не какието данные о пакете, а именно сам пакет, таким каким он поступает на сетевую карту.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2009, 22:57
Помогаю со студенческими работами здесь

Как скопировать текст в буфер обмена?
есть к примеру текст Hello как его скопировать в буффер обмена? подскажите плз

Как скопировать текст в буфер обмена из Memo
Как скопировать текст в буфер обмена из Memo,У меня есть несколько Memo и мне нужно сделать кнопку котороя будет копировать текст из мемо...

Как узнать содержит ли буфер обмена данные формата CF_TEXT
Здравствуйте. А как на билдере будет буфер обмена? А конкретнее мне нужно узнать содержит ли буфер обмена данные формата CF_TEXT

Как сделать чтобы при нажатии на кнопку текст с Edit копировался в буфер обмена
А не скажите как сделать чтобы при нажатие на кнопку текст с Edit копировался в буфер обмена на Билдере

Буфер обмена
Как в билдере скопировать значение из буфера обмена и записать тудаже??


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru