Программа сравнивает документы из двух выборок. Пользователю необходимо передать программе документы из этих двух выборок. У программы нет интерфейса, поэтому я решил передавать данные через буфер обмена.
1. Программа пишет "Скопируйте в буфер документы из первой выборки"
2. Пользователь выбирает все документы и нажимает CTRL+C
3. Программа читает переменную из буфера в массив
4. Затем программа пишет: "Скопируйте в буфер документы из второй выборки"
5. Пользователь выбирает все документы из второй выборки и нажимает CTRL+C
6. Программа засовывает переменную во второй массив.
Проблема между этапами 2 и 3. Как программе узнать, что в буфере обмена произошли изменения?
Я решил перед этапом 1 обнулять информацию в буфере, а потом делать проверку "если буфер не пуст, значит пользователь скопировал выборку". Это работает на маленьких выборках. Однако если выборка большая и копирование в буфер занимает несколько секунд, AutoIt не понимает, что операция по переносу выделенного в выборку еще не завершена.
Тогда я решил поставить условие - если курсор мыши имеет вид песочных часов (что случается при копировании в буфер большой выборки), то следует ждать. Однако, в одной из программ при копировании в буфер больших выборок песочных часов не появляется.
В общем, я в тупике :-\ Вот код функции:
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)