Эксперт
Покинул форум
Сообщений всего: 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("Буфер не открылся");
} |