오늘은 아래 포스팅에 이어서 powershell 을 이용하여 아웃룩에서 메일 보내는 방법에 대해 알아보려 합니다.

 

http://iamaman.tistory.com/1638



보통 회사에서 Microsoft Office 를 많이들 사용 하실 겁니다.

 

Powershell 에서는 Com Object 를 사용 할 수 있고~ Com object 를 사용하면 MS office 제품군에 대한 자동화가 가능 합니다.

 

따라서 outlook 도 자동화가 됩니다.

 

아래와 같이 간단하게 메일을 보낼 수 있습니다.

 

$textv =@"

메일 테스트 

메일 잘 가나요?

"@

 

$subject = "서버의 업데이트가 안 되었습니다."

 

$obj = New-Object -ComObject Outlook.Application

 

$newMail = $obj.CreateItem(0)

$newMail.Subject = "메일 제목"

$newMail.Body = $textv

$newMail.To = "메일 받는 사람 주소"

 

$newMail.Send()

 

 

Newmail Object 관련 Property 들은 아래 주소에서 확인 할 수 있습니다.

 

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.mailitem_properties.aspx

 

위와 같은 방법을 사용하면 반복적으로 메일을 보내야 할 때 매우 편하게 보낼 수 있을 겁니다.


ImageMagick 은 이름에서도 알 수 있는 바와 같이 image 파일들에 대해 여러 효과를 낼 수 있는 툴인데요~

   

아래 포스팅에서 소개 드렸다시피 저는 캡쳐 한 이미지들로 GIF 파일을 만드는데 종종 사용하곤 했습니다. 

 

2012/03/22 - [유틸] - ImageMagick 으로 GIF 파일 만들기

 

그런데 아래 Autohotkey 포럼을 찾아보니 Autohotkey 에서 Com Object 를 통해 ImageMagick 을 사용할 수 있더군요.

 

현재 저는 Autohotkey unicode 32 비트를 사용하고 있어서 ImageMagick도 아래 주소에서 32 비트 dll 버전을 설치 했습니다.

 

http://www.imagemagick.org/script/binary-releases.php#windows


설치 중간에 아래 그림과 같은 설정 부분에서 OLE Control 설치 부분을 체크 했습니다.  

 

아래 포럼 주소에 imageMagick 사용과 관련한 예제가 나와있는데~


http://www.autohotkey.com/board/topic/56987-com-object-reference-autohotkey-v11/page-3#entry373462

 

여러 사진들을 사용하여 썸네일 이미지등을 만들 때 대단히 유용해 보이더군요.

 

oI := ComObjCreate("ImageMagickObject.MagickImage.1")

 

imgs := Object()

 

Loop, 16 {

filename := "plasma" . A_Index . ".jpg"

oI.convert("-size", "200x200", "plasma:", filename)

imgs.Insert(filename)

}

 

imgs.Insert("montage.jpg")

stitch(oI, imgs*)

 

stitch(obj, params*) {

obj.montage("-geometry", "+0+0", params*)

}

 

oI.convert("montage.jpg", "-verbose", "info:image_info.txt")

oI.convert("montage.jpg", "-define", "histogram:unique-colors=false", "histogram:histogram.gif") ; create histogram

FileRead, info, image_info.txt

FileDelete, image_info.txt

MsgBox % info

 

위 코드를 돌려보시면~ plasma1.jpg, plasma2.jpg, plasma3.jpg … 등과 같은 파일이 생성되고~ 마지막에 아래 그림과 같이

 

histogram.gif 파일과~

각 이미지들에 대한 모음인 montage.jpg 파일이 생성됩니다.



Autohotkey 를 사용하면서 Com Object를 사용하면 좀더 많은 작업들을 할 수 가 있습니다.

 

아래 포스팅에서 소개 드렸던 Word, Excel 자동화부터~ ScriptControl 등등 정말 많은 일들을 할 수 있더군요. 

 


2014/03/23 - [programming language/Autohotkey] - Autohotkey ScriptControl 을 이용하여 VBScript, JScript실행하기


2012/08/16 - [programming language/Autohotkey] - Autohotkey_L을 이용한 MS Word 자동화



좀더 자세한 소개는 아래 주소에서 확인해 보시기 바랍니다.

 

http://www.autohotkey.com/board/topic/56987-com-object-reference-autohotkey-v11/

 

오늘은 간단하게 HTMLfile Com Object를 사용하여 www.google.com 의 링크를 저장하는 예를 소개해 보려 합니다.

 

코드는 아래 주소의 HTMLfile 소개 코드를 사용했습니다.


 

http://www.autohotkey.com/board/topic/56987-com-object-reference-autohotkey-v11/#entry358974

 

; download the webpage source

URLDownloadToFile, http://www.google.com, Google_HTML

FileRead, html, Google_HTML

FileDelete, Google_HTML

 

; write the Google Source to an HTMLfile

doc := ComObjCreate("HTMLfile")

doc.write(html)

 

; loop through all the links

links := doc.links

while (A_Index<=links.length, i:=A_Index-1)

list .= i ") " links[i].innerText "`nURL: " links[i].href "`n`n"

 

; some URLs have "about:" rather than the domain

StringReplace, list, list, about:, http://www.google.com, All

 

MsgBox, %list%

 

위 코드를 실행해보면 다음과 같이 구글의 링크들을 다 불러 올 수 있다는 것을 확인 할 수 있습니다.

 

이는 HTMLfile Com Object 를 사용하면 웹 페이지의 Document Object 를 사용하게 됩니다.

 

Document Object 에 대해서는 아래 주소 참조바랍니다.


 

http://msdn.microsoft.com/en-us/library/ms536437

 

http://www.w3schools.com/jsref/dom_obj_document.asp

 

자바 스크립트 등을 사용해 보신분들은 아시겠지만 Document Object 를 사용하면 각 HTML 페이지의 노드들을 손 쉽게 접근 할 수 있습니다.

 

아래 포스팅에서 파이썬 뷰티풀 소프를 이용해 로또 번호를 가져왔던 것과 같이 Autohotkey에서도 HTMLfile Com Object를 사용하여 이런 것들을 할 수 있다는 것 입니다.

 

또한 위 예에서는 URLDownloadToFile 을 사용하여 Google_HTML 이라는 이름의 파일로 읽어들인 후 Fileread 를 통해 변수로 저장하고 Google_HTML 파일을 지웠는데~

 

이 보다는 Autohotkey WinHttpRequest Com Object를 사용해서 변수로도 읽어 들이는 방법이 있습니다.

 

WinHttpRequest 에 대해 궁금하신 분들은 아래 주소 참조 바랍니다.

 

http://www.autohotkey.com/board/topic/56987-com-object-reference-autohotkey-v11/#entry358508


  1. 익명 2016.08.01 21:06

    오토핫키의 기능을 확장시켜주는 Com Object 명령어가 굉장히 매력적이네요. 초짜인 상태로 저 코드를 공부하느라 시간 좀 걸렸네요. 고맙습니다.

    • 남성 2016.08.02 06:37 신고

      오토핫키 정말 매력적이죠~ 방문해 주셔서 감사합니다

이전 포스팅에서 말씀 드린 데로 저는 Autohotkey 가 없으면 윈도우를 제대로 사용하지 못 할 정도로 Autohotkey 를 좋아합니다.

 

컴퓨터에 대한 배경 지식이 별로 없어서 dllcall() 등에 대해서는 아직까지도 이해가 안 되는 내용들이 많지만~ 그래도 꾸준히 관심을 가지고 있는데요

 

최근에 Autohotkey basic 에서 Autohotkey_L 로 넘어 오게 되었습니다.

 

Autohotkey basic 에 비해 Autohotkey_L 에서는 객체 지향적인 부분에서 특히 두드러진 특징이 있는 것 같더군요.

 

배열이나 COM object 등도 지원을 하고 해서 참~~ 배울 게 많은 것 같더군요.

 

그런데 지금까지 Autohotkey_L 로 넘어오고 싶어도 선뜻 넘어오지 못했던 게 기존의 코드 중 일부가 안 돌아가는 경우가 있어서 입니다.

 

가장 큰 걸림돌은 인코딩 이더군요.

 

Autohotkey_L Unicode 를 사용 하면서 기존 코드의 인코딩이 바뀌면서 정상적으로 동작하지 않는 경우였습니다.

 

이렇게 안 되는 거 일일이 찾아서 바꾸는 게 좀 귀찮기도 하고 제대로 안돼서 기존의 편리함이 없어져 버릴까 걱정도 되고 하더군요.

 

제 코드 중에 뮤토렌트 실행과 관련한 코드 부분이 있는데~

 

이 부분이 Autohotkey_L 로 넘어오면서 정상적으로 안 됐습니다.

 

기존의 코드는 아래와 같습니다.

 

#k::

DetectHiddenWindows, On

 

IfWinExist, ahk_class μTorrent4823DF041B09

{

 

    WinActivate, ahk_class μTorrent4823DF041B09

    WinActivate    

    WinShow

}

else

{            

    Run, "C:\Program Files\uTorrent\uTorrent.exe"

    WinWait, ahk_class μTorrent4823DF041B09

    WinShow

    WinActivate

}

return

 

위 코드는 μTorrent 가 실행 중에 있으면 화면에 보이게 하고 그렇지 않으면 실행 시키는 코드 입니다.

 

기존에 Autohotkey basic 에서는 굉장히 잘 동작했었죠~

 

그런데 Autohotkey_L 로 바뀌면서 정상적인 동작이 안 됐습니다.

 

몇 가지의 실험을 해보니 위 코드의 특수 문자인 μ 가 포함되어 있는 부분 때문이었습니다.

 

그래서 μ 부분 없이 torrent 프로그램을 인식 시키는 방법이 없을까 생각해 보다가 다음과 같은 코드를 만들었습니다.

 

뭐 만족스럽지는 않지만 정상적으로 동작은 하네요.

 

SetTitleMatchMode 2

#k::

DetectHiddenWindows, On

 

IfWinExist, Torrent 3

{

    WinActivate    

    WinShow

}

else

{            

    Run, "C:\Program Files\uTorrent\uTorrent.exe"

    WinWait, Torrent 3

    WinShow

    WinActivate

}

Return

 

위 코드에서 SetTitleMatchMode 2 로 설정한 것은 제목의 일부라도 일치 하면 IfWinExist가 인식하도록 하기 위한 것입니다.

 

현재 제 뮤토렌트 버전은 3.1.2 이고 프로그램의 타이틀 바는 다음과 같이 구성되어 있습니다.

 

 

타이틀바에 다운로드 정도도 표시되도록 해서 사용하고 있는데~

 

이러한 부분은 계속 변하는 부분이어서 특정한 값으로 μTorrent 를 구분하기가 어렵기 때문에~~

 

제목 중에서 변하지 않는 부분의 일부인 Torrent 3이 타이틀에 있으면 인식하도록 설정한 것이죠.

 

향후의 버전 업데이트 될 때를 생각해서 그 뒤의 .1.2 부분은 제외를 시켰습니다.

 

Autohotkey_L 을 사용하면서 저와 같은 문제가 있으신 분들은 참조 하시길~

 

그리고 더 나은 솔루션이 있으신 분들은 댓글 좀 부탁 드립니다.


  1. 행인 2012.05.21 21:21

    정규식을 이요하시면 비교적으로 더 확실하게 타겟을 잡으실 수 있습니다.

    • 남성 2012.05.21 22:00 신고

      아~ 정규식!! 참고 하겠습니다.
      방문해 주셔서 감사합니다. ^^

+ Recent posts