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

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

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

> Описание: Работа с буфером обмена
Zireael
Отправлено: 03 Мая, 2023 - 23:51:04
Post Id



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


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




Пример как записать в буфер список файлов/папок.
Это тоже самое что в проводнике выделить нужные файлы, скопировать их в буфер.
Если нужно можно вставить куда требуется.
CODE:
#define CF_HDROP 15
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, "PathFileExists", "PathFileExistsA", "Shlwapi.dll");
external(INT, "memset", "memset", "msvcrt.dll");


// путь к файлам, папкам
string s[10] = {
"C:\test1.txt",
"C:\Image",
"D:\123.ini",
"C:\123.txt",
"D:\image2"
};


write_clipboard(#s[0], 5); // передаём в функцию указатель на массив и количество путей


function write_clipboard(string #Path, int Count)
{
if(Count<1){ messagebox("Количество должно быть больше 0"); return; }

for(int i=0; i<Count; i++)
{
if(Path[i]==""){ messagebox("Путь не может быть пустой строкой"); return; }
if(PathFileExists(Path[i])==0){ messagebox("Путь не действителен^r^n"+Path[i]); return;}
regexreplace(-1, #Path[i], Path[i], "\\+", "\");
regexreplace(-1, #Path[i], Path[i], "\\", "\\");
}

int Len=20;
for(i=0; i<Count; i++) Len = Len + size(Path[i]) + 2;

if(OpenClipboard(gethwnd()))
{
EmptyClipboard();

int hMem=GlobalAlloc(0, Len);
int Mem = GlobalLock(hMem);
memset(Mem, 0, Len);
writeaddress(20, Mem);

Len=20;
for(i=0; i<Count; i++)
{
writeaddress(Path[i], Mem + Len);
Len = Len + size(Path[i]) + 1;
}

GlobalUnlock(Mem);
if(SetClipboardData(CF_HDROP, hMem)==0)messagebox("Не удалось записать данные в буфер");

GlobalFree(hMem);
CloseClipboard();
}
else messagebox("Буфер не открылся");
}
 
 Top
resident
Отправлено: 22 Марта, 2024 - 16:24:49
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 72
Дата рег-ции: Янв. 2023  
Репутация: 0




Первый раз записывает в буфер и вставляет нормально, второй раз в буфере оказывается текст в такой кодировке Àâàëîíñêîå æàðêîå èç êîçëÿòèíû (iso8859-1)
CODE:
for(i=0;i<num;i++) {
name=utf8toansi(obj.names[i]);
writeclipboard(name); sleep(100);
keydown(CONTROL); key("v"); keyup(CONTROL); sleep(2000);
}

(Отредактировано автором: 22 Марта, 2024 - 16:25:40)

 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


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




Powered by