Очевидно в момент перетаскивания отслеживать состояние клавиш-модификаторов
Код:
...
var
State : TKeyboardState;
...
GetKeyboardState(State);
if ((State[vk_Shift] and 128) <> 0) then ... // Shift
if ((State[vk_Control] And 128) <> 0) then ... // Ctrl
if ((State[vk_Menu] and 128) <> 0) then ... // Alt
...
можно ещё определить "даунтизьм" левого или правого шифта
Код:
if ((Word(GetKeyState(VK_LSHIFT{VK_RSHIFT})) and $8000) <> 0) then ...
ну а дальше...
Создать ярлык для файла
Код:
uses ShlObj, ActiveX, ComObj;
procedure CreateShortCut(ShortCutName, Parameters, FileName: string);
var
ShellObject: IUnknown;
ShellLink: IShellLink;
PersistFile: IPersistFile;
FName: WideString;
begin
ShellObject := CreateComObject(CLSID_ShellLink);
ShellLink := ShellObject as IShellLink;
PersistFile := ShellObject as IPersistFile;
with ShellLink do
begin
SetArguments(PChar(Parameters));
SetPath(PChar(FileName));
SetWorkingDirectory(PChar(extractfilepath(FileName)));
FName := ShortCutName;
PersistFile.Save(PWChar(FName), False);
end;
end;
Отправить файл в корзину
Код:
...
var
Struct: TSHFileOpStruct;
Err: HRESULT;
begin
with Struct do
begin
Wnd := Handle;
wFunc := FO_DELETE;
pFrom := 'c:\1.txt';
pTo := nil;
fFlags := FOF_ALLOWUNDO;
fAnyOperationsAborted := True;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Err := SHFileOperation(Struct);
if Err <> S_OK then ShowMessage(SysErrorMessage(Err));
...