Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 3.06 Работа с буфером обмена

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

11. Zireael - 03 Мая, 2023 - 15:51:04 - перейти к сообщению
Пример как записать в буфер список файлов/папок.
Это тоже самое что в проводнике выделить нужные файлы, скопировать их в буфер.
Если нужно можно вставить куда требуется.
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("Буфер не открылся");
}
12. resident - 22 Марта, 2024 - 09:24:49 - перейти к сообщению
Первый раз записывает в буфер и вставляет нормально, второй раз в буфере оказывается текст в такой кодировке Àâàëîíñêîå æàðêîå èç êîçëÿòèíû (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);
}

Powered by ExBB FM 1.0 Final