Что нового

Закрытие процесса отправки письма

Alex1989

Новичок
Сообщения
6
Репутация
1
Версия AutoIt: v3

Описание: В опциях программы есть кнопка создания письма. Ну типа как создать и отправить письмо.
Ну и когда на неё жмёшь, в папке с программой создаётся файл текстовый с нужной для отправки информацией, и сразу же открывается программа связанная с отправкой писем. т.е. если это The BAT - откроется он, если офис 2010, то майкрософт оутлук (если не настроена программа для писем, то программа настройки её).
И собственно вопрос:
Какой должен быть код в AutoIt, чтобы закрыть этот самый процесс открытия почтовой программы? (текстовый файл должен создаться)

Примечания: Помогите плз. Заранее Спасибо, люди добрые :smile:
 

Mur

Осваивающий
Сообщения
132
Репутация
32
Может сначала заморозить процесс почтовой программы
http://autoit-script.ru/index.php/topic,2405.0.html
В это время скрипт будет копировать нужный файл,
а затем опять разморозить и\или завершить процесс?
http://autoit-script.ru/index.php?topic=9378.0
http://autoit-script.ru/index.php?topic=4003.0

..................................
OffTopic:
не заметил что я попал в "Cтол заказов", извините ^_^
 
Автор
A

Alex1989

Новичок
Сообщения
6
Репутация
1
Mur, так в том то и дело, что на одном ПК это может быть аутлук, на другом the bat а на третьем - ещё что-нибудь. и, как я понимаю (хоть совсем и не шарю в этом), PID у каждого процесса программы свой.

Просто проблема в чём. Жму на кнопку, текстовый файл создаётся. Затем начинается открытие почтовой программы. А на каждом ПК эта программа своя. т.е. если я предусмотрю закрытие аутлука, а у пользователя the bat стоит, то это роли не съиграет. А предусмотреть почти все программы почтовые далеко сложно
 

Mur

Осваивающий
Сообщения
132
Репутация
32
HKEY_CLASSES_ROOT\mailto\shell\open\command
В этой ветке реестра находится почтовый клиент "по-умолчанию"
Получить PId можно так:
http://autoit-script.ru/index.php?topic=2629.0
http://autoit-script.ru/index.php/topic,3589.0
в WinApiex.au3 это:
_WinAPI_GetProcessID
OffTopic:
для тех кто возьмётся будет немного полезным, наверное, то что они здесь найдут ;D
 
Автор
A

Alex1989

Новичок
Сообщения
6
Репутация
1
В общем, разобрался как сделать эту задачу, благодаря наводке Mur :smile:.
Правда, без BAT файла не обошлось. Хотя, может можно и проще.
Код на AutoIT:
Код:
WinWait("Моя Программа","выберите действие") ;-- Ожидаем окна нашей программы с кнопкой
Run("Close_hotmail.bat") ;-- Выполняем батник 1
ControlClick("Моя Программа","выберите действие","Button1") ;-- Жмём нашу кнопку с опцией отправки письма
Run('C:\Windows\Notepad.exe "C:\Program Files\Myprogram\sendtxtfile.txt" ') ;-- Открываем нужный текстовый файл, который создался нашей программой
Run("Open_hotmail.bat") ;-- Выполняем батник 2
;-- Ну а далее выполняем все процессы, которые хотели сделать в открывшемся окне

Сами батники приложены к сообщению.
Что делают батники: Батник 1 - экспортирует состояние пути реестра "HKEY_CLASSES_ROOT\mailto\shell\open\command" в файл и импортирует на место старого значения новое, пустое.
Батник 2 - импортирует в "HKEY_CLASSES_ROOT\mailto\shell\open\command" значение реестра, которое Батник 1 экспортировал.

Как всё запускать: создать в папке скрипт с текстом, данным выше (названия прог и окон под себя правим), в ту же папке разархивировать архив. запустить скрипт и пользоваться.

Если можно ещё проще - предлагайте варианты :smile:
 

Mur

Осваивающий
Сообщения
132
Репутация
32
Содержание батника 1
Код:
#Include <_RegFunc.au3>
FileDelete(@ScriptDir&'\output.reg')
Func
_RegExport(@ScriptDir&'\output.reg', 'HKEY_CLASSES_ROOT\mailto\shell\open\command')
EndFunc
Sleep(100)
RunWait(@ComSpec & ' /C regedit /s "' & @ScriptDir & '\input.reg"', '', @SW_HIDE)


Батник 2
Код:
RunWait(@ComSpec & ' /C regedit /s "' & @ScriptDir & '\output.reg"', '', @SW_HIDE)

Вроде так ^_^


Код:
#Include <_RegFunc.au3>

FileDelete(@ScriptDir&'\output.reg')
Func
_RegExport(@ScriptDir&'\output.reg', 'HKEY_CLASSES_ROOT\mailto\shell\open\command')
EndFunc
Sleep(100)
RunWait(@ComSpec & ' /C regedit /s "' & @ScriptDir & '\input.reg"', '', @SW_HIDE)
WinWait("Моя Программа","выберите действие") ;-- Ожидаем окна нашей программы с кнопкой
ControlClick("Моя Программа","выберите действие","Button1") ;-- Жмём нашу кнопку с опцией отправки письма
FileCopy("C:\Program Files\Myprogram\sendtxtfile.txt", "D:\sendtxtfile.txt")
RunWait(@ComSpec & ' /C regedit /s "' & @ScriptDir & '\output.reg"', '', @SW_HIDE)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Alex1989, Mur,
Зачем батники и т.д.? Почитайте справку.
Код:
$sReg = 'HKEY_CLASSES_ROOT\mailto\shell\open\command'
$sDefault = RegRead($sReg, '');читаем значение
MsgBox(64, 'По умолчанию', $sDefault)
RegWrite($sReg, '', 'REG_SZ', '');пишем пустое значение
MsgBox(64, 'Пусто', '">' & RegRead($sReg, '') & '<"');еще раз читаем значение
RegWrite($sReg, '', 'REG_SZ', $sDefault);пишем то, что было
MsgBox(64, 'Вернули умолчание', '">' & RegRead($sReg, '') & '<"'); и еще раз читаем значение
 

Mur

Осваивающий
Сообщения
132
Репутация
32
OffTopic:
Встречный вопрос - почему Mur?) Я просто перевёл команды из *.bat в *.au3... Один в один.
 
Верх