Что нового

Копирование файлов в буфер и эмуляция Ctrl+V

mv6677

Новичок
Сообщения
105
Репутация
0
Версия AutoIt: 3.3.14.0

Описание:
Здравствуйте.
Помогите решить задачу с быстрым однотипным копированием.

В папке "C:\каталог файлов\" лежат файлы 1.jpg, 1.doc и 1.xls
Как скриптом autoit - скопировать эти файлы - в буфер обмена и тут же сэмулировать нажатие клавиш Ctrl+V ?

Примечания:
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Относительно "тут же" не совсем понял , но скопировать и вставить в папку со скриптом можно так :
Код:
#include <Misc.au3>
$FileDir='C:\Каталог файлов\'
$sFile=$FileDir&'1.jpg|'&$FileDir&'1.doc|'&$FileDir&'1.xls'
_ClipPutFile($sFile)
ShellExecuteWait(@ScriptDir)
Send('^v')
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
ra4o
Спасибо, но почему-то не работает.

Файлы помещаются в буфер обмена, но не происходит эмуляции Ctrl+V
Вместо этого открывается папка (где лежит запущенный скрипт) в Проводнике. И все.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
открывается папка (где лежит запущенный скрипт) в Проводнике
Я не совсем понял - куда нужно копировать файлы , вот и копирую их в папку со скриптом...
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
ra4o
Так в этом и заключается вопрос.
У этих файлов нет точного конечного пути копирования.

Они должны с помощью Ctrl+V вставиться в ту папку или окно, которое активно на текущий момент.
В окно Тотал Коммандера, или в какую-то папку Проводника, которая на момент запуска скрипта - активна.

(Я запускаю скрипт не щелчком мыши по нему)
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Cделал всавку по HotKey "q" :
Код:
#include <Misc.au3>
HotKeySet('q', 'Go')

$FileDir = 'C:\Каталог файлов\'
$sFile = $FileDir & '1.jpg|' & $FileDir & '1.docx|' & $FileDir & '1.xlsx'
_ClipPutFile($sFile)

While 1
	Sleep(200)
WEnd

Func Go()
	$hwnd = WinGetHandle("[ACTIVE]")
	If IsHWnd($hwnd) Then
		ControlSend('', '',$hwnd,'^v')
	EndIf
EndFunc
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
ra4o
А как работает этот скрипт ?

Он ошибки - не выдает, но непонятно что он делает.

Я его запускаю - ничего не происходит.
Нажимаю на клавишу "q" - тоже ничего не происходит.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <Misc.au3>
#include <Array.au3>
#include <WinAPIEx.au3>

_FixAccelHotKeyLayout()

HotKeySet('+v', '_Paste')
HotKeySet('{ESC}', '_Exit')

Global $sDir = 'C:\Каталог файлов'
Global $aFiles[] = _
	[ _
		$sDir & '\1.jpg', _
		$sDir & '\1.docx', _
		$sDir & '\1.xlsx' _
	]

Global $sFiles = _ArrayToString($aFiles)
_ClipPutFile($sFiles)

While 1
    Sleep(10)
WEnd

Func _Exit()
	Exit
EndFunc

Func _Paste()
    ControlSend('[ACTIVE]', '', '', '+{ins}')
EndFunc

Func _FixAccelHotKeyLayout()
    Static $iKbrdLayout, $aKbrdLayouts
    
    If Execute('@exitMethod') <> '' Then
        Local $iUnLoad = 1
        
        For $i = 1 To Ubound($aKbrdLayouts) - 1
            If Hex($iKbrdLayout) = Hex('0x' & StringRight($aKbrdLayouts[$i], 4)) Then
                $iUnLoad = 0
                ExitLoop
            EndIf
        Next
        
        If $iUnLoad Then
            _WinAPI_UnloadKeyboardLayout($iKbrdLayout)
        EndIf
        
        Return
    EndIf
    
    $iKbrdLayout = 0x0409
    $aKbrdLayouts = _WinAPI_GetKeyboardLayoutList()
    _WinAPI_LoadKeyboardLayout($iKbrdLayout, $KLF_ACTIVATE)
    
    OnAutoItExitRegister('_FixAccelHotKeyLayout')
EndFunc


Вставка по Shift + v.
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
CreatoR
Этот скрипт производит копирование - по нажатию двух клавиш : Shift + v

Я имел ввиду автоматическое Ctrl+v (без моего участия) - при запуске скрипта.
То есть скрипт запускается, сам делает Ctrl+v, и тут же закрывается.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
А как работает этот скрипт ?
Запускаете скрипт и при нажатии горячей клавиши "q" скрипт будет копировать файлы из списка $sFile в активное окно.
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
xXx
Тоже не работает.
Даже в буфер обмена файлы не отправляет.


Добавлено:
Сообщение автоматически объединено:

ra4o [?]
Запускаете скрипт и при нажатии горячей клавиши "q" скрипт будет копировать файлы из списка $sFile в активное окно.

Скрипт запустил.
Он только скопировал файлы в буфер обмена.
На нажатие кнопки q - не реагирует.

Но я спрашивал - как автоматически копировать, не нажимая кнопки q.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
mv6677 [?]
скрипт запускается, сам делает Ctrl+v, и тут же закрывается

Код:
#include <Misc.au3>
#include <Array.au3>

Global $sDir = 'C:\Каталог файлов'
Global $aFiles[] = _
	[ _
		$sDir & '\1.jpg', _
		$sDir & '\1.docx', _
		$sDir & '\1.xlsx' _
	]

_ClipPutFile(_ArrayToString($aFiles))
ControlSend('[ACTIVE]', '', '', '+{ins}')


А как будет запускаться скрипт? если не из каталога куда нужно произвести копирование, то это тоже не сработает.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Но я спрашивал - как автоматически копировать, не нажимая кнопки q.
А как Вы будете определять момент , когда именно нужно копировать ? Уберите HotKey и Цикл, бутет так , как Вы хотите:
Код:
#include <Misc.au3>

$FileDir = 'C:\Каталог файлов\'
$sFile = $FileDir & '1.jpg|' & $FileDir & '1.docx|' & $FileDir & '1.xlsx'
_ClipPutFile($sFile)
$hwnd = WinGetHandle("[ACTIVE]")
If IsHWnd($hwnd) Then
	ControlSend('', '', $hwnd, '^v')
EndIf

У меня работает .
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
ra4o
Я запускаю ваш скрипт из total commander.
Происходит копирование указанных файлов в буфер обмена.

Но ctrl+V не происходит.
Не действует эта команда.
Ничего не добавляется в папку.
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
CreatoR
Я тестировал скрипт и с русской и с английской раскладкой.
Результат такой же.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
mv6677 [?]
Я тестировал скрипт и с русской и с английской раскладкой
Устанавливал её как раскладку по умолчанию?
А если использовать +{ins}?
И что с моим примером, пробовал его?
 
Верх