Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Описание: Копирование и вставка смайликов в буфер обмена
Kibor
Отправлено: 02 Марта, 2024 - 07:05:20
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Кто знает как настроить копирование / вставку буфер обмена, что бы при работе с ним при чтение с файла сохраненного в нем смайлика и вставке в чат был именно смайлик.
C++ Или Кибор или вообще что то..

Нажмите для увеличения
 
 Top
Zireael
Отправлено: 02 Марта, 2024 - 17:55:11
Post Id



Пользователь
Эксперт


Просматривает форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




CODE:
#include "stdafx.h"
#include <windows.h>

void main()
{
const wchar_t* Text = L"Привет 😀 Hello"; // записать эту строку в буфер обмена

if (OpenClipboard(0))
{
EmptyClipboard();
int LengthBuffer = wcslen(Text) * 2 + 1;
HGLOBAL hgBuffer = GlobalAlloc(GMEM_FIXED, LengthBuffer);
if (hgBuffer != NULL)
{
wchar_t* chBuffer = (wchar_t*)GlobalLock(hgBuffer);
if (chBuffer != NULL)
{
wcscpy_s(chBuffer, LengthBuffer, Text);
GlobalUnlock(hgBuffer);
SetClipboardData(CF_UNICODETEXT, hgBuffer);
}
GlobalFree(hgBuffer);
}
CloseClipboard();
}
}
 
 Top
Kibor
Отправлено: 03 Марта, 2024 - 09:47:05
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Спасибо..
С параметрами функций понятно.
Не совсем у меня получилось ..

Копируем смайл

Вставляем в txt и сохраняем в utf8

В hex редакторе в фале

Нажмите для увеличения


Как программно прочитать этот файл и скопировать в буфер обмена что бы в итоге при вставке в чат был опять смайл?
 
 Top
Zireael
Отправлено: 03 Марта, 2024 - 11:08:13
Post Id



Пользователь
Эксперт


Просматривает форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




CODE:
#include "stdafx.h"
#include <windows.h>
#include <fstream>
using namespace std;

void main()
{
const char* Path = "C:\\111.txt"; // путь к файлу

// читаем файл
string S = "";
ifstream File(Path);
if (!File) return;

char c;
while (File.get(c)) S += c;
File.close();

// переводим в UTF-16
int count = MultiByteToWideChar(CP_UTF8, 0, S.c_str(), S.length(), NULL, 0);
wstring Text(count, 0);
MultiByteToWideChar(CP_UTF8, 0, S.c_str(), S.length(), &Text[0], count);

//MessageBox(0, Text.c_str(), L"Caption", MB_OK);

// копируем в буфер
if (OpenClipboard(0))
{
EmptyClipboard();
int LengthBuffer = wcslen(Text.c_str()) * 2 + 1;
HGLOBAL hgBuffer = GlobalAlloc(GMEM_FIXED, LengthBuffer);
if (hgBuffer != NULL)
{
wchar_t* chBuffer = (wchar_t*)GlobalLock(hgBuffer);
if (chBuffer != NULL)
{
wcscpy_s(chBuffer, LengthBuffer, Text.c_str());
GlobalUnlock(hgBuffer);
SetClipboardData(CF_UNICODETEXT, hgBuffer);
}
GlobalFree(hgBuffer);
}
CloseClipboard();
}
}
 
 Top
Kibor
Отправлено: 03 Марта, 2024 - 15:19:40
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Спасибо. Работает у меня почти без изменений.
(Добавление)
Для Кибор.
В файле сохранен этот смайл

🤩

CODE:
#define CP_UTF8 65001

#define CF_UNICODETEXT 13
#define GMEM_FIXED 0

external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");

external(INT, "OpenClipboard", "OpenClipboard", "User32.dll");
external(INT, "CloseClipboard", "CloseClipboard", "User32.dll");
external(INT, "EmptyClipboard", "EmptyClipboard", "User32.dll");
external(INT, "SetClipboardData", "SetClipboardData", "User32.dll");
external(INT, "GlobalAlloc", "GlobalAlloc", "Kernel32.dll");
external(INT, "GlobalLock", "GlobalLock", "Kernel32.dll");
external(INT, "GlobalUnlock", "GlobalUnlock", "Kernel32.dll");
external(INT, "GlobalFree", "GlobalFree", "Kernel32.dll");

char pr[100];
char rez[100];
int g=0;
if (fopen ("C:\Тел\Com.txt", "rb")!=0)
{
g=freadb(#pr[0], 100);
fclose();
}
pr[g]=0;
MultiByteToWideChar(CP_UTF8, 0, format(#pr[0]), g, address(#rez[0]), g);
rez[g]=0;

if(OpenClipboard(0))
{
EmptyClipboard();
int hMem = GlobalAlloc(GMEM_FIXED, g+2);
int Mem = GlobalLock(hMem);
writeaddress(format(#rez[0]), Mem);
GlobalUnlock(Mem);
SetClipboardData(CF_UNICODETEXT, hMem);
GlobalFree(hMem);
CloseClipboard();
}
 
 Top
Zireael
Отправлено: 03 Марта, 2024 - 20:44:46
Post Id



Пользователь
Эксперт


Просматривает форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
Для Кибор.

Не так. Не скопируется если в файле будет такая строка:
 Цитата:
Привет 😀 Hello
 
 Top
Kibor
Отправлено: 04 Марта, 2024 - 09:34:31
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 Zireael пишет:
Не так. Не скопируется если в файле будет такая строка:

Да. Знаю. Это мне мало важно было.
 
 Top
Zireael
Отправлено: 04 Марта, 2024 - 10:05:01
Post Id



Пользователь
Эксперт


Просматривает форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




CODE:
#define CP_UTF8 65001
#define CF_UNICODETEXT 13
#define GMEM_FIXED 0

external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");

external(INT, "OpenClipboard", "OpenClipboard", "User32.dll");
external(INT, "CloseClipboard", "CloseClipboard", "User32.dll");
external(INT, "EmptyClipboard", "EmptyClipboard", "User32.dll");
external(INT, "SetClipboardData", "SetClipboardData", "User32.dll");
external(INT, "GlobalAlloc", "GlobalAlloc", "Kernel32.dll");
external(INT, "GlobalLock", "GlobalLock", "Kernel32.dll");
external(INT, "GlobalUnlock", "GlobalUnlock", "Kernel32.dll");
external(INT, "GlobalFree", "GlobalFree", "Kernel32.dll");
external(INT, "wcscpy_s", "wcscpy_s", "msvcrt.dll");

char pr[100];
char rez[100];
int g=0;
if (fopen ("C:\111.txt", "rb")!=0)
{
g=freadb(#pr[0], 100);
fclose();
}
pr[g] = 0;

int count = MultiByteToWideChar(CP_UTF8, 0, address(#pr[0]), -1, 0, 0);
MultiByteToWideChar(CP_UTF8, 0, address(#pr[0]), -1, address(#rez[0]), count);

if(OpenClipboard(0))
{
EmptyClipboard();
int hMem = GlobalAlloc(GMEM_FIXED, count * 2 + 2);
int Mem = GlobalLock(hMem);
wcscpy_s(Mem, count * 2 + 2, address(#rez[0]));
GlobalUnlock(hMem);
SetClipboardData(CF_UNICODETEXT, hMem);
GlobalFree(hMem);
CloseClipboard();
}
 
 Top
Kibor
Отправлено: 04 Марта, 2024 - 10:23:41
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




+
В Кибор проще сделать чем в моей старой среде пятой.
Там то одна функция не поддерживается, то другая. Приходится через ассемблер подключать.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by