Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Копирование и вставка смайликов в буфер обмена

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

1. Kibor - 01 Марта, 2024 - 23:05:20 - перейти к сообщению
Кто знает как настроить копирование / вставку буфер обмена, что бы при работе с ним при чтение с файла сохраненного в нем смайлика и вставке в чат был именно смайлик.
C++ Или Кибор или вообще что то..

Нажмите для увеличения
2. Zireael - 02 Марта, 2024 - 09:55:11 - перейти к сообщению
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();
}
}
3. Kibor - 03 Марта, 2024 - 01:47:05 - перейти к сообщению
Спасибо..
С параметрами функций понятно.
Не совсем у меня получилось ..

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

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

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

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


Как программно прочитать этот файл и скопировать в буфер обмена что бы в итоге при вставке в чат был опять смайл?
4. Zireael - 03 Марта, 2024 - 03:08:13 - перейти к сообщению
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();
}
}
5. Kibor - 03 Марта, 2024 - 07:19:40 - перейти к сообщению
Спасибо. Работает у меня почти без изменений.
(Добавление)
Для Кибор.
В файле сохранен этот смайл

🤩

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();
}
6. Zireael - 03 Марта, 2024 - 12:44:46 - перейти к сообщению
 Цитата:
Для Кибор.

Не так. Не скопируется если в файле будет такая строка:
 Цитата:
Привет 😀 Hello
7. Kibor - 04 Марта, 2024 - 01:34:31 - перейти к сообщению
 Zireael пишет:
Не так. Не скопируется если в файле будет такая строка:

Да. Знаю. Это мне мало важно было.
8. Zireael - 04 Марта, 2024 - 02:05:01 - перейти к сообщению
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();
}
9. Kibor - 04 Марта, 2024 - 02:23:41 - перейти к сообщению
+
В Кибор проще сделать чем в моей старой среде пятой.
Там то одна функция не поддерживается, то другая. Приходится через ассемблер подключать.

Powered by ExBB FM 1.0 Final