제2외국어/Windows

[C#] 간단한 매크로.

윈플. 2012. 8. 8. 20:30

옆에서 불편하게 품질 테스트를 하고 있는 걸 보고 만들기로 했습니다.


- 목적 
1. 웹브라우저(크롬,사파리,오페라,파폭,익스플로어 등) 들 중 하나를 선택
: 각 프로그램 명 알아내기, 외부 프로그램 실행

(1) 웹브라웢 프로그램 명 

explore = iexplore.exe
chrome = chrome.exe
firefox = firefox.exe
safari = safari.exe
opera = C:\\Program Files (x86)\\Opera\\opera.exe 
( opera의 경우 system안에 없어서 그런지 저렇게 적어줘야 된다. '\\' 잘 못 된게 아니라 \인 경우 \이 인식이 안된다.




(2) 외부 프로그램 실행

// 선억
const int WM_SYSCOMMAND = 274;
const int SC_MAXIMIZE = 61488;

// 외부 메시지 보내기
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);

// 외부 윈도우 찾기
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);


System.Diagnostics.Process IEProcess = new System.Diagnostics.Process();
IEProcess.StartInfo.FileName = "iexplore.exe";           // explore 파일 이름
IEProcess.StartInfo.Arguments = "http://winplz.tistory.com";      // URL 
IEProcess.Start();     // 프로그램 실행





2. URL이 적혀있는 .txt 파일을 읽어
: 파일처리, txt파일 한줄씩 읽기

FileStream fs = new FileStream("C:\\input.txt", FileMode.Open, FileAccess.Read);     // 파일스트림        StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);    // 스트림리더객체
string getCount = sr.ReadToEnd(); // 전체 읽기
int count = 0;     // 몇 줄인지를 저장할 
foreach (char c in getCount) // 전체 읽기
{
    // 줄바꿈부호가 있으면 count필드를 증가시킴
    count = c.Equals('\r') ? count + 1 : count;
}
count++;
sr.BaseStream.Position = 0;  // 시작점 가리키기
while (!sr.EndOfStream)
{
    string currentLine = sr.ReadLine();      // 한줄씩 읽습니다.
    url[idx] = currentLine;
    idx++; // 인덱스 증가.
}






3. 설정한 (시간)간격으로 해당 URL로 들어간다.
: Timer 사용하기, 웹브라우저 주소 변경하기

(1) Form.cs 에서 timer를 올리기

(2) timer 생성
timer1 = new System.Windows.Forms.Timer();

(3) 시간 간격 설정
timer1.Interval = 1000;  (1000 = 1초)

(4) 핸들러 연결하기
timer1.Tick += new EventHandler(Timer_Tick); ( 설정한 간격마다 Timer_Tick 라는 메서드를 실행 )

ex) public void Timer_Tick(object sender, EventArgs e)
     {
            
     }

(5) timer 실행

timer1.Enabled = true;




- 문제점 발생
: 설정한 시간을 간격삼아 외부 프로그램(웹브라우저)를 실행시키고, 해당 URL로 가는 건 인터넷 검색으로 쉽게 구현하였다.
하지만! 실행한 웹브라우저의 주소가 바꿔지지 않고 새로운 웹브라우저가 URL이 바껴서 실행

--> 해당 URL의 주소로 웹브라우저가 계속 실행. 

- 임시방편 해결책
: URL 웹브라우저를 실행시킬 때, 프로세스를 검사하여 해당 웹브라우저를 끄고 다시 실행시킨다.


** 외부 프로그램 종료

Process[] p = Process.GetProcessesByName("iexplore");
if (p.GetLength(0) > 0)
    p[0].Kill();

// 익스플로어를 찾아서 해당 프로세스 kill. 

--> 문제가 해결되는것 같았지만, 오페라의 경우 강제 종료된 경우, 아래 화면과 같은 메시지를 먼저 호출하여서 오페라에서는 원활한 테스트가 진행되지 않았다.




대충 이 정도 소스 및 + 검색(당신의 노력)이면 충분히 목표한 메크로를 구현가능하다.
물론 귀차니즘과 능력부족으로 목표에 100%만족하는 프로그램은 아니지만 이 정도로만으로도 상당한 시간 + 귀차니즘을 해결할 수 있을것 같다.