Что нового

Реализовать упрощеный интерфейс пользователя

Suppir

Продвинутый
Сообщения
967
Репутация
62
Программа сравнивает документы из двух выборок. Пользователю необходимо передать программе документы из этих двух выборок. У программы нет интерфейса, поэтому я решил передавать данные через буфер обмена.
1. Программа пишет "Скопируйте в буфер документы из первой выборки"
2. Пользователь выбирает все документы и нажимает CTRL+C
3. Программа читает переменную из буфера в массив
4. Затем программа пишет: "Скопируйте в буфер документы из второй выборки"
5. Пользователь выбирает все документы из второй выборки и нажимает CTRL+C
6. Программа засовывает переменную во второй массив.

Проблема между этапами 2 и 3. Как программе узнать, что в буфере обмена произошли изменения?
Я решил перед этапом 1 обнулять информацию в буфере, а потом делать проверку "если буфер не пуст, значит пользователь скопировал выборку". Это работает на маленьких выборках. Однако если выборка большая и копирование в буфер занимает несколько секунд, AutoIt не понимает, что операция по переносу выделенного в выборку еще не завершена.

Тогда я решил поставить условие - если курсор мыши имеет вид песочных часов (что случается при копировании в буфер большой выборки), то следует ждать. Однако, в одной из программ при копировании в буфер больших выборок песочных часов не появляется.

В общем, я в тупике :-\ Вот код функции:


Код:
ClipPut(" ")

TrayTip("Компаратор", "Скопируйте в буфер документы из первой выборки", 1)
sleep (3000)

while 1
	If ClipGet() <> " " Then ExitLoop
	sleep (100)	
Wend 

$K = StringSplit(Clipget(), @CRLF, 1)

ClipPut(" ")

TrayTip("Компаратор", "Теперь скопируйте в буфер документы из второй выборки", 1)

while 1
	If ClipGet() <> " " Then ExitLoop
	sleep (100)	
Wend 

$G = StringSplit(Clipget(), @CRLF, 1)


TrayTip("Компаратор", "Подбираю аналоги...", 1)
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Suppir [?]
Как программе узнать, что в буфере обмена произошли изменения?

А если сначала обнулить буфер, и далее ждать само нажатие Ctrl-C?
Если массив не содержит файлов - пользователь копировал не файлы.
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
После нажатия CTRL+c не факт, что буфер будет содержать информацию. Должна полностью осуществиться операция копирования в буфер, которая может занимать несколько секунд (может даже десятков).
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Возможно этот пример пригодится.
Без использования буфера обмена.
Код:
For $i = 1 To 2
$message = "Выделите " & $i & "-ю группу документов"	
$var = FileOpenDialog($message, @MyDocumentsDir, "Документы (*.doc)", 1 + 4 )

If @error Then
    MsgBox(48,"Внимание","Файлы не выбраны")
Else
    $var = StringReplace($var, "|", @CRLF)
    MsgBox(64, $i & "-я выборка","Выбрано: " & $var)
EndIf
Next


Только здесь первый $var (когда $i = 1) затрется вторым $var ($=2)
но в кач-ве примера вроде сойдет.
 
Верх