I want to put a file on the clipboard so it can be pasted into explorer, something like this should work but I'm unsure how to put a pointer and a file path on the same memory allocation:
Code:
User32 [COLOR="#FF0000"]=[/COLOR] Library[COLOR="#FF0000"].[/COLOR]Load([COLOR="#800080"]"user32.dll"[/COLOR]); SetFile [COLOR="#FF0000"]=[/COLOR] [COLOR="#0000FF"]function[/COLOR](filepath) [COLOR="#0000FF"]local[/COLOR] t [COLOR="#FF0000"]=[/COLOR] filepath [COLOR="#FF0000"]..[/COLOR][COLOR="#800080"]"[COLOR="#800080"]\0[/COLOR]"[/COLOR] [COLOR="#0000FF"]if[/COLOR] User32[COLOR="#FF0000"].[/COLOR]OpenClipboard(Application[COLOR="#FF0000"].[/COLOR]GetWndHandle()) [COLOR="#FF0000"]==[/COLOR] [COLOR="#000000"]0[/COLOR] [COLOR="#0000FF"]then[/COLOR] [COLOR="#0000FF"]return[/COLOR] [COLOR="#0000FF"]end[/COLOR] [COLOR="#0000FF"]if[/COLOR] User32[COLOR="#FF0000"].[/COLOR]EmptyClipboard() [COLOR="#FF0000"]==[/COLOR] [COLOR="#000000"]0[/COLOR] [COLOR="#0000FF"]then[/COLOR] User32[COLOR="#FF0000"].[/COLOR]CloseClipboard() [COLOR="#0000FF"]return[/COLOR] [COLOR="#0000FF"]end[/COLOR] [COLOR="#0000FF"]local[/COLOR] h [COLOR="#FF0000"]=[/COLOR] Kernel32[COLOR="#FF0000"].[/COLOR]GlobalAlloc(0x42[COLOR="#FF0000"],[/COLOR]String[COLOR="#FF0000"].[/COLOR]Length(t) + [COLOR="#000000"]21[/COLOR]) [COLOR="#008000"]-- 0x42 = GMEM_MOVEABLE | GMEM_ZEROINIT[/COLOR] [COLOR="#0000FF"]if[/COLOR] h [COLOR="#FF0000"]==[/COLOR] [COLOR="#000000"]0[/COLOR] [COLOR="#0000FF"]then[/COLOR] User32[COLOR="#FF0000"].[/COLOR]CloseClipboard() [COLOR="#0000FF"]return[/COLOR] [COLOR="#0000FF"]end[/COLOR] [COLOR="#0000FF"]local[/COLOR] l [COLOR="#FF0000"]=[/COLOR] Kernel32[COLOR="#FF0000"].[/COLOR]GlobalLock(h) [COLOR="#0000FF"]if[/COLOR] l [COLOR="#FF0000"]==[/COLOR] [COLOR="#000000"]0[/COLOR] [COLOR="#0000FF"]then[/COLOR] User32[COLOR="#FF0000"].[/COLOR]CloseClipboard() [COLOR="#0000FF"]return[/COLOR] [COLOR="#0000FF"]end[/COLOR] [COLOR="#008000"]-- http://msdn.microsoft.com/en-us/library/windows/desktop/bb773269%28v=vs.85%29.aspx[/COLOR] [COLOR="#008000"]-- MemoryEx.String needs filling with DROPFILES.pFiles for first 20 bytes[/COLOR] [COLOR="#008000"]-- then the 'filepath' is to fill the remaining bytes in the buffer[/COLOR] MemoryEx[COLOR="#FF0000"].[/COLOR]String(l[COLOR="#FF0000"],[/COLOR]-[COLOR="#000000"]1[/COLOR][COLOR="#FF0000"],[/COLOR]MEMEX_ASCII[COLOR="#FF0000"],[/COLOR]t) Kernel32[COLOR="#FF0000"].[/COLOR]GlobalUnlock(h) User32[COLOR="#FF0000"].[/COLOR]SetClipboardData([COLOR="#000000"]15[/COLOR][COLOR="#FF0000"],[/COLOR]h) User32[COLOR="#FF0000"].[/COLOR]CloseClipboard() [COLOR="#0000FF"]end[/COLOR];
Comment