Перейти к содержанию

Работа с буфером обмена


RockHammer

Рекомендуемые сообщения

Пишу софт для себя. Так вот, почти завершил работу над софтом, но теперь мне нужно взаимодействовать с буфром обмена и, собственно, совершать запись в него.

Искал инфу в интернете, но там путевого почти нет. Многие рассуждают на эту тему, но или вскользь или не в том направлении, в котором мне нужно.

Итак, запись в буфер обмена. Текст. С++. Windows. Ночь. Улица. Фонарь. Аптека. 

Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

Уж как год наверное, если не больше - всё что то пытаешься изобрести, интересуешься подобными вещами в программировании,а не чем не делишься :)  Или это ток для показухи ??? 

Ссылка на комментарий
Поделиться на другие сайты

Уж как год наверное, если не больше - всё что то пытаешься изобрести, интересуешься подобными вещами в программировании,а не чем не делишься :)  Или это ток для показухи ??? 

Изобретаю. Но изобретаю для себя.

Что касается читов... Они не доведены до совершенства. Я выкладывал сюда на форум свои работы вот тут (одна из них). Но... Я могу лучше. Правда. Это не предел. Я пытаюсь улучшить качество своих работ, ищу новые способы взлома, оптимизации всего приложения, в итоге дохожу до с++. На этом языке я уже научился работать с процессом и писать простейшие читы. Правда теперь у меня нет мощного пк, чтобы реверсить игры. Если бы кто-то щедрый поделился сигнатурами, масками, адресами, байтами и прочим прочим для взлома - я бы на с радостью сварганил что-нибудь, используя новые навыки.

P.s. мой новый проект, где я применю все свои знания для взлома - будет взлом гта 5))))))) Я ооооочень давно об этом мечаю))
 

Не. Не для показухи, RockHammer, всё пытается взломать Пентагон. 

Этот проект процветает)))) Скоро мой связной выйдет на контакт, и я заполучу данные Пентагона))))

Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

offtopic.gif RockHammer, ты видел сколько у тебя сейчас сообщений. 666 - ничего не напоминает. Пора уже не Пентагон взламывать, а АД ^_^  
Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

offtopic.gif RockHammer, ты видел сколько у тебя сейчас сообщений. 666 - ничего не напоминает. Пора уже не Пентагон взламывать, а АД ^_^  

offtopic.gif  АХАХАХАХАХХАХАХАХАХХАХАХАХАХХАХА 
Изменено пользователем RockHammer
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Привет! "Нет ничего путевого?" Ты [издеваешься]?

Я тоже натыкался на это, но тут все по-английски и не понятно куда жать. Что из этого списка должно мне помочь?

Как это вообще использовать? Мб есть какой-нибудь алгоритм для работы с буфером? Поэтому и спросил тут.

Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

Самый простой и один из самых эффективнейших алгоритмов - подучить английский. На уровне чтения он совсем легкий, зато какие же килотонны документации ты сможешь прочесть!
Ссылка на комментарий
Поделиться на другие сайты

Самый простой и один из самых эффективнейших алгоритмов - подучить английский. На уровне чтения он совсем легкий, зато какие же килотонны документации ты сможешь прочесть!

Я же этого и пытаюсь избежать! :(

 

И все же, как взаимодействовать с буфером (писать в него)?

Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

Работа с буфером обмена (clipboard) / C++ для начинающих / C++
 
В Гугле поиск



C++ clipboard для начинающих


Функции для работы с буффером (в MSDN есть описание)

OpenClipBoardEmptyClipboardSetClipboardDataCloseClipboardGetClipboardData
Ссылка на комментарий
Поделиться на другие сайты

Пытаешься избежать изучения языка на минимально доступном уровне или пытаешься избежать чтения документации? А почему?

Уже не важно...

Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

Эта функция внизу, что ей передавать? Там как-то смутно написано на msdn, тем более на английском.

HANDLE WINAPI SetClipboardData(_In_      UINT uFormat,_In_opt_  HANDLE hMem);

Parameters uFormat [in]

Type: UINT

The clipboard format. This parameter can be a registered format or any of the standard clipboard formats. For more information, see Standard Clipboard Formats and Registered Clipboard Formats.

hMem [in, optional]

Type: HANDLE

A handle to the data in the specified format. This parameter can be NULL, indicating that the window provides data in the specified clipboard format (renders the format) upon request. If a window delays rendering, it must process the WM_RENDERFORMAT and WM_RENDERALLFORMATS messages.

If SetClipboardData succeeds, the system owns the object identified by the hMem parameter. The application may not write to or free the data once ownership has been transferred to the system, but it can lock and read from the data until the CloseClipboard function is called. (The memory must be unlocked before the Clipboard is closed.) If the hMem parameter identifies a memory object, the object must have been allocated using the function with the GMEM_MOVEABLE flag.

Return value

Type: HANDLE

If the function succeeds, the return value is the handle to the data.

If the function fails, the return value is NULL. To get extended error information, call GetLastError.

Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

Формат данных, который или один из стандартных, или же нестандартный (свой собственный), а так же указатель на кусок памяти с передаваемыми данными.
Ссылка на комментарий
Поделиться на другие сайты

Формат данных, который или один из стандартных, или же нестандартный (свой собственный), а так же указатель на кусок памяти с передаваемыми данными.

Я перевел это. Но я не знаю что это такое. Есть примеры работы с этой функцией?

 

Вывел, что ошибка на третьем шаге. В функции SetClipboardData. 

Вывел GetLastError, вывело цифру 6.

#include <Windows.h>#include <WinUser.h>#include <TlHelp32.h>#include <iostream>#include <conio.h>#include <cmath>using namespace std;int main(){	setlocale(LC_ALL, "Russian");	printf("Приступаем... ");	_getch();	BOOL WINAPI step1 = OpenClipboard(NULL);  // открываем	BOOL WINAPI step2 = EmptyClipboard();     // вычищаем	HANDLE WINAPI step3 = SetClipboardData(CF_TEXT, "asdasdw34rsed"); //пишем (тут ошибка)	BOOL WINAPI step4 = CloseClipboard();     // закрываем	if (step1 != NULL && step2 != NULL &&step3 != NULL && step4 != NULL) { //если все ОК, то..		cout << "Успешная запись!" << endl; // сообщенька!	}	else //иначе...	{		cout << "Oops... Somethink went wrong..."; // костылек тот ещё, правда? 		if (step1 == NULL){ cout << "Error at step 1 !"; }		else if (step2 == NULL) { cout << "Error at step 2 !"; }		else if (step3 == NULL) { cout << "Error at step 3 !"; } // вот эту строку вывело		else if (step4 == NULL) { cout << "Error at step 4 !"; }	}	_getch();	return false;}
Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

зовешь GlobalAlloc,GMEM_ZEROINIT,размер_текста+1

копируешь туда текст

SetClipboardData тот буфер

ps вместо GMEM_ZEROINIT можешь поставить 0

char buffer[] = "THIS IS SPAARTA";GlobalAlloc(GMEM_MOVEABLE, sizeof(buffer));

Я тебя правильно понял?

Ссылка на комментарий
Поделиться на другие сайты

 

почти. так на С повтори:

invoke GlobalAlloc,0,24mov esi,eaxcinvoke wcscpy,esi,blahinvoke OpenClipboard,0invoke EmptyClipboardinvoke SetClipboardData,CF_UNICODETEXT,esiinvoke CloseClipboardinvoke GlobalFree,esi....blah du 'qweqwe11212',0

Я не знаю асмы...

Ссылка на комментарий
Поделиться на другие сайты

Тут WINAPI используется. Язык не важен. Повтори последовательно вызов этих функций. Только с учетом синтаксиса Си.

Оокеу...

invoke GlobalAlloc,0,24mov esi,eaxcinvoke wcscpy,esi,blahinvoke OpenClipboard,0invoke EmptyClipboardinvoke SetClipboardData,CF_UNICODETEXT,esiinvoke CloseClipboardinvoke GlobalFree,esi....blah du 'qweqwe11212',0

Мой перевод:

GlobalAlloc(0,sizeof(buff));//что значит mov esi, eax ??????????//что значит wcscpy, esi, blah ???OpenClipboard(NULL);EmptyClipboard();SetClipboardData(CF_UNICODETEXT // что такое esi?CloseClipboardGlobalFree //что такое esi?//что значит blah du 'sdjfksdfjsdf', 0 ?
Изменено пользователем RockHammer
Ссылка на комментарий
Поделиться на другие сайты

Вот она - очередная польза в хотя бы поверхностном знании ассемблера и устройства работы Windows! WinAPI-функции возвращают результат в регистр EAX. Мы выделяем 24 байта, используя GlobalAlloc, результат (адрес) получаем в EAX. Затем копируем его в ESI. Затем открываем и очищаем буфер обмена. После - копируем туда текст, используя его адрес, который у нас скопирован был в ESI. Закрываем буфер обмена и возвращаем выделенную память системе, опять же, указав адрес этой памяти.
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.