More actions
imported>rabierre No edit summary |
(Repair batch-0003 pages from live compare) |
||
| (2 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
<!-- MONIWIKI PageList(^Ruby/2011년스터디) --> | |||
* [[Ruby/2011년스터디]] | |||
* [[Ruby/2011년스터디/강성현]] | |||
* [[Ruby/2011년스터디/김수경]] | |||
* [[Ruby/2011년스터디/루비]] | |||
* [[Ruby/2011년스터디/서지혜]] | |||
* [[Ruby/2011년스터디/세미나]] | |||
__TOC__ | __TOC__ | ||
| Line 39: | Line 45: | ||
* 윈도우 API 테스트 | * 윈도우 API 테스트 | ||
** windows API로 프로세스의 정보 받아오기 ([http://sosal.tistory.com/100 원본]) | ** windows API로 프로세스의 정보 받아오기 ([http://sosal.tistory.com/100 원본]) | ||
~cpp | |||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| Line 47: | Line 54: | ||
void killProcess(TCHAR*); | void killProcess(TCHAR*); | ||
int _tmain(int argc, TCHAR *argv | int _tmain(int argc, TCHAR *argv[]){ | ||
// snap every current process | // snap every current process | ||
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); | HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); | ||
| Line 67: | Line 74: | ||
} | } | ||
_tprintf(_T("\t | _tprintf(_T("\t[Process name]\t[PID]\t[ThreadID]\t[PPID]\n")); | ||
int countProcess=0; | int countProcess=0; | ||
do{ | do{ | ||
| Line 79: | Line 86: | ||
} | } | ||
** 특정 프로세스 죽이기 ([http://sosal.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%B6%9C%EB%A0%A5-%EA%B0%95%EC%A0%9C-%EC%A2%85%EB%A3%8C-%EC%86%8C%EC%8A%A4 원본]) | ** 특정 프로세스 죽이기 ([http://sosal.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%B6%9C%EB%A0%A5-%EA%B0%95%EC%A0%9C-%EC%A2%85%EB%A3%8C-%EC%86%8C%EC%8A%A4 원본]) | ||
~cpp | |||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| Line 87: | Line 95: | ||
void killProcess(TCHAR*); | void killProcess(TCHAR*); | ||
int _tmain(int argc, TCHAR *argv | int _tmain(int argc, TCHAR *argv[]){ | ||
// kill process | // kill process | ||
TCHAR *targetProcess = _T("NateOnMain.exe"); // 종료하려는 프로세스의 이름을 쓴다 | TCHAR *targetProcess = _T("NateOnMain.exe"); // 종료하려는 프로세스의 이름을 쓴다 | ||
| Line 119: | Line 127: | ||
CloseHandle(hProcessSnap); | CloseHandle(hProcessSnap); | ||
} | } | ||
Latest revision as of 00:29, 27 March 2026
- Ruby/2011년스터디
- Ruby/2011년스터디/강성현
- Ruby/2011년스터디/김수경
- Ruby/2011년스터디/루비
- Ruby/2011년스터디/서지혜
- Ruby/2011년스터디/세미나
프로젝트
- 일정 시간이 지나면 웹 브라우저를 종료하는 프로그램 만들기
- 0207 : 프로그램 명세. 엔포지에 프로젝트 생성(엔포지 링크)
프로그램 기능
- OS에게 현재 실행중인 웹 브라우저의 정보(총 실행 시간, 현재 뷰중인 페이지)를 얻어 일정시간이상 실행된 (틍정 사이트를 뷰 중인) 웹 브라우저 종료시키기
실행 순서
- OS에게 웹 브라우저의 정보 얻음
- 일정시간 이상 실행된 웹 브라우저 검색 (혹은 직접 카운트)
- 특정 사이트를 뷰중인지 검색
- 해당 브라우저에게 종료 메세지 보냄 (혹은 경고창을 띄움)
예상 예외사항
- 웹 브라우저의 정보를 얻을 수 없을 때
- 실행중인 웹 브라우저가 없을 때
- 프로세서간 통신 실패시
- 웹 브라우저가 종료되지 않을 때
- 잘못된 웹 브라우저의 종료
제약사항
- 프로세스간의 통신
- 루비에서의 윈도우API사용
예상 문제점
- 루비와 윈도우API의 호환성
- 윈도우API 사용법 습득
추가 기술 사항
- OS 부팅 시 자동 실행
- 웹 브라우저의 페이지 뷰를 기록하여 통계
- 멀티 탭 브라우저일 때 탭만 종료하기
배운것
2월 21일
- 윈도우 API 테스트
- windows API로 프로세스의 정보 받아오기 (원본)
~cpp
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <Windows.h>
#include <TlHelp32.h>
void killProcess(TCHAR*);
int _tmain(int argc, TCHAR *argv[]){
// snap every current process
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE) {
_tprintf(_T("CreateToolhelp32Snapshot erre\n"));
exit(EXIT_FAILURE);
}
// structure to hold process's inform
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
// Process32First :: get the first process snapshot
if(!Process32First(hProcessSnap, &pe32)){
_tprintf(_T("Process32First error!\n"));
CloseHandle(hProcessSnap);
exit(EXIT_FAILURE);
}
_tprintf(_T("\t[Process name]\t[PID]\t[ThreadID]\t[PPID]\n"));
int countProcess=0;
do{
countProcess += 1;
_tprintf(_T("%25s %8d %8d %8d\n"),
pe32.szExeFile, pe32.th32ProcessID, pe32.cntThreads, pe32.th32ParentProcessID);
}while(Process32Next(hProcessSnap, &pe32));
printf("number of process = %d", countProcess);
return 0;
}
- 특정 프로세스 죽이기 (원본)
~cpp
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <Windows.h>
#include <TlHelp32.h>
void killProcess(TCHAR*);
int _tmain(int argc, TCHAR *argv[]){
// kill process
TCHAR *targetProcess = _T("NateOnMain.exe"); // 종료하려는 프로세스의 이름을 쓴다
killProcess(targetProcess);
return 0;
}
// Works fine
void killProcess(TCHAR *target){
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hProcess = NULL;
do{
if(0 == _tcscmp(pe32.szExeFile, target)){
// get the process handle
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
if(hProcess){
// kill it
TerminateProcess(hProcess, -1);
CloseHandle(hProcess);
printf("종료 성공!");
break;
}
}
}while(Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
}