как сделать скрипт AHK для перетаскивания текущего файла воспроизведения из winamp в другую программу?

Я пытаюсь написать скрипт, который перетаскивает текущий воспроизводимый файл из Winamp в Tabbles (программное обеспечение для тегов файлов http://tabbles.net ) Я нашел этот пример, но он не очень помог: http://www.autohotkey.com/board/topic/41467-make-ahk-drop-files-into-other-applications/

Как вы создаете событие перетаскивания файла (например, «перетаскивание» без перетаскивания) в программе, если у вас есть путь к файлу? Спасибо.


person Mike Rotchy    schedule 15.06.2013    source источник
comment
Пожалуйста, опубликуйте свой код и опишите, где он не удался. Кроме того, какую версию AHK вы используете?   -  person MCL    schedule 16.06.2013
comment
Бьюсь об заклад, вам не нужно имитировать пользовательский ввод. Возможно, достаточно будет запустить .exe с вашим файлом в качестве стартового параметра. Вы проверили документы для способов автоматизации вашего процесса?   -  person MCL    schedule 16.06.2013
comment
Просто мысли вслух. Вы можете использовать WinGetTitle и извлечь имя файла из заголовка Windows и использовать его для подачи во второе приложение. Попробуйте AHK Windows Spy, чтобы узнать, предоставляет ли заголовок Windows достаточно данных для извлечения воспроизводимого в данный момент файла.   -  person Robert Ilbrink    schedule 16.06.2013


Ответы (1)


Если вы хотите эмулировать действие перетаскивания без фактического выполнения MouseClickDrag, вы можете использовать следующий код:

; Drop test.txt into an *existing* notepad window
; Modify the class to match Tabbles window class
PostMessage, 0x233, HDrop("C:\test.txt"), 0,, ahk_class Notepad

HDrop(fnames,x=0,y=0) { 
   fns:=RegExReplace(fnames,"\n$") 
   fns:=RegExReplace(fns,"^\n") 
   hDrop:=DllCall("GlobalAlloc","UInt",0x42,"UPtr",20+StrLen(fns)+2) 
   p:=DllCall("GlobalLock","UPtr",hDrop) 
   NumPut(20, p+0)  ;offset 
   NumPut(x,  p+4)  ;pt.x 
   NumPut(y,  p+8)  ;pt.y 
   NumPut(0,  p+12) ;fNC 
   NumPut(0,  p+16) ;fWide 
   p2:=p+20 
   Loop,Parse,fns,`n,`r 
   { 
      DllCall("RtlMoveMemory","UPtr",p2,"AStr",A_LoopField,"UPtr",StrLen(A_LoopField)) 
      p2+=StrLen(A_LoopField)+1 
   } 
   DllCall("GlobalUnlock","UPtr",hDrop) 
   Return hDrop 
}

Проверено в AHK_L. Дайте мне знать, если это помогло!

person Elliot DeNolf    schedule 18.06.2013
comment
Спасибо, Эллиот, это работает! Проблема заключалась в том, что я использовал Windows 8. Как только я попробовал это в Win7, все пошло гладко. Почему-то не работает в Win8. - person Mike Rotchy; 19.06.2013
comment
Теперь, если бы я только мог найти более элегантное решение копирования пути к файлу из Winamp. Прямо сейчас мне нужно щелкнуть и выбрать файл в списке воспроизведения, а затем запустить скрипт, который делает: Ctr+E (открывает окно редактирования списка воспроизведения), Ctr+C (копирует путь к файлу), Esc (закрывает окно). С помощью AHK WindowSpy я обнаружил, что Winamp отображает только информацию тега ID3 воспроизводимого файла, а не путь. - person Mike Rotchy; 19.06.2013
comment
@MCL Программное обеспечение Tabbles не принимает параметры, я попробовал это первым. Я использую AHK_L, когда закончу, опубликую скрипт, спасибо - person Mike Rotchy; 19.06.2013