Author Topic: Поиск в указанной папке файла по названию с разблокировкой (Office 2016)  (Read 1935 times)

0 Members and 1 Guest are viewing this topic.

Axelenz

  • Освоившийся
  • **
  • Posts: 31
  • Парсинг сайтов, наполнение интернет-магазинов
    • View Profile
Кусок кода позволяет найти файлы (в папке загрузки) по одинаковому словосочетанию в названии, из них выбирается файл более новый, например: по дате (времени) в названии самого файла. С помощью горячих клавиш файл разблокируется (для Office 2016).
Работает для Windows 8.1, Office 2016.

Code: (clickermann) [Select]
//Закрыть окно Clickermann
WNDSTATE(WNDFIND("Редактор - C:\Clickermann\"), 0)
WAIT(1)


//------------------------- Начальные данные для поиска файла ------------------
$name = inputbox("Введи имя файла для поиска или используй по умолчанию:", "price_2018", 5)

HINTPOPUP($name, "Искать файл по имени:")
WAIT(2)

//Добавление "0" перед месяцем и датой, если они имеют длину в 1 знак
IF(STRLEN($_date_m) = 1)
   $_date_m = STRCONCAT("0", $_date_m)
END_IF

IF(STRLEN($_date_d) = 1)
   $_date_d = STRCONCAT("0", $_date_d)
END_IF

//Объединить в одну строку год, месяц, дату: "20180224"
$_date_ = STRCONCAT($_date_y, $_date_m, $_date_d)

HINTPOPUP($_date_, "Искать файл по дате:")
WAIT(2)


//------------------------- Цикл поиска нужного файла --------------------------
GETFILELIST($prices, "C:\Users\User\Downloads\*.xlsx")

$price = "Нет файлов с таким именем !"

FOR($n = 0, $n < ARRSIZE($prices))
   $price = "Нет нового файла !"
   //Поиск "однотипных" файлов, например: с одинаковым началом в названии
   IF(STRPOS($prices[$n], $name) = 1)
      //Поиск среди них "свежего" файла, например: по дате, по времени
      IF(STRPOS($prices[$n], $_date_) > 0)
         $price = $prices[$n]
         $n = ARRSIZE($prices)
      END_IF
   END_IF
END_CYC

//Если искомого файла "Нет" - останов
SWITCH(STRPOS($price, "Нет"))
CASE(1)
   HINTPOPUP($price, "Файл НЕ найден:")
   WAIT(3)
   HALT
DEFAULT
   HINTPOPUP($price, "Файл найден:")
   WAIT(2)
END_SWITCH


//------------------------- Разблокировть файл (Office 2016) -------------------
//------------------------- Работа в проводнике Windows
EXECUTE("C:\Windows\explorer.exe\")
WAIT(1)
WNDSETINFO(WNDFIND("Этот компьютер"), 0, 0, 1440, 862)
WAITMS(500)

//Переключение языка на RU
SETKBLAYOUT(WNDFIND("Этот компьютер"), 1049)
WAIT(1)

//Папка загрузки
KEYDOWN(#F4)
WAITMS(100)

KEYDOWN(#CTRL)
WAITMS(50)
KEYPRESS(#A)
WAITMS(50)
KEYUP(#CTRL)
WAITMS(100)

//Вставить путь к папке. Имя пользователя: "User"
TOCLIP("C:\Users\User\Downloads\")

KEYDOWN(#CTRL)
WAITMS(50)
KEYPRESS(#V)
WAITMS(50)
KEYUP(#CTRL)
WAITMS(300)

KEYPRESS(#ENTER)
WAIT(1)

//Окно поиска
KEYDOWN(#CTRL)
WAITMS(50)
KEYPRESS(#F)
WAITMS(50)
KEYUP(#CTRL)
WAITMS(500)

//Вставить имя найденного файла
TOCLIP($price)

KEYDOWN(#CTRL)
WAITMS(50)
KEYPRESS(#V)
WAITMS(50)
KEYUP(#CTRL)
WAIT(1)

KEYPRESS(#ENTER)
WAIT(1)
//------------------------- перейти к файлу и разблокировать
KEYPRESS(#DOWN)
WAIT(1)

KEYDOWN(#CTRL)
WAITMS(50)
KEYPRESS(#A)
WAITMS(50)
KEYUP(#CTRL)
WAIT(1)

KEYDOWN(#ALT)
WAITMS(50)
KEYPRESS(#ENTER)
WAITMS(50)
KEYUP(#ALT)
WAIT(1)

//Разблокировать: "З" (RU)
KEYPRESS(80)
WAITMS(100)

KEYPRESS(#ENTER)
WAIT(1)

//Закрыть проводник
KEYDOWN(#CTRL)
WAITMS(50)
KEYPRESS(#W)
WAITMS(50)
KEYUP(#CTRL)
WAIT(2)

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

Code: (clickermann) [Select]
//------------------------- Разблокировть файл (Office 2016) -------------------
EXECUTE("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe")
WAITMS(100)

KEYSTRING(STRCONCAT(" unblock-file -path C:\Users\User\Downloads\", $price))
KEYPRESS(#ENTER)
WAITMS(100)

KEYSTRING("exit")
KEYPRESS(#ENTER)
WAITMS(100)


« Last Edit: March 04, 2018, 12:41:16 AM by Axelenz »
"Можно бесконечно смотреть на три вещи: как течёт вода, как горит огонь и как Clickermann работает вместо тебя..."

Axelenz

  • Освоившийся
  • **
  • Posts: 31
  • Парсинг сайтов, наполнение интернет-магазинов
    • View Profile
Как вариант:

Code: (clickermann) [Select]
//Подпрограмма вставить данные из буфера в PS (нажать/отпустить правую клавишу мышки)
SUB(down_up)
   POSTMESSAGE($hwnd, 0x0204, 0, 0)
   WAITMS(50)
   POSTMESSAGE($hwnd, 0x0205, 0, 0)
   WAITMS(50)
   
   POSTMESSAGE($hwnd, 0x0100, 0x0D, 0)
   WAITMS(500)
END_SUB

$dir_file = STRCONCAT("C:\Users\User\Downloads\", $price)
$dir_date = STRCONCAT("D:\Price\", $_date_)
$dir_date_file = STRCONCAT($dir_date, "\price.xlsx")

EXECUTE("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe")
WAITMS(200)

$hwnd = WNDFIND("Windows PowerShell")

WNDPOS($hwnd, 0, 0)
WAITMS(200)

//Разблокировать файл
TOCLIP(STRCONCAT("Unblock-File -Path '", $dir_file, "'"))
down_up()

//Создать каталог
TOCLIP(STRCONCAT("New-Item -Path '", $dir_date, "' -ItemType 'directory'"))
down_up()

//Переместить файл в новый каталог и переименовать
TOCLIP(STRCONCAT("Move-Item -Path '", $dir_file, "' -Destination '", $dir_date_file, "'"))
down_up()

//Закрыть PowerShell
TOCLIP("exit")
down_up()
« Last Edit: March 09, 2018, 04:51:39 PM by Axelenz »
"Можно бесконечно смотреть на три вещи: как течёт вода, как горит огонь и как Clickermann работает вместо тебя..."