commit eddba8f2099b1abbe7d52111d49334b77ef49eee Author: chodadoo Date: Sun May 2 15:31:55 2021 +0900 1. 최초 커밋 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d2081b --- /dev/null +++ b/.gitignore @@ -0,0 +1,245 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +[Xx]64/ +[Xx]86/ +[Bb]uild/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml + +# TODO: Un-comment the next line if you do not want to checkin +# your web deploy settings because they may include unencrypted +# passwords +#*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directory +AppPackages/ +BundleArtifacts/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# LightSwitch generated files +GeneratedArtifacts/ +ModelManifest.xml + +# Paket dependency manager +.paket/paket.exe + +# FAKE - F# Make +.fake/ +/RealgamBehaviour +/RealgamBehaviour Test +/RealgamSDKWrapper diff --git a/KeyHookForCapture/HookProcedure.cpp b/KeyHookForCapture/HookProcedure.cpp new file mode 100644 index 0000000..f14f10f --- /dev/null +++ b/KeyHookForCapture/HookProcedure.cpp @@ -0,0 +1,47 @@ +#include "stdafx.h" +#include "HookProcedure.h" + + +extern HHOOK g_hHook; + +//---------------------------------------------------------------------- +// +//---------------------------------------------------------------------- +LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) +{ + char szPath[MAX_PATH] = {0,}; + char *p = NULL; + + //------------------------------ + // + //------------------------------ + TCHAR szCaptureWindowName[] = "MFC_PIDINFO_Training"; + + HWND hWindowToFind = NULL; + HWND hCurrTopWindowHandle = NULL; + + TCHAR szMessage[ 128 ] = { 0, }; + + if( ( wParam == VK_F12 ) && !( lParam & FLAG_KEYDOWN ) ) + { + hWindowToFind = FindWindow( NULL, szCaptureWindowName ); + + if( hWindowToFind != NULL ) + { + // ÇØ´ç ÇÁ·Î¼¼½º¿¡°Ô ¸Þ½ÃÁö¸¦ ³¯¸°´Ù + + SendMessage( hWindowToFind, WM_USER + 10000, (WPARAM)0, (LPARAM)0 ); + + #if defined( _DEBUG_MODE_ ) + MessageBox( NULL, "Send Message","", MB_OK ); + #endif + } + else + { + #if defined( _DEBUG_MODE_ ) + MessageBox( NULL, "No Found!","", MB_OK ); + #endif // + } + } + return CallNextHookEx(g_hHook, nCode, wParam, lParam); +} \ No newline at end of file diff --git a/KeyHookForCapture/HookProcedure.h b/KeyHookForCapture/HookProcedure.h new file mode 100644 index 0000000..4a1845e --- /dev/null +++ b/KeyHookForCapture/HookProcedure.h @@ -0,0 +1,8 @@ +#pragma once + + +LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam); + +LRESULT CALLBACK TempKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam); + +LRESULT CALLBACK KeyboardProcSendCurrProcessId(int nCode, WPARAM wParam, LPARAM lParam); \ No newline at end of file diff --git a/KeyHookForCapture/KeyHookForCapture.cpp b/KeyHookForCapture/KeyHookForCapture.cpp new file mode 100644 index 0000000..46b3565 --- /dev/null +++ b/KeyHookForCapture/KeyHookForCapture.cpp @@ -0,0 +1,50 @@ +// KeyHookForCapture.cpp : DLL ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÁøÀÔÁ¡À» Á¤ÀÇÇÕ´Ï´Ù. +// + +#include "stdafx.h" +#include "HookProcedure.h" +#include "Utility.h" + +// Àü¿ª °´Ã¼ +HINSTANCE g_hInstance = NULL; // +HHOOK g_hHook = NULL; // + +// ¸ÞÀÎ ÇÔ¼ö +BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved ) +{ + switch( dwReason ) + { + case DLL_PROCESS_ATTACH: + g_hInstance = hinstDLL; + break; + + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + + +//---------------------------------- +// ÈÅ ½ÃÀÛ +//---------------------------------- +DELARE_EXPORT_FUNCTION void HookStart() +{ + g_hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInstance, 0); +} +//---------------------------------- +// ÈÅ ³¡ +//---------------------------------- +DELARE_EXPORT_FUNCTION void HookEnd() +{ + if( g_hHook ) + { + UnhookWindowsHookEx(g_hHook); + g_hHook = NULL; + } +} + + + + + diff --git a/KeyHookForCapture/KeyHookForCapture.vcproj b/KeyHookForCapture/KeyHookForCapture.vcproj new file mode 100644 index 0000000..1843c75 --- /dev/null +++ b/KeyHookForCapture/KeyHookForCapture.vcproj @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/KeyHookForCapture/ReadMe.txt b/KeyHookForCapture/ReadMe.txt new file mode 100644 index 0000000..4221589 --- /dev/null +++ b/KeyHookForCapture/ReadMe.txt @@ -0,0 +1,40 @@ +======================================================================== + µ¿Àû ¿¬°á ¶óÀ̺귯¸® : KeyHookForCapture ÇÁ·ÎÁ§Æ® °³¿ä +======================================================================== + +ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ ÀÌ KeyHookForCapture DLLÀ» ¸¸µé¾ú½À´Ï´Ù. +ÀÌ ÆÄÀÏ¿¡´Â KeyHookForCapture ÀÀ¿ë ÇÁ·Î±×·¥À» ±¸¼ºÇÏ´Â °¢°¢ÀÇ ÆÄÀÏ¿¡ +µé¾î ÀÖ´Â ¿ä¾à ¼³¸íÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. + + +KeyHookForCapture.vcproj + ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¸¦ »ç¿ëÇÏ¿© »ý¼ºÇÑ VC++ ÇÁ·ÎÁ§Æ®ÀÇ ±âº» ÇÁ·ÎÁ§Æ® ÆÄÀÏÀÔ´Ï´Ù. + ÇØ´ç ÆÄÀÏÀ» »ý¼ºÇÑ Visual C++ÀÇ ¹öÀü Á¤º¸¸¦ ºñ·ÔÇÏ¿© + ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ ¼±ÅÃÇÑ Ç÷§Æû, ±¸¼º ¹× + ÇÁ·ÎÁ§Æ® ±â´É¿¡ ´ëÇÑ Á¤º¸°¡ µé¾î ÀÖ½À´Ï´Ù. + +KeyHookForCapture.cpp + ±âº» DLL ¼Ò½º ÆÄÀÏÀÔ´Ï´Ù. + + ÀÌ DLLÀº ¸¸µé¾îÁú ¶§ ±âÈ£¸¦ ³»º¸³»Áö ¾ÊÀ¸¹Ç·Î, + ºôµåµÉ ¶§ .lib ÆÄÀÏÀÌ »ý¼ºµÇÁö ¾Ê½À´Ï´Ù. + ÀÌ ÇÁ·ÎÁ§Æ®°¡ ´Ù¸¥ ÇÁ·ÎÁ§Æ®¿¡ Á¾¼ÓµÇ°Ô ÇÏ·Á¸é + ÇØ´ç DLL¿¡¼­ ±âÈ£¸¦ ³»º¸³»µµ·Ï ÇÏ´Â Äڵ带 Ãß°¡ÇÏ¿© + ³»º¸³»±â ¶óÀ̺귯¸®°¡ »ý¼ºµÇ°Ô Çϰųª, + [ÇÁ·ÎÁ§Æ® ¼Ó¼º ÆäÀÌÁö] ´ëÈ­ »óÀÚ¿¡ ÀÖ´Â [¸µÄ¿] Æú´õÀÇ [ÀϹÝ] ¼Ó¼º ÆäÀÌÁö¿¡¼­ + [°¡Á®¿À±â ¶óÀ̺귯¸® ¹«½Ã] ¼Ó¼ºÀ» [¿¹]·Î ¼³Á¤ÇÕ´Ï´Ù. + +///////////////////////////////////////////////////////////////////////////// +±âŸ Ç¥ÁØ ÆÄÀÏ: + +StdAfx.h ¹× StdAfx.cpp´Â + KeyHookForCapture.pch¶ó´Â À̸§ÀÇ PCH(¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ) ÆÄÀϰú + StdAfx.obj¶ó´Â À̸§ÀÇ ¹Ì¸® ÄÄÆÄÀÏµÈ Çü½Ä ÆÄÀÏÀ» ºôµåÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. + +///////////////////////////////////////////////////////////////////////////// +±âŸ Âü°í: + +ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ »ç¿ëÇÏ´Â "TODO:" ÁÖ¼®Àº »ç¿ëÀÚ°¡ Ãß°¡Çϰųª »ç¿ëÀÚ ÁöÁ¤ÇØ¾ß ÇÏ´Â +¼Ò½º ÄÚµå ºÎºÐÀ» ³ªÅ¸³À´Ï´Ù. + +///////////////////////////////////////////////////////////////////////////// diff --git a/KeyHookForCapture/Utility.cpp b/KeyHookForCapture/Utility.cpp new file mode 100644 index 0000000..e5a14e4 --- /dev/null +++ b/KeyHookForCapture/Utility.cpp @@ -0,0 +1,32 @@ +#include "stdafx.h" +#include "Utility.h" + +//------------------------------------------ +// ÀÎÀÚ·Î Àü´ÞµÈ À̸§ÀÇ ÇÁ·Î¼¼½º¸¦ ã´Â´Ù +//------------------------------------------ +DWORD FindProcessID( LPCTSTR szProcessName ) +{ + DWORD dwPID = 0xFFFFFFFF; + HANDLE hSnapShot = INVALID_HANDLE_VALUE; + PROCESSENTRY32 pe; + + // Get the snapshot of the system + pe.dwSize = sizeof( PROCESSENTRY32 ); + hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPALL, NULL ); + + // find process + Process32First(hSnapShot, &pe); + do + { + if(!_stricmp(szProcessName, pe.szExeFile)) + { + dwPID = pe.th32ProcessID; + break; + } + } + while( Process32Next(hSnapShot, &pe ) ); + + CloseHandle(hSnapShot); + + return dwPID; +} \ No newline at end of file diff --git a/KeyHookForCapture/Utility.h b/KeyHookForCapture/Utility.h new file mode 100644 index 0000000..22feafd --- /dev/null +++ b/KeyHookForCapture/Utility.h @@ -0,0 +1,7 @@ +#pragma once + + +//------------------------------------------ +// ÀÎÀÚ·Î Àü´ÞµÈ À̸§ÀÇ ÇÁ·Î¼¼½º¸¦ ã´Â´Ù +//------------------------------------------ +DWORD FindProcessID( LPCTSTR szProcessName ); \ No newline at end of file diff --git a/KeyHookForCapture/stdafx.cpp b/KeyHookForCapture/stdafx.cpp new file mode 100644 index 0000000..6c6fdf8 --- /dev/null +++ b/KeyHookForCapture/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : Ç¥ÁØ Æ÷ÇÔ ÆÄÀϸ¸ µé¾î ÀÖ´Â ¼Ò½º ÆÄÀÏÀÔ´Ï´Ù. +// KeyHookForCapture.pch´Â ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ°¡ µË´Ï´Ù. +// stdafx.obj¿¡´Â ¹Ì¸® ÄÄÆÄÀÏµÈ Çü½Ä Á¤º¸°¡ Æ÷ÇԵ˴ϴÙ. + +#include "stdafx.h" + +// TODO: ÇÊ¿äÇÑ Ãß°¡ Çì´õ´Â +// ÀÌ ÆÄÀÏÀÌ ¾Æ´Ñ STDAFX.H¿¡¼­ ÂüÁ¶ÇÕ´Ï´Ù. diff --git a/KeyHookForCapture/stdafx.h b/KeyHookForCapture/stdafx.h new file mode 100644 index 0000000..78f21fd --- /dev/null +++ b/KeyHookForCapture/stdafx.h @@ -0,0 +1,24 @@ +// stdafx.h : ÀÚÁÖ »ç¿ëÇÏÁö¸¸ ÀÚÁÖ º¯°æµÇÁö´Â ¾Ê´Â +// Ç¥ÁØ ½Ã½ºÅÛ Æ÷ÇÔ ÆÄÀÏ ¹× ÇÁ·ÎÁ§Æ® °ü·Ã Æ÷ÇÔ ÆÄÀÏÀÌ +// µé¾î ÀÖ´Â Æ÷ÇÔ ÆÄÀÏÀÔ´Ï´Ù. +// + +#pragma once + + +#define WIN32_LEAN_AND_MEAN // °ÅÀÇ »ç¿ëµÇÁö ¾Ê´Â ³»¿ëÀº Windows Çì´õ¿¡¼­ Á¦¿ÜÇÕ´Ï´Ù. +// Windows Çì´õ ÆÄÀÏÀÔ´Ï´Ù. +#include + +// TODO: ÇÁ·Î±×·¥¿¡ ÇÊ¿äÇÑ Ãß°¡ Çì´õ´Â ¿©±â¿¡¼­ ÂüÁ¶ÇÕ´Ï´Ù. +#include "tlhelp32.h" + +//========================================== +// »ó¼ö +//========================================== +#define DELARE_EXPORT_FUNCTION extern "C" __declspec(dllexport) + +// ۰¡ ´­·È´ÂÁö ÆÇ´ÜÇÏ´Â ºÎºÐÀÇ ºñÆ® ¸¶½ºÅ© +#define FLAG_KEYDOWN 0x80000000 + +//#define _DEBUG_MODE_ \ No newline at end of file diff --git a/MFC_PIDINFO_Training.sln b/MFC_PIDINFO_Training.sln new file mode 100644 index 0000000..1256b47 --- /dev/null +++ b/MFC_PIDINFO_Training.sln @@ -0,0 +1,38 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MFC_PIDINFO_Training", "MFC_PIDINFO_Training\MFC_PIDINFO_Training.vcproj", "{B2530686-89DF-4608-BBD4-9773B0A90528}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestServer", "TestServer\TestServer.vcproj", "{F41C2C14-83A7-4C8C-8198-559B58F945D1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestClient", "TestClient\TestClient.vcproj", "{D58FB8F1-9532-4706-ABC1-D48956E34B9B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KeyHookForCapture", "KeyHookForCapture\KeyHookForCapture.vcproj", "{CBAE52E4-75F6-4E3A-AC60-028649CF136A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B2530686-89DF-4608-BBD4-9773B0A90528}.Debug|Win32.ActiveCfg = Debug|Win32 + {B2530686-89DF-4608-BBD4-9773B0A90528}.Debug|Win32.Build.0 = Debug|Win32 + {B2530686-89DF-4608-BBD4-9773B0A90528}.Release|Win32.ActiveCfg = Release|Win32 + {B2530686-89DF-4608-BBD4-9773B0A90528}.Release|Win32.Build.0 = Release|Win32 + {F41C2C14-83A7-4C8C-8198-559B58F945D1}.Debug|Win32.ActiveCfg = Debug|Win32 + {F41C2C14-83A7-4C8C-8198-559B58F945D1}.Debug|Win32.Build.0 = Debug|Win32 + {F41C2C14-83A7-4C8C-8198-559B58F945D1}.Release|Win32.ActiveCfg = Release|Win32 + {F41C2C14-83A7-4C8C-8198-559B58F945D1}.Release|Win32.Build.0 = Release|Win32 + {D58FB8F1-9532-4706-ABC1-D48956E34B9B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D58FB8F1-9532-4706-ABC1-D48956E34B9B}.Debug|Win32.Build.0 = Debug|Win32 + {D58FB8F1-9532-4706-ABC1-D48956E34B9B}.Release|Win32.ActiveCfg = Release|Win32 + {D58FB8F1-9532-4706-ABC1-D48956E34B9B}.Release|Win32.Build.0 = Release|Win32 + {CBAE52E4-75F6-4E3A-AC60-028649CF136A}.Debug|Win32.ActiveCfg = Debug|Win32 + {CBAE52E4-75F6-4E3A-AC60-028649CF136A}.Debug|Win32.Build.0 = Debug|Win32 + {CBAE52E4-75F6-4E3A-AC60-028649CF136A}.Release|Win32.ActiveCfg = Release|Win32 + {CBAE52E4-75F6-4E3A-AC60-028649CF136A}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MFC_PIDINFO_Training/DefineData.cpp b/MFC_PIDINFO_Training/DefineData.cpp new file mode 100644 index 0000000..f3fdbd6 --- /dev/null +++ b/MFC_PIDINFO_Training/DefineData.cpp @@ -0,0 +1,231 @@ +#include "stdafx.h" + +#include "DefineData.h" + +void PID2IMG(DWORD processId) +{ +} + +bool ClipBoard2IMG(CString filename, HWND DsthWnd, CString *err_msg) +{ + static int nCount = 0; + HBITMAP hBit; + int capture_delay = 10; + + if(!IsClipboardFormatAvailable(CF_BITMAP)) + { + *err_msg = _T("Ŭ¸³º¸µå Á¸Àç ¿À·ù"); + return FALSE; + } + + if(!OpenClipboard(DsthWnd)) + { + *err_msg = _T("Ŭ¸³º¸µå ¿ÀÇ ¿À·ù"); + return FALSE; + } + + hBit=(HBITMAP)GetClipboardData(CF_BITMAP); + + BITMAP bitmap; // ºñÆ®¸Ê(DDB) ±¸Á¶Ã¼ + GetObject(hBit, sizeof(BITMAP), &bitmap); // ºñÆ®¸Ê(DDB)ÀÇ Á¤º¸¸¦ ¾òÀ½ + + BITMAPINFOHEADER bmih; // ºñÆ®¸Ê(DIB) Á¤º¸ Çì´õ ±¸Á¶Ã¼ + ZeroMemory(&bmih, sizeof(BITMAPINFOHEADER)); + bmih.biSize = sizeof(BITMAPINFOHEADER); + bmih.biWidth = bitmap.bmWidth; + bmih.biHeight = bitmap.bmHeight; + bmih.biPlanes = 1; + bmih.biBitCount = 24; // 24ºñÆ® Æ®·çÄ÷¯ + bmih.biCompression = BI_RGB; + + HDC hDC = GetDC(GetDesktopWindow()); + + // ºñÆ®¸Ê ½ÎÀÌÁî Á¤º¸¸¦ ¾òÀ½ + //GetDIBits(hDC, hBit, 0, bitmap.bmHeight, NULL, (LPBITMAPINFO)&bmih, DIB_RGB_COLORS); + GetDIBits(hDC, hBit, 0, bitmap.bmHeight, NULL, (LPBITMAPINFO)&bmih, DIB_RGB_COLORS); + + // ºñÆ®¸Ê µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇÑ ¹öÆÛ ¸¶·Ã + LPBYTE lpBits = new BYTE[bmih.biSizeImage]; + + // ºñÆ®¸Ê µ¥ÀÌÅ͸¦ °¡Á®¿È + GetDIBits(hDC, hBit, 0, bitmap.bmHeight, lpBits, (LPBITMAPINFO)&bmih, DIB_RGB_COLORS); + + ReleaseDC(GetDesktopWindow(), hDC); + + // ÆÄÀÏ »ý¼º + HANDLE hFile = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + + if(hFile == INVALID_HANDLE_VALUE) + { + delete [] lpBits; + return FALSE; + } + + BITMAPFILEHEADER bmfh; // ºñÆ®¸Ê ÆÄÀÏ Çì´õ ±¸Á¶Ã¼ + bmfh.bfType = 'MB'; // ºñÆ®¸Ê ÆÄÀÏ ÀνÄÀÚ + bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); + bmfh.bfSize = bmfh.bfOffBits + bmih.biSizeImage; + bmfh.bfReserved1 = bmfh.bfReserved2 = 0; + + DWORD dwWritten; + WriteFile(hFile, &bmfh, sizeof(BITMAPFILEHEADER), &dwWritten, NULL); // ºñÆ®¸ÊÆÄÀÏÇì´õ ÀúÀå + WriteFile(hFile, &bmih, sizeof(BITMAPINFOHEADER), &dwWritten, NULL); // ºñÆ®¸ÊÁ¤º¸Çì´õ ÀúÀå + WriteFile(hFile, lpBits, bmih.biSizeImage, &dwWritten, NULL); // ºñÆ®¸Êµ¥ÀÌÅÍ ÀúÀå + CloseHandle(hFile); + + delete [] lpBits; + + EmptyClipboard(); + CloseClipboard(); + + return TRUE; +} + +void CaptureScreen(LPDIRECT3DDEVICE9 pDevice, D3DDISPLAYMODE mode, char* szFileName) +{ + HRESULT hr; + + // ĸóÇÑ È­¸éÀ» ¿Å°Ü ´ãÀ» Surface¸¦ »ý¼ºÇÑ´Ù. + IDirect3DSurface9* surf; + if(FAILED(hr = pDevice->CreateOffscreenPlainSurface(mode.Width, mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surf, NULL))) + { + return; + } + + // GetFrontBufferData()ÇÔ¼ö¸¦ ÅëÇØ ÇÁ·¹ÀÓ ¹öÆÛÀÇ ³»¿ëÀ» Surface·Î °¡Á®¿Â´Ù. + if(FAILED(hr = pDevice->GetFrontBufferData(0, surf))) + { + surf->Release(); + return; + } + + // Surface¿¡ ´ã±ä ³»¿ëÀ» BMPÆ÷¸ËÀ¸·Î º¯È¯ÇÑ´Ù. + hr = D3DXSaveSurfaceToFile(_T("GetFrontBufferData.png"), D3DXIFF_PNG, surf, NULL, NULL); + surf->Release(); + + return; +} + +void CaptureScreen2(LPDIRECT3DDEVICE9 pDevice, D3DDISPLAYMODE mode, char* szFileName) +{ + HRESULT hr; + + /*if(FAILED(hr=pDevice->CreateOffscreenPlainSurface( mode.Width, mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM ,&BackSurfaceBuffer, NULL ))) + return;*/ + + IDirect3DSurface9* surf; + if(FAILED(hr = pDevice->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &surf ))){ + surf->Release(); + return; + } + + hr=D3DXSaveSurfaceToFile(_T("GetBackBuffer.png"), D3DXIFF_PNG, surf, NULL, NULL ); + surf->Release(); + + return; + +} + +void CaptureScreen(LPDIRECT3DDEVICE9 pDevice, D3DDISPLAYMODE mode, HWND hWnd, char* szFileName) +{ + if (!pDevice || !szFileName) + return; + + DWORD tickStart = GetTickCount(); + + // There is 2 Methods + // 1. Capture Front Buffer + // 2. Capture Back Buffer (Faster) + bool isBackBuffer = true; + + RECT rectWindow = {0}; + RECT rectDesktop = {0}; + //HWND hwnd = GetWindowHandle(m_dwPid); + GetClientRect(hWnd, &rectWindow); + GetClientRect(GetDesktopWindow(), &rectDesktop); + + IDirect3DSurface9* pSurface = NULL; + HRESULT hResult = S_OK; + + if (isBackBuffer) + { + hResult = pDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pSurface); + } + else + { + /* + For windowed mode, the size of the destination surface + should be the size of the desktop. For full-screen mode, + the size of the destination surface should be the screen size. + */ + + bool isFullScreen = true; + int nWidth = isFullScreen ? rectWindow.right - rectWindow.left + : rectDesktop.right - rectDesktop.left; + int nHeight = isFullScreen ? rectWindow.bottom - rectWindow.top + : rectDesktop.bottom - rectDesktop.top; + + hResult = pDevice->CreateOffscreenPlainSurface(nWidth, nHeight, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pSurface, NULL); + hResult = pDevice->GetFrontBufferData(0, pSurface); + } + + if (pSurface) + { + hResult = D3DXSaveSurfaceToFile(_T("hwnd_GetBackBuffer.png"), D3DXIFF_PNG, pSurface, NULL, &rectWindow); + pSurface->Release(); + } +// +// tickDiff = GetTickCount() - tickStart; +} + +void CaptureScreen2(LPDIRECT3DDEVICE9 pDevice, D3DDISPLAYMODE mode, HWND hWnd, char* szFileName) +{ + if (!pDevice || !szFileName) + return; + + DWORD tickStart = GetTickCount(); + + // There is 2 Methods + // 1. Capture Front Buffer + // 2. Capture Back Buffer (Faster) + bool isBackBuffer = false; + + RECT rectWindow = {0}; + RECT rectDesktop = {0}; + //HWND hwnd = GetWindowHandle(m_dwPid); + GetClientRect(GetDesktopWindow(), &rectWindow); + GetClientRect(GetDesktopWindow(), &rectDesktop); + + IDirect3DSurface9* pSurface = NULL; + HRESULT hResult = S_OK; + + if (isBackBuffer) + { + hResult = pDevice->GetFrontBufferData(0, pSurface); + } + else + { + /* + For windowed mode, the size of the destination surface + should be the size of the desktop. For full-screen mode, + the size of the destination surface should be the screen size. + */ + + bool isFullScreen = false; + int nWidth = isFullScreen ? rectWindow.right - rectWindow.left + : rectDesktop.right - rectDesktop.left; + int nHeight = isFullScreen ? rectWindow.bottom - rectWindow.top + : rectDesktop.bottom - rectDesktop.top; + + hResult = pDevice->CreateOffscreenPlainSurface(nWidth, nHeight, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pSurface, NULL); + hResult = pDevice->GetFrontBufferData(0, pSurface); + } + + if (pSurface) + { + hResult = D3DXSaveSurfaceToFile(_T("hwnd_GetFrontBufferData.png"), D3DXIFF_PNG, pSurface, NULL, &rectWindow); + pSurface->Release(); + } +// +// tickDiff = GetTickCount() - tickStart; +} \ No newline at end of file diff --git a/MFC_PIDINFO_Training/DefineData.h b/MFC_PIDINFO_Training/DefineData.h new file mode 100644 index 0000000..1e8af10 --- /dev/null +++ b/MFC_PIDINFO_Training/DefineData.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +#pragma comment(lib,"d3d9.lib") +#pragma comment(lib,"d3dx9.lib") + +#define IP_PORT_RELOAD 1 +#define SCREEN_RELOAD 2 + +typedef struct _NETINFO +{ + CString IP; + int PORT; +}NETINFO; + +void PID2IMG(DWORD processId); +bool ClipBoard2IMG(CString filename, HWND DsthWnd, CString *err_msg); +void CaptureScreen(LPDIRECT3DDEVICE9 pDevice, D3DDISPLAYMODE mode, char* szFileName); +void CaptureScreen2(LPDIRECT3DDEVICE9 pDevice, D3DDISPLAYMODE mode, char* szFileName); +void CaptureScreen(LPDIRECT3DDEVICE9 pDevice, D3DDISPLAYMODE mode, HWND hWnd, char* szFileName); +void CaptureScreen2(LPDIRECT3DDEVICE9 pDevice, D3DDISPLAYMODE mode, HWND hWnd, char* szFileName); \ No newline at end of file diff --git a/MFC_PIDINFO_Training/MFC_PIDINFO_Training.cpp b/MFC_PIDINFO_Training/MFC_PIDINFO_Training.cpp new file mode 100644 index 0000000..22edcce --- /dev/null +++ b/MFC_PIDINFO_Training/MFC_PIDINFO_Training.cpp @@ -0,0 +1,85 @@ + +// MFC_PIDINFO_Training.cpp : ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ Å¬·¡½º µ¿ÀÛÀ» Á¤ÀÇÇÕ´Ï´Ù. +// + +#include "stdafx.h" +#include "MFC_PIDINFO_Training.h" +#include "MFC_PIDINFO_TrainingDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CMFC_PIDINFO_TrainingApp + +BEGIN_MESSAGE_MAP(CMFC_PIDINFO_TrainingApp, CWinAppEx) + ON_COMMAND(ID_HELP, &CWinApp::OnHelp) +END_MESSAGE_MAP() + + +// CMFC_PIDINFO_TrainingApp »ý¼º + +CMFC_PIDINFO_TrainingApp::CMFC_PIDINFO_TrainingApp() +{ + // TODO: ¿©±â¿¡ »ý¼º Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + // InitInstance¿¡ ¸ðµç Áß¿äÇÑ ÃʱâÈ­ ÀÛ¾÷À» ¹èÄ¡ÇÕ´Ï´Ù. +} + + +// À¯ÀÏÇÑ CMFC_PIDINFO_TrainingApp °³Ã¼ÀÔ´Ï´Ù. + +CMFC_PIDINFO_TrainingApp theApp; + + +// CMFC_PIDINFO_TrainingApp ÃʱâÈ­ + +BOOL CMFC_PIDINFO_TrainingApp::InitInstance() +{ + // ÀÀ¿ë ÇÁ·Î±×·¥ ¸Å´ÏÆä½ºÆ®°¡ ComCtl32.dll ¹öÀü 6 ÀÌ»óÀ» »ç¿ëÇÏ¿© ºñÁÖ¾ó ½ºÅ¸ÀÏÀ» + // »ç¿ëÇϵµ·Ï ÁöÁ¤ÇÏ´Â °æ¿ì, Windows XP »ó¿¡¼­ ¹Ýµå½Ã InitCommonControlsEx()°¡ ÇÊ¿äÇÕ´Ï´Ù. + // InitCommonControlsEx()¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é âÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù. + INITCOMMONCONTROLSEX InitCtrls; + InitCtrls.dwSize = sizeof(InitCtrls); + // ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¸ðµç °ø¿ë ÄÁÆ®·Ñ Ŭ·¡½º¸¦ Æ÷ÇÔÇϵµ·Ï + // ÀÌ Ç׸ñÀ» ¼³Á¤ÇϽʽÿÀ. + InitCtrls.dwICC = ICC_WIN95_CLASSES; + InitCommonControlsEx(&InitCtrls); + + CWinAppEx::InitInstance(); + + if (!AfxSocketInit()) + { + AfxMessageBox(IDP_SOCKETS_INIT_FAILED); + return FALSE; + } + + AfxEnableControlContainer(); + + // Ç¥ÁØ ÃʱâÈ­ + // ÀÌµé ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê°í ÃÖÁ¾ ½ÇÇà ÆÄÀÏÀÇ Å©±â¸¦ ÁÙÀÌ·Á¸é + // ¾Æ·¡¿¡¼­ ÇÊ¿ä ¾ø´Â ƯÁ¤ ÃʱâÈ­ + // ·çƾÀ» Á¦°ÅÇØ¾ß ÇÕ´Ï´Ù. + // ÇØ´ç ¼³Á¤ÀÌ ÀúÀåµÈ ·¹Áö½ºÆ®¸® ۸¦ º¯°æÇϽʽÿÀ. + // TODO: ÀÌ ¹®ÀÚ¿­À» ȸ»ç ¶Ç´Â Á¶Á÷ÀÇ À̸§°ú °°Àº + // ÀûÀýÇÑ ³»¿ëÀ¸·Î ¼öÁ¤ÇØ¾ß ÇÕ´Ï´Ù. + SetRegistryKey(_T("·ÎÄà ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ »ý¼ºµÈ ÀÀ¿ë ÇÁ·Î±×·¥")); + + CMFC_PIDINFO_TrainingDlg dlg; + m_pMainWnd = &dlg; + INT_PTR nResponse = dlg.DoModal(); + if (nResponse == IDOK) + { + // TODO: ¿©±â¿¡ [È®ÀÎ]À» Ŭ¸¯ÇÏ¿© ´ëÈ­ »óÀÚ°¡ ¾ø¾îÁú ¶§ ó¸®ÇÒ + // Äڵ带 ¹èÄ¡ÇÕ´Ï´Ù. + } + else if (nResponse == IDCANCEL) + { + // TODO: ¿©±â¿¡ [Ãë¼Ò]¸¦ Ŭ¸¯ÇÏ¿© ´ëÈ­ »óÀÚ°¡ ¾ø¾îÁú ¶§ ó¸®ÇÒ + // Äڵ带 ¹èÄ¡ÇÕ´Ï´Ù. + } + + // ´ëÈ­ »óÀÚ°¡ ´ÝÇûÀ¸¹Ç·Î ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö ÆßÇÁ¸¦ ½ÃÀÛÇÏÁö ¾Ê°í ÀÀ¿ë ÇÁ·Î±×·¥À» ³¡³¾ ¼ö ÀÖµµ·Ï FALSE¸¦ + // ¹ÝȯÇÕ´Ï´Ù. + return FALSE; +} diff --git a/MFC_PIDINFO_Training/MFC_PIDINFO_Training.h b/MFC_PIDINFO_Training/MFC_PIDINFO_Training.h new file mode 100644 index 0000000..d11cbde --- /dev/null +++ b/MFC_PIDINFO_Training/MFC_PIDINFO_Training.h @@ -0,0 +1,32 @@ + +// MFC_PIDINFO_Training.h : PROJECT_NAME ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÁÖ Çì´õ ÆÄÀÏÀÔ´Ï´Ù. +// + +#pragma once + +#ifndef __AFXWIN_H__ + #error "PCH¿¡ ´ëÇØ ÀÌ ÆÄÀÏÀ» Æ÷ÇÔÇϱâ Àü¿¡ 'stdafx.h'¸¦ Æ÷ÇÔÇÕ´Ï´Ù." +#endif + +#include "resource.h" // ÁÖ ±âÈ£ÀÔ´Ï´Ù. + + +// CMFC_PIDINFO_TrainingApp: +// ÀÌ Å¬·¡½ºÀÇ ±¸Çö¿¡ ´ëÇØ¼­´Â MFC_PIDINFO_Training.cppÀ» ÂüÁ¶ÇϽʽÿÀ. +// + +class CMFC_PIDINFO_TrainingApp : public CWinAppEx +{ +public: + CMFC_PIDINFO_TrainingApp(); + +// ÀçÁ¤ÀÇÀÔ´Ï´Ù. + public: + virtual BOOL InitInstance(); + +// ±¸ÇöÀÔ´Ï´Ù. + + DECLARE_MESSAGE_MAP() +}; + +extern CMFC_PIDINFO_TrainingApp theApp; \ No newline at end of file diff --git a/MFC_PIDINFO_Training/MFC_PIDINFO_Training.rc b/MFC_PIDINFO_Training/MFC_PIDINFO_Training.rc new file mode 100644 index 0000000..9b23267 --- /dev/null +++ b/MFC_PIDINFO_Training/MFC_PIDINFO_Training.rc @@ -0,0 +1,211 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#ifndef APSTUDIO_INVOKED +#include "targetver.h" +#endif +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Çѱ¹¾î resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR) +#ifdef _WIN32 +LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT +#pragma code_page(949) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#ifndef APSTUDIO_INVOKED\r\n" + "#include ""targetver.h""\r\n" + "#endif\r\n" + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#define _AFX_NO_SPLITTER_RESOURCES\r\n" + "#define _AFX_NO_OLE_RESOURCES\r\n" + "#define _AFX_NO_TRACKER_RESOURCES\r\n" + "#define _AFX_NO_PROPERTY_RESOURCES\r\n" + "\r\n" + "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)\r\n" + "LANGUAGE 18, 1\r\n" + "#pragma code_page(949)\r\n" + "#include ""res\\MFC_PIDINFO_Training.rc2"" // Microsoft Visual C++ ÀÌ¿ÜÀÇ ´Ù¸¥ µµ±¸¿¡¼­ ÆíÁýÇÑ ¸®¼Ò½ºÀÔ´Ï´Ù.\r\n" + "#include ""l.KOR\\afxres.rc"" // Ç¥ÁØ ±¸¼º ¿ä¼ÒÀÔ´Ï´Ù.\r\n" + "#endif\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_MAINFRAME ICON "res\\MFC_PIDINFO_Training.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "MFC_PIDINFO_Training Á¤º¸" +FONT 9, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20 + LTEXT "MFC_PIDINFO_Training, ¹öÀü 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX + LTEXT "Copyright (C) 2011",IDC_STATIC,42,26,114,8 + DEFPUSHBUTTON "È®ÀÎ",IDOK,113,41,50,14,WS_GROUP +END + +IDD_MFC_PIDINFO_TRAINING_DIALOG DIALOGEX 0, 0, 319, 260 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_APPWINDOW +CAPTION "MFC_PIDINFO_Training" +FONT 9, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "È®ÀÎ",IDOK,113,239,35,14 + PUSHBUTTON "Ãë¼Ò",IDCANCEL,277,239,35,14 + LISTBOX IDC_LIST_INFO,7,7,183,232,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP,WS_EX_ACCEPTFILES + EDITTEXT IDC_EDIT_FILEPATH,29,239,82,14,ES_AUTOHSCROLL + LTEXT "°æ·Î : ",IDC_STATIC,7,245,22,8 + PUSHBUTTON "°»½Å",IDC_BUTTON_RELOAD,148,239,35,14 + LISTBOX IDC_LIST_VECTOR,190,7,122,232,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP,WS_EX_ACCEPTFILES + PUSHBUTTON "º¤ÅÍÈ®ÀÎ",IDC_BUTTON_VECTOR,183,239,35,14 + PUSHBUTTON "½ºÅ©¸°¼¦",IDC_BUTTON_PRTSC,218,239,35,14 + CONTROL "ÀÚµ¿",IDC_CHECK_AUTOPIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,253,243,24,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "041203b5" + BEGIN + VALUE "CompanyName", "TODO: <ȸ»ç À̸§>" + VALUE "FileDescription", "TODO: <ÆÄÀÏ ¼³¸í>" + VALUE "FileVersion", "1.0.0.1" + VALUE "InternalName", "MFC_PIDINFO_Training.exe" + VALUE "LegalCopyright", "TODO: (c) <ȸ»ç À̸§>. All rights reserved." + VALUE "OriginalFilename", "MFC_PIDINFO_Training.exe" + VALUE "ProductName", "TODO: <Á¦Ç° À̸§>" + VALUE "ProductVersion", "1.0.0.1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x412, 949 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUTBOX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 163 + TOPMARGIN, 7 + BOTTOMMARGIN, 55 + END + + IDD_MFC_PIDINFO_TRAINING_DIALOG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 312 + TOPMARGIN, 7 + BOTTOMMARGIN, 253 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_ABOUTBOX "MFC_PIDINFO_Training Á¤º¸(&A)..." + IDP_SOCKETS_INIT_FAILED "Windows ¼ÒÄÏÀ» ÃʱâÈ­ÇÏÁö ¸øÇß½À´Ï´Ù." +END + +#endif // Çѱ¹¾î resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#define _AFX_NO_SPLITTER_RESOURCES +#define _AFX_NO_OLE_RESOURCES +#define _AFX_NO_TRACKER_RESOURCES +#define _AFX_NO_PROPERTY_RESOURCES + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR) +LANGUAGE 18, 1 +#pragma code_page(949) +#include "res\MFC_PIDINFO_Training.rc2" // Microsoft Visual C++ ÀÌ¿ÜÀÇ ´Ù¸¥ µµ±¸¿¡¼­ ÆíÁýÇÑ ¸®¼Ò½ºÀÔ´Ï´Ù. +#include "l.KOR\afxres.rc" // Ç¥ÁØ ±¸¼º ¿ä¼ÒÀÔ´Ï´Ù. +#endif + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/MFC_PIDINFO_Training/MFC_PIDINFO_Training.vcproj b/MFC_PIDINFO_Training/MFC_PIDINFO_Training.vcproj new file mode 100644 index 0000000..40e1ed8 --- /dev/null +++ b/MFC_PIDINFO_Training/MFC_PIDINFO_Training.vcproj @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.cpp b/MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.cpp new file mode 100644 index 0000000..672bba5 --- /dev/null +++ b/MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.cpp @@ -0,0 +1,675 @@ + +// MFC_PIDINFO_TrainingDlg.cpp : ±¸Çö ÆÄÀÏ +// + +#include "stdafx.h" + +#include "MFC_PIDINFO_Training.h" +#include "MFC_PIDINFO_TrainingDlg.h" + +#include "DefineData.h" + +#include +#include + +char* g_mibTCPState[] = +{ + "???", + "MIB_TCP_STATE_CLOSED", + "MIB_TCP_STATE_LISTEN", + "MIB_TCP_STATE_SYN_SENT", + "MIB_TCP_STATE_SYN_RCVD", + "MIB_TCP_STATE_ESTAB", + "MIB_TCP_STATE_FIN_WAIT1", + "MIB_TCP_STATE_FIN_WAIT2", + "MIB_TCP_STATE_CLOSE_WAIT", + "MIB_TCP_STATE_CLOSING", + "MIB_TCP_STATE_LAST_ACK", + "MIB_TCP_STATE_TIME_WAIT", + "MIB_TCP_STATE_DELETE_TCB" +}; + +DWORD (WINAPI *pGetExtendedTcpTable)( + PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved + ); + +std::vector m_vNetinfo; + +LPDIRECT3D9 g_pD3D = NULL; +LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; + +//#pragma comment(lib, "iphlpapi.lib") +//#pragma comment( lib, "Ws2_32.lib") + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// ÀÀ¿ë ÇÁ·Î±×·¥ Á¤º¸¿¡ »ç¿ëµÇ´Â CAboutDlg ´ëÈ­ »óÀÚÀÔ´Ï´Ù. + +class CAboutDlg : public CDialog +{ +public: + CAboutDlg(); + +// ´ëÈ­ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù. + enum { IDD = IDD_ABOUTBOX }; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. + +// ±¸ÇöÀÔ´Ï´Ù. +protected: + DECLARE_MESSAGE_MAP() +}; + +CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) +{ +} + +void CAboutDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) +END_MESSAGE_MAP() + + +// CMFC_PIDINFO_TrainingDlg ´ëÈ­ »óÀÚ + + + + +CMFC_PIDINFO_TrainingDlg::CMFC_PIDINFO_TrainingDlg(CWnd* pParent /*=NULL*/) + : CDialog(CMFC_PIDINFO_TrainingDlg::IDD, pParent) + , m_szFilePath(_T("")) + , m_dwPid(0) + , m_strIP(_T("")) + , m_bLoadState(FALSE) + , m_nPORT(0) + , m_bScreenAutoCap(FALSE) + , m_D3state(FALSE) + , m_bSnapKeyState(FALSE) +{ + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); +} + +void CMFC_PIDINFO_TrainingDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + DDX_Control(pDX, IDC_LIST_INFO, m_lbListBox); + DDX_Text(pDX, IDC_EDIT_FILEPATH, m_szFilePath); + DDX_Control(pDX, IDC_LIST_VECTOR, m_lbVector); + DDX_Check(pDX, IDC_CHECK_AUTOPIC, m_bScreenAutoCap); +} + +BEGIN_MESSAGE_MAP(CMFC_PIDINFO_TrainingDlg, CDialog) + ON_WM_SYSCOMMAND() + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() + //}}AFX_MSG_MAP + ON_BN_CLICKED(IDOK, &CMFC_PIDINFO_TrainingDlg::OnBnClickedOk) + ON_WM_DROPFILES() + ON_BN_CLICKED(IDC_BUTTON_RELOAD, &CMFC_PIDINFO_TrainingDlg::OnBnClickedButtonReload) + ON_WM_TIMER() + ON_BN_CLICKED(IDC_BUTTON_VECTOR, &CMFC_PIDINFO_TrainingDlg::OnBnClickedButtonVector) + ON_BN_CLICKED(IDC_BUTTON_PRTSC, &CMFC_PIDINFO_TrainingDlg::OnBnClickedButtonPrtsc) + ON_BN_CLICKED(IDC_CHECK_AUTOPIC, &CMFC_PIDINFO_TrainingDlg::OnBnClickedCheckAutopic) + ON_WM_DESTROY() + ON_WM_CLIPBOARDUPDATE() +END_MESSAGE_MAP() + + +// CMFC_PIDINFO_TrainingDlg ¸Þ½ÃÁö 󸮱â + +BOOL CMFC_PIDINFO_TrainingDlg::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // ½Ã½ºÅÛ ¸Þ´º¿¡ "Á¤º¸..." ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÕ´Ï´Ù. + + // IDM_ABOUTBOX´Â ½Ã½ºÅÛ ¸í·É ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. + ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); + ASSERT(IDM_ABOUTBOX < 0xF000); + + CMenu* pSysMenu = GetSystemMenu(FALSE); + if (pSysMenu != NULL) + { + BOOL bNameValid; + CString strAboutMenu; + bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); + ASSERT(bNameValid); + if (!strAboutMenu.IsEmpty()) + { + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); + } + } + + // ÀÌ ´ëÈ­ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ­ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â + // ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. + SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. + SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. + + // TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù. + + hDll = LoadLibraryA( DEF_DLL_NAME ); + + if( hDll == NULL ) + { + m_lbListBox.AddString(_T("FAIL! To Load DLL")); + return 0; + } + //MessageBox( "SUCESS! To Load DLL" ); + + HookStart = ( PFN_HOOKSTART )GetProcAddress(hDll, DEF_HOOKSTART); + HookStop = ( PFN_HOOKSTOP )GetProcAddress(hDll, DEF_HOOKSTOP); + + HookStart(); + + m_lbListBox.AddString(_T("1. ½ÇÇàÆÄÀÏ µå·Ó")); + m_lbListBox.AddString(_T("2. È®ÀÎ")); + m_lbListBox.AddString(_T("3. º¤ÅÍÈ®ÀÎ")); + m_lbListBox.AddString(_T("4. ½ºÅ©¸°¼¦ ´ÜÃàŰ F12")); + m_lbListBox.AddString(_T("5. Ŭ¸³º¸µå ĸÃÄ´Â 'Èå¹Ë.bmp'¿¡ Áö¼ÓÀûÀ¸·Î µ¤¾î¾²±â µÊ")); + m_lbListBox.AddString(_T("== ÀÚµ¿ ½ºÅ©¸°¼¦ ÁÖ±â 1ÃÊ ==")); + + return TRUE; // Æ÷Ä¿½º¸¦ ÄÁÆ®·Ñ¿¡ ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù. +} + +void CMFC_PIDINFO_TrainingDlg::OnSysCommand(UINT nID, LPARAM lParam) +{ + if ((nID & 0xFFF0) == IDM_ABOUTBOX) + { + CAboutDlg dlgAbout; + dlgAbout.DoModal(); + } + else + { + CDialog::OnSysCommand(nID, lParam); + } +} + +// ´ëÈ­ »óÀÚ¿¡ ÃÖ¼ÒÈ­ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é +// ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼­/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â +// ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. + +void CMFC_PIDINFO_TrainingDlg::OnPaint() +{ + if (IsIconic()) + { + CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅØ½ºÆ® + + SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); + + // Ŭ¶óÀÌ¾ðÆ® »ç°¢Çü¿¡¼­ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù. + int cxIcon = GetSystemMetrics(SM_CXICON); + int cyIcon = GetSystemMetrics(SM_CYICON); + CRect rect; + GetClientRect(&rect); + int x = (rect.Width() - cxIcon + 1) / 2; + int y = (rect.Height() - cyIcon + 1) / 2; + + // ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù. + dc.DrawIcon(x, y, m_hIcon); + } + else + { + CDialog::OnPaint(); + } +} + +// »ç¿ëÀÚ°¡ ÃÖ¼ÒÈ­µÈ âÀ» ²ô´Â µ¿¾È¿¡ Ä¿¼­°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼­ +// ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. +HCURSOR CMFC_PIDINFO_TrainingDlg::OnQueryDragIcon() +{ + return static_cast(m_hIcon); +} + + +void CMFC_PIDINFO_TrainingDlg::OnBnClickedOk() +{ + // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + + if(m_szFilePath.IsEmpty()) + { + m_lbListBox.AddString(_T("ÆÄÀÏÀ» ³Ö¾îÁÖ¼¼¿ë")); + return; + } + + SHELLEXECUTEINFO ShExecInfo; + memset(&ShExecInfo, NULL, sizeof(SHELLEXECUTEINFO)); + + ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); + ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; + ShExecInfo.lpFile = m_szFilePath; + ShExecInfo.nShow = SW_SHOW; + + BOOL ret = ShellExecuteEx(&ShExecInfo); + + if(!ret) + { + m_lbListBox.AddString(_T("¿­±â½ÇÆÐ")); + return; + } + + m_dwPid = GetProcessId(ShExecInfo.hProcess); + CloseHandle(ShExecInfo.hProcess); + + CString add_msg; + add_msg.Format(_T("PID : %ld"), m_dwPid); + m_lbListBox.AddString(add_msg); +} + +void CMFC_PIDINFO_TrainingDlg::OnDropFiles(HDROP hDropInfo) +{ + // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. + + char FileFath[MAX_PATH]; + + DragQueryFileA(hDropInfo, 0, FileFath, MAX_PATH); + + m_szFilePath = FileFath; + m_lbListBox.AddString(m_szFilePath); + + UpdateData(FALSE); + + CDialog::OnDropFiles(hDropInfo); +} + +BOOL CMFC_PIDINFO_TrainingDlg::initFunctions(void) +{ + pGetExtendedTcpTable = + (DWORD (WINAPI *)(PVOID,PDWORD,BOOL,ULONG,TCP_TABLE_CLASS,ULONG)) + GetProcAddress(LoadLibraryA("iphlpapi.dll"), "GetExtendedTcpTable"); + if(pGetExtendedTcpTable == NULL) return FALSE; + return TRUE; +} + +void CMFC_PIDINFO_TrainingDlg::OnBnClickedButtonReload() +{ + // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + + m_bLoadState = !m_bLoadState; + + if(m_bLoadState) + { + m_lbListBox.AddString(_T("°»½Å½ÃÀÛ")); + SetTimer(IP_PORT_RELOAD, 1000, 0); + } + else + { + m_lbListBox.AddString(_T("°»½ÅÁ¾·á")); + KillTimer(IP_PORT_RELOAD); + } + +} + +CString CMFC_PIDINFO_TrainingDlg::GetPid2Info(DWORD SrcPid) +{ + CString err_msg; + + if(!initFunctions()){ + + err_msg = _T("Needed to have XP SP2, Vista SP1 or Server 2003 SP1 and above"); + return err_msg; + } + + PVOID pTCPTable = NULL; + DWORD size = 0; + DWORD result = 0; + + result = pGetExtendedTcpTable(NULL, &size, true, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0); + while(result == ERROR_INSUFFICIENT_BUFFER){ + if(pTCPTable != NULL){ + free(pTCPTable); + } + pTCPTable = malloc(size); + result = pGetExtendedTcpTable(pTCPTable, &size, true, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0); + if(result != NO_ERROR){ + err_msg.Format(_T("Failed to get TCP Table %s"), GetLastError()); + free(pTCPTable); + m_lbListBox.AddString(err_msg); + return err_msg; + } + } + + if(result != NO_ERROR){ + err_msg.Format(_T("Failed to get size estimation %s"), GetLastError()); + m_lbListBox.AddString(err_msg); + return err_msg; + } + + for(DWORD i = 0; i < ((PMIB_TCPTABLE_OWNER_MODULE)pTCPTable)->dwNumEntries; i++) + { + MIB_TCPROW_OWNER_MODULE module = ((PMIB_TCPTABLE_OWNER_MODULE)pTCPTable)->table[i]; + if(SrcPid == module.dwOwningPid) + { + if(module.dwState != MIB_TCP_STATE_LISTEN) + { + CString t1; + int t2; + BOOL trance; + trance = TRUE; + t1.Format(_T("%d.%d.%d.%d"), + (htonl(module.dwRemoteAddr) >> 24) & 0xFF, + (htonl(module.dwRemoteAddr) >> 16) & 0xFF, + (htonl(module.dwRemoteAddr) >> 8) & 0xFF, + (htonl(module.dwRemoteAddr)) & 0xFF); + t2 = (unsigned int)htons((short)module.dwRemotePort); + + for(int i=0; i < (int)m_vNetinfo.size(); i++) + { + if(m_vNetinfo[i].IP == t1 && m_vNetinfo[i].PORT == t2 ) + { + trance = FALSE; + } + } + + if(trance || m_vNetinfo.size() == 0) + { + NETINFO tinfo; + tinfo.IP = t1; + tinfo.PORT = t2; + m_vNetinfo.push_back(tinfo); + } + + CString add_msg; + m_strIP = t1; + m_nPORT = t2; + add_msg.Format(_T("IP : %s / PORT : %d"), m_strIP.GetBuffer(), m_nPORT); + + m_lbListBox.AddString(add_msg); + } + } + } + + if(pTCPTable != NULL) + { + free(pTCPTable); + } + + err_msg.Empty(); + + return err_msg; +} + +void CMFC_PIDINFO_TrainingDlg::OnTimer(UINT_PTR nIDEvent) +{ + // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. + + + switch(nIDEvent) + { + case IP_PORT_RELOAD: + { + CString t; + + t = GetPid2Info(m_dwPid); + + + if(!t.IsEmpty()) + { + m_lbListBox.AddString(t); + } + + break; + } + case SCREEN_RELOAD: + { + HWND hwnd = GetWindowHandle(m_dwPid); + + HWND2IMG(hwnd); + break; + } + } + + + CDialog::OnTimer(nIDEvent); +} + +void CMFC_PIDINFO_TrainingDlg::OnBnClickedButtonVector() +{ + // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + + m_lbVector.ResetContent(); + + CString ttt; + + for(int i=0; i < (int)m_vNetinfo.size(); i++) + { + ttt.Format(_T("IP : %s / PORT : %d"), m_vNetinfo[i].IP.GetBuffer(), m_vNetinfo[i].PORT); + m_lbVector.AddString(ttt); + } +} + +HWND CMFC_PIDINFO_TrainingDlg::GetWindowHandle(DWORD processid) +{ + HWND tmpHwnd = ::FindWindow(NULL, NULL); + DWORD idProc = 0; + + while(tmpHwnd!= NULL) + { + if( ::GetParent(tmpHwnd) == NULL ) // ÃÖ»óÀ§ ÇÚµéÀÎÁö üũ, ¹öư µîµµ ÇÚµéÀ» °¡Áú ¼ö ÀÖÀ¸¹Ç·Î ¹«½ÃÇϱâ À§ÇØ + { + GetWindowThreadProcessId( tmpHwnd, &idProc ); + if( processid == idProc) + { + return tmpHwnd; + } + } + tmpHwnd = ::GetWindow(tmpHwnd, GW_HWNDNEXT); // ´ÙÀ½ ÇÚµé ã±â + } + + return tmpHwnd; +} + +void CMFC_PIDINFO_TrainingDlg::OnBnClickedButtonPrtsc() +{ + // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + + HWND m_hwnd_f = GetWindowHandle(m_dwPid); + + CString add_msg; + add_msg.Format(_T("HWND : %x"), m_hwnd_f); + m_lbListBox.AddString(add_msg); + + if(m_hwnd_f == NULL) + { + m_lbListBox.AddString(_T("ÇÚµéÀ» ãÁö ¸øÇÏ¿´½À´Ï´Ù.")); + m_lbListBox.AddString(_T("(âÀÌ ¿ÏÀüÈ÷ ÄÑÁøÈÄ¿¡ ´Ù½Ã ½Ãµµ ÇØº¸¼¼¿ä)")); + return; + } + + //ĸ󴩸£±â + INPUT inp[4]; + ZeroMemory(inp, sizeof(inp)); + + //press the VK_MENU key + inp[0].type = INPUT_KEYBOARD; + inp[0].ki.wVk = VK_MENU; + + //press the VK_SNAPSHOT key + inp[1].type = INPUT_KEYBOARD; + inp[1].ki.wVk = VK_SNAPSHOT; + + //release the VK_SNAPSHOT key + inp[2] = inp[1]; + inp[2].ki.dwFlags |= KEYEVENTF_KEYUP; + + //release the VK_MENU key + inp[3] = inp[0]; + inp[3].ki.dwFlags |= KEYEVENTF_KEYUP; + + //simulate keyboard events and check success of function + SendInput(4, inp, sizeof(INPUT)); + + AddClipboardFormatListener(GetSafeHwnd()); + + m_bSnapKeyState = TRUE; + //ĸ󴩸£±â ³¡ + + static D3DDISPLAYMODE d3ddm; + + if(!m_D3state) + { + g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ); + + g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm); + + D3DPRESENT_PARAMETERS d3dpp; + ZeroMemory( &d3dpp, sizeof(d3dpp) ); + + d3dpp.Windowed = TRUE; + d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; + d3dpp.BackBufferFormat = d3ddm.Format; + d3dpp.EnableAutoDepthStencil = TRUE; + d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; + d3dpp.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL; + d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; + + g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hwnd_f, + D3DCREATE_SOFTWARE_VERTEXPROCESSING, + //D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE, + &d3dpp, &g_pd3dDevice ); + + m_D3state = TRUE; + } + + CString sizz; + sizz.Format(_T("ÇöÀçÇØ»óµµ == W : %d, H : %d"), GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); + m_lbListBox.AddString(sizz); + + HWND2IMG(m_hwnd_f); + + //CaptureScreen(g_pd3dDevice, d3ddm, "ÇÔ¼ö¾È¿¡¼­ ÀÛ¼ºµÊ"); + //CaptureScreen2(g_pd3dDevice, d3ddm, "ÇÔ¼ö¾È¿¡¼­ ÀÛ¼ºµÊ"); + //CaptureScreen(g_pd3dDevice, d3ddm, m_hwnd_f, "ÇÔ¼ö¾È¿¡¼­ ÀÛ¼ºµÊ"); + //CaptureScreen2(g_pd3dDevice, d3ddm, m_hwnd_f, "ÇÔ¼ö¾È¿¡¼­ ÀÛ¼ºµÊ"); +} + +BOOL CMFC_PIDINFO_TrainingDlg::HWND2IMG(HWND DsthWnd) +{ + CDC memDC; + CDC *pDC = CDC::FromHandle(::GetDC(DsthWnd)); + + //CreateOffscreenPlainSurface(); + //IDirect3DSurface9 + + CBitmap MyBitmap, *pOld; + memDC.CreateCompatibleDC(pDC); + + CRect rect; + ::GetClientRect(DsthWnd, &rect); + + CString ttt; + ttt.Format(_T("Width : %d, Height : %d"), rect.Width(), rect.Height()); + m_lbListBox.AddString(ttt); + + MyBitmap.CreateCompatibleBitmap(pDC, rect.Width(),rect.Height()); // È­¸é¿¡¼­ 256*256¸¸ °¡Á®¿É´Ï´Ù. + + pOld = memDC.SelectObject(&MyBitmap); + + + memDC.BitBlt(0, 0, rect.Width(), rect.Height(), pDC, 0, 0, SRCCOPY); + + memDC.SelectObject(pOld); + + ReleaseDC(&memDC); + + CImage image; // CimageÆÄÀÏÀ» ½á¼­ ½±°Ô bmpÈ­ ½Ãŵ´Ï´Ù. + image.Attach(MyBitmap); + + CString filename; + + CTime filenameset; + filenameset = CTime::GetCurrentTime(); + + filename = filenameset.Format("%y%m%d%H%M%S"); + filename += _T(".png"); + + image.Save(filename); + + return 0; +} + +LRESULT CMFC_PIDINFO_TrainingDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) +{ + // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. + + switch( message ) + { + case WM_USER+1: + { + OnBnClickedButtonPrtsc(); + break; + } + } + + return CDialog::WindowProc(message, wParam, lParam); +} + +void CMFC_PIDINFO_TrainingDlg::OnBnClickedCheckAutopic() +{ + // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + + UpdateData(TRUE); + + if(m_bScreenAutoCap) + { + SetTimer(SCREEN_RELOAD, 1000, 0); + m_lbListBox.AddString(_T("ÀÚµ¿½º¼¦ ½ÃÇà")); + } + else + { + KillTimer(SCREEN_RELOAD); + m_lbListBox.AddString(_T("ÀÚµ¿½º¼¦ Á¾·á")); + } +} + +BOOL CMFC_PIDINFO_TrainingDlg::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd) +{ + // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. + + return CDialog::Create(lpszTemplateName, pParentWnd); +} + +void CMFC_PIDINFO_TrainingDlg::OnDestroy() +{ + CDialog::OnDestroy(); + + // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + + if(m_D3state) + { + g_pD3D->Release(); + g_pd3dDevice->Release(); + } +} + +void CMFC_PIDINFO_TrainingDlg::OnClipboardUpdate() +{ + // ÀÌ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é Windows Vista ÀÌ»óÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù. + // _WIN32_WINNT ±âÈ£´Â 0x0600º¸´Ù Å©°Å³ª °°¾Æ¾ß ÇÕ´Ï´Ù. + // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. + + if(m_bSnapKeyState) + { + CString filename; + filename = _T("Èå¹Ë.bmp"); + + CString err_msg; + if(!ClipBoard2IMG(filename, NULL, &err_msg)) + { + m_lbListBox.AddString(err_msg); + } + } + + m_bSnapKeyState = FALSE; + RemoveClipboardFormatListener(GetSafeHwnd()); + + CDialog::OnClipboardUpdate(); +} + diff --git a/MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.h b/MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.h new file mode 100644 index 0000000..b5d9ea9 --- /dev/null +++ b/MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.h @@ -0,0 +1,81 @@ + +// MFC_PIDINFO_TrainingDlg.h : Çì´õ ÆÄÀÏ +// + +#pragma once +#include "afxwin.h" + +#ifdef _DEBUG + #define DEF_DLL_NAME "KeyHookForCapture_D.dll" +#else + #define DEF_DLL_NAME "KeyHookForCapture.dll" +#endif + +#define DEF_HOOKSTART "HookStart" +#define DEF_HOOKSTOP "HookStop" + +typedef void (*PFN_HOOKSTART)(); +typedef void (*PFN_HOOKSTOP)(); + +// CMFC_PIDINFO_TrainingDlg ´ëÈ­ »óÀÚ +class CMFC_PIDINFO_TrainingDlg : public CDialog +{ +// »ý¼ºÀÔ´Ï´Ù. +public: + CMFC_PIDINFO_TrainingDlg(CWnd* pParent = NULL); // Ç¥ÁØ »ý¼ºÀÚÀÔ´Ï´Ù. + +// ´ëÈ­ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù. + enum { IDD = IDD_MFC_PIDINFO_TRAINING_DIALOG }; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. + + +// ±¸ÇöÀÔ´Ï´Ù. +protected: + HICON m_hIcon; + + // »ý¼ºµÈ ¸Þ½ÃÁö ¸Ê ÇÔ¼ö + virtual BOOL OnInitDialog(); + afx_msg void OnSysCommand(UINT nID, LPARAM lParam); + afx_msg void OnPaint(); + afx_msg HCURSOR OnQueryDragIcon(); + DECLARE_MESSAGE_MAP() +public: + CListBox m_lbListBox; + CString m_szFilePath; + afx_msg void OnBnClickedOk(); + afx_msg void OnDropFiles(HDROP hDropInfo); + DWORD m_dwPid; + BOOL initFunctions(void); + CString m_strIP; + afx_msg void OnBnClickedButtonReload(); + CString GetPid2Info(DWORD SrcPid); + BOOL m_bLoadState; + afx_msg void OnTimer(UINT_PTR nIDEvent); + CListBox m_lbVector; + afx_msg void OnBnClickedButtonVector(); + int m_nPORT; + HWND GetWindowHandle(DWORD processid); + afx_msg void OnBnClickedButtonPrtsc(); + BOOL HWND2IMG(HWND DsthWnd); + BOOL m_bScreenAutoCap; +protected: + virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); + +private: + HINSTANCE hDll; // ÈÅ ÇÁ·Î½ÃÁ® DLL ÇÚµé + PFN_HOOKSTART HookStart; // ÈÅ ¼³Ä¡ ÇÔ¼ö Æ÷ÀÎÅÍ + PFN_HOOKSTOP HookStop; // ÈÅ Á¦°Å ÇÔ¼ö Æ÷ÀÎÅÍ +public: + afx_msg void OnBnClickedCheckAutopic(); + virtual BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL); +protected: +// virtual void PostNcDestroy(); +public: + HWND m_hwnd; + BOOL m_D3state; + afx_msg void OnDestroy(); + afx_msg void OnClipboardUpdate(); + BOOL m_bSnapKeyState; +}; diff --git a/MFC_PIDINFO_Training/ReadMe.txt b/MFC_PIDINFO_Training/ReadMe.txt new file mode 100644 index 0000000..0c68256 --- /dev/null +++ b/MFC_PIDINFO_Training/ReadMe.txt @@ -0,0 +1,96 @@ +================================================================================ + MFC ¶óÀ̺귯¸® : MFC_PIDINFO_Training ÇÁ·ÎÁ§Æ® °³¿ä +=============================================================================== + +ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ ÀÌ MFC_PIDINFO_Training ÀÀ¿ë ÇÁ·Î±×·¥À» +¸¸µé¾ú½À´Ï´Ù. ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥Àº MFC(Microsoft Foundation Classes)ÀÇ +±âº»ÀûÀÎ »ç¿ë¹ýÀ» º¸¿© ÁÖ¸ç ÀÀ¿ë ÇÁ·Î±×·¥ ÀÛ¼ºÀ» À§ÇÑ Ãâ¹ßÁ¡À» Á¦°øÇÕ´Ï´Ù. + +ÀÌ ÆÄÀÏ¿¡´Â MFC_PIDINFO_Training ÀÀ¿ë ÇÁ·Î±×·¥À» ±¸¼ºÇÏ´Â °¢ ÆÄÀÏ¿¡ ´ëÇÑ +¿ä¾à ¼³¸íÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. + +MFC_PIDINFO_Training.vcproj + ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¸¦ »ç¿ëÇÏ¿© »ý¼ºµÈ VC++ ÇÁ·ÎÁ§Æ®ÀÇ ÁÖ ÇÁ·ÎÁ§Æ® ÆÄÀÏÀÔ´Ï´Ù. + ÆÄÀÏÀ» »ý¼ºÇÑ Visual C++ ¹öÀü¿¡ ´ëÇÑ Á¤º¸¿Í + ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¸¦ »ç¿ëÇÏ¿© ¼±ÅÃÇÑ Ç÷§Æû, ±¸¼º ¹× ÇÁ·ÎÁ§Æ® + ±â´É¿¡ ´ëÇÑ Á¤º¸°¡ µé¾î ÀÖ½À´Ï´Ù. + +MFC_PIDINFO_Training.h + ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ±âº» Çì´õ ÆÄÀÏÀÔ´Ï´Ù. ¿©±â¿¡´Â ´Ù¸¥ ÇÁ·ÎÁ§Æ® °ü·Ã + Çì´õ(Resource.h Æ÷ÇÔ)°¡ µé¾î ÀÖ°í CMFC_PIDINFO_TrainingApp ÀÀ¿ë ÇÁ·Î±×·¥ + Ŭ·¡½º¸¦ ¼±¾ðÇÕ´Ï´Ù. + +MFC_PIDINFO_Training.cpp + ÀÀ¿ë ÇÁ·Î±×·¥ Ŭ·¡½º CMFC_PIDINFO_TrainingAppÀÌ(°¡) µé¾î ÀÖ´Â ±âº» ÀÀ¿ë ÇÁ·Î±×·¥ + ¼Ò½º ÆÄÀÏÀÔ´Ï´Ù. + +MFC_PIDINFO_Training.rc + ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÏ´Â ¸ðµç Microsoft Windows ¸®¼Ò½ºÀÇ ¸ñ·ÏÀÔ´Ï´Ù. + ¿©±â¿¡´Â RES ÇÏÀ§ µð·ºÅ͸®¿¡ ÀúÀåµÈ ¾ÆÀÌÄÜ, ºñÆ®¸Ê ¹× Ä¿¼­°¡ + Æ÷ÇԵ˴ϴÙ. ÀÌ ÆÄÀÏÀº Microsoft Visual C++¿¡¼­ + Á÷Á¢ ÆíÁýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·ÎÁ§Æ® ¸®¼Ò½º´Â 1042¿¡ ÀÖ½À´Ï´Ù. + +res\MFC_PIDINFO_Training.ico + ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¾ÆÀÌÄÜÀ¸·Î »ç¿ëµÇ´Â ¾ÆÀÌÄÜ ÆÄÀÏÀÔ´Ï´Ù. ÀÌ ¾ÆÀÌÄÜÀº + ÁÖ ¸®¼Ò½º ÆÄÀÏÀÎ MFC_PIDINFO_Training.rc¿¡ ÀÇÇØ Æ÷ÇԵ˴ϴÙ. + +res\MFC_PIDINFO_Training.rc2 + ÀÌ ÆÄÀÏ¿¡´Â Microsoft Visual C++ ÀÌ¿ÜÀÇ ´Ù¸¥ µµ±¸¿¡¼­ ÆíÁýÇÑ ¸®¼Ò½º°¡ + Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ¸®¼Ò½º ÆíÁý±â·Î ÆíÁýÇÒ ¼ö ¾ø´Â ¸ðµç ¸®¼Ò½º´Â + ÀÌ ÆÄÀÏ¿¡ ³Ö¾î¾ß ÇÕ´Ï´Ù. + + +///////////////////////////////////////////////////////////////////////////// + +ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ ÇϳªÀÇ ´ëÈ­ »óÀÚ Å¬·¡½º°¡ ¸¸µé¾îÁý´Ï´Ù. + +MFC_PIDINFO_TrainingDlg.h, MFC_PIDINFO_TrainingDlg.cpp - ´ëÈ­ »óÀÚ + ÀÌ ÆÄÀÏ¿¡´Â CMFC_PIDINFO_TrainingDlg Ŭ·¡½º°¡ µé¾î ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º´Â + ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ ´ëÈ­ »óÀÚ µ¿ÀÛÀ» Á¤ÀÇÇÕ´Ï´Ù. ´ëÈ­ »óÀÚÀÇ ÅÛÇø´Àº + Microsoft Visual C++¿¡¼­ ÆíÁýÇÒ ¼ö ÀÖ´Â MFC_PIDINFO_Training.rc¿¡ ÀÖ½À´Ï´Ù. + + +///////////////////////////////////////////////////////////////////////////// + +±âŸ ±â´É: + +ActiveX ÄÁÆ®·Ñ + ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ ActiveX ÄÁÆ®·ÑÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÕ´Ï´Ù. + +Windows ¼ÒÄÏ + ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ TCP/IP ³×Æ®¿öÅ©¸¦ »ç¿ëÇÑ Åë½ÅÀ» Áö¿øÇÕ´Ï´Ù. + +///////////////////////////////////////////////////////////////////////////// + +±âŸ Ç¥ÁØ ÆÄÀÏ: + +StdAfx.h, StdAfx.cpp + ÀÌ ÆÄÀÏÀº ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ(PCH) ÆÄÀÏÀÎ MFC_PIDINFO_Training.pch¿Í + ¹Ì¸® ÄÄÆÄÀÏµÈ Çü½Ä ÆÄÀÏÀÎ StdAfx.obj¸¦ ºôµåÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. + +Resource.h + »õ ¸®¼Ò½º ID¸¦ Á¤ÀÇÇϴ ǥÁØ Çì´õ ÆÄÀÏÀÔ´Ï´Ù. + Microsoft Visual C++¿¡¼­ ÀÌ ÆÄÀÏÀ» ÀÐ°í ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù. + +MFC_PIDINFO_Training.manifest + ÀÀ¿ë ÇÁ·Î±×·¥ ¸Å´ÏÆä½ºÆ® ÆÄÀÏÀº Windows XP¿¡¼­ ƯÁ¤ ¹öÀüÀÇ Side-by-Side + ¾î¼Àºí¸®¿¡ ´ëÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ Á¾¼Ó¼ºÀ» ¼³¸íÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. ·Î´õ´Â ÀÌ Á¤º¸¸¦ + »ç¿ëÇÏ¿© ¾î¼Àºí¸® ij½Ã¿¡¼­ ÀûÀýÇÑ ¾î¼Àºí¸®¸¦ ·ÎµåÇϰųª ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ Àü¿ë + ¾î¼Àºí¸®¸¦ ·ÎµåÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ ¸Å´ÏÆä½ºÆ®´Â ÀÀ¿ë ÇÁ·Î±×·¥ ½ÇÇà ÆÄÀϰú °°Àº + Æú´õ¿¡ ¼³Ä¡µÈ ¿ÜºÎ .manifest ÆÄÀÏ·Î Àç¹èÆ÷¸¦ À§ÇØ Æ÷ÇԵǰųª ¸®¼Ò½ºÀÇ ÇüÅ·Π+ ½ÇÇà ÆÄÀÏ¿¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. +///////////////////////////////////////////////////////////////////////////// + +±âŸ Âü°í: + +ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç´Â "TODO:"¸¦ »ç¿ëÇÏ¿© Ãß°¡Çϰųª »ç¿ëÀÚ ÁöÁ¤ÇØ¾ß ÇÏ´Â +¼Ò½º ÄÚµå ºÎºÐÀ» ³ªÅ¸³À´Ï´Ù. + +ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ °øÀ¯ DLLÀÇ MFC¸¦ »ç¿ëÇÏ´Â °æ¿ì +ÇØ´ç MFC DLLÀ» ´Ù½Ã ¹èÆ÷ÇØ¾ß ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¾ð¾î°¡ +¿î¿µ üÁ¦ÀÇ ·ÎͰú ´Ù¸¥ °æ¿ì +Áö¿ªÈ­µÈ ÇØ´ç ¸®¼Ò½º MFC90XXX.DLLµµ ´Ù½Ã ¹èÆ÷ÇØ¾ß ÇÕ´Ï´Ù. +ÀÌ µÎ °¡Áö Ç׸ñ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº MSDN ¼³¸í¼­¿¡¼­ +Visual C++ ÀÀ¿ë ÇÁ·Î±×·¥ ´Ù½Ã ¹èÆ÷¿¡ ´ëÇÑ ´Ü¿øÀ» ÂüÁ¶ÇϽʽÿÀ. + +///////////////////////////////////////////////////////////////////////////// diff --git a/MFC_PIDINFO_Training/UserImages.bmp b/MFC_PIDINFO_Training/UserImages.bmp new file mode 100644 index 0000000..e69de29 diff --git a/MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.ico b/MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.ico new file mode 100644 index 0000000..d56fbcd Binary files /dev/null and b/MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.ico differ diff --git a/MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.rc2 b/MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.rc2 new file mode 100644 index 0000000..ace1af3 --- /dev/null +++ b/MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.rc2 @@ -0,0 +1,13 @@ +// +// MFC_PIDINFO_Training.RC2 - Microsoft Visual C++¿¡¼­ Á÷Á¢ ÆíÁýÇÏÁö ¾Ê´Â ¸®¼Ò½º +// + +#ifdef APSTUDIO_INVOKED +#error ÀÌ ÆÄÀÏÀº Microsoft Visual C++¿¡¼­ ÆíÁýÇÒ ¼ö ¾ø½À´Ï´Ù. +#endif //APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// ¿©±â¿¡ ¼öµ¿À¸·Î ÆíÁýÇÑ ¸®¼Ò½º¸¦ Ãß°¡ÇÕ´Ï´Ù. + +///////////////////////////////////////////////////////////////////////////// diff --git a/MFC_PIDINFO_Training/resource.h b/MFC_PIDINFO_Training/resource.h new file mode 100644 index 0000000..86a08a8 --- /dev/null +++ b/MFC_PIDINFO_Training/resource.h @@ -0,0 +1,30 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by MFC_PIDINFO_Training.rc +// +#define IDM_ABOUTBOX 0x0010 +#define IDD_ABOUTBOX 100 +#define IDS_ABOUTBOX 101 +#define IDD_MFC_PIDINFO_TRAINING_DIALOG 102 +#define IDP_SOCKETS_INIT_FAILED 103 +#define IDR_MAINFRAME 128 +#define IDC_LIST_INFO 1000 +#define IDC_EDIT_FILEPATH 1001 +#define IDC_BUTTON_RELOAD 1003 +#define IDC_LIST_VECTOR 1004 +#define IDC_BUTTON_VECTOR 1005 +#define IDC_BUTTON1 1006 +#define IDC_BUTTON_PRTSC 1006 +#define IDC_CHECK1 1008 +#define IDC_CHECK_AUTOPIC 1008 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 130 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1009 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/MFC_PIDINFO_Training/stdafx.cpp b/MFC_PIDINFO_Training/stdafx.cpp new file mode 100644 index 0000000..1469f5a --- /dev/null +++ b/MFC_PIDINFO_Training/stdafx.cpp @@ -0,0 +1,8 @@ + +// stdafx.cpp : Ç¥ÁØ Æ÷ÇÔ ÆÄÀϸ¸ µé¾î ÀÖ´Â ¼Ò½º ÆÄÀÏÀÔ´Ï´Ù. +// MFC_PIDINFO_Training.pch´Â ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ°¡ µË´Ï´Ù. +// stdafx.obj¿¡´Â ¹Ì¸® ÄÄÆÄÀÏµÈ Çü½Ä Á¤º¸°¡ Æ÷ÇԵ˴ϴÙ. + +#include "stdafx.h" + + diff --git a/MFC_PIDINFO_Training/stdafx.h b/MFC_PIDINFO_Training/stdafx.h new file mode 100644 index 0000000..c5f07ea --- /dev/null +++ b/MFC_PIDINFO_Training/stdafx.h @@ -0,0 +1,53 @@ + +// stdafx.h : ÀÚÁÖ »ç¿ëÇÏÁö¸¸ ÀÚÁÖ º¯°æµÇÁö´Â ¾Ê´Â +// Ç¥ÁØ ½Ã½ºÅÛ Æ÷ÇÔ ÆÄÀÏ ¹× ÇÁ·ÎÁ§Æ® °ü·Ã Æ÷ÇÔ ÆÄÀÏÀÌ +// µé¾î ÀÖ´Â Æ÷ÇÔ ÆÄÀÏÀÔ´Ï´Ù. + +#pragma once + +#ifndef _SECURE_ATL +#define _SECURE_ATL 1 +#endif + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // °ÅÀÇ »ç¿ëµÇÁö ¾Ê´Â ³»¿ëÀº Windows Çì´õ¿¡¼­ Á¦¿ÜÇÕ´Ï´Ù. +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // ÀϺΠCString »ý¼ºÀÚ´Â ¸í½ÃÀûÀ¸·Î ¼±¾ðµË´Ï´Ù. + +// MFCÀÇ °øÅë ºÎºÐ°ú ¹«½Ã °¡´ÉÇÑ °æ°í ¸Þ½ÃÁö¿¡ ´ëÇÑ ¼û±â±â¸¦ ÇØÁ¦ÇÕ´Ï´Ù. +#define _AFX_ALL_WARNINGS + +#include // MFC ÇÙ½É ¹× Ç¥ÁØ ±¸¼º ¿ä¼ÒÀÔ´Ï´Ù. +#include // MFC È®ÀåÀÔ´Ï´Ù. + + +#include // MFC ÀÚµ¿È­ Ŭ·¡½ºÀÔ´Ï´Ù. + + + +#ifndef _AFX_NO_OLE_SUPPORT +#include // Internet Explorer 4 °ø¿ë ÄÁÆ®·Ñ¿¡ ´ëÇÑ MFC Áö¿øÀÔ´Ï´Ù. +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // Windows °ø¿ë ÄÁÆ®·Ñ¿¡ ´ëÇÑ MFC Áö¿øÀÔ´Ï´Ù. +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include // MFCÀÇ ¸®º» ¹× ÄÁÆ®·Ñ ¸·´ë Áö¿ø + + +#include // MFC ¼ÒÄÏ È®Àå + +#ifdef _UNICODE +#if defined _M_IX86 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_IA64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_X64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#else +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif +#endif \ No newline at end of file diff --git a/MFC_PIDINFO_Training/targetver.h b/MFC_PIDINFO_Training/targetver.h new file mode 100644 index 0000000..75a9f56 --- /dev/null +++ b/MFC_PIDINFO_Training/targetver.h @@ -0,0 +1,26 @@ + +#pragma once + +// ´ÙÀ½ ¸ÅÅ©·Î´Â ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Á¤ÀÇÇÕ´Ï´Ù. ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀº +// ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â µ¥ ÇÊ¿äÇÑ ±â´ÉÀÌ Æ÷ÇÔµÈ °¡Àå ºü¸¥ ¹öÀüÀÇ Windows, Internet Explorer +// µîÀÔ´Ï´Ù. ÀÌ ¸ÅÅ©·Î´Â ÁöÁ¤µÈ ¹öÀü ÀÌ»óÀÇ Ç÷§Æû ¹öÀü¿¡¼­ »ç¿ë °¡´ÉÇÑ ¸ðµç ±â´ÉÀ» Ȱ¼ºÈ­ÇØ¾ß +// ÀÛµ¿ÇÕ´Ï´Ù. + +// ¾Æ·¡ ÁöÁ¤µÈ Ç÷§Æû¿¡ ¿ì¼±ÇÏ´Â Ç÷§ÆûÀ» ´ë»óÀ¸·Î ÇÏ´Â °æ¿ì ´ÙÀ½ Á¤ÀǸ¦ ¼öÁ¤ÇϽʽÿÀ. +// ´Ù¸¥ Ç÷§Æû¿¡ »ç¿ëµÇ´Â ÇØ´ç °ªÀÇ ÃֽŠÁ¤º¸´Â MSDNÀ» ÂüÁ¶ÇϽʽÿÀ. +#ifndef WINVER // ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Windows Vista·Î ÁöÁ¤ÇÕ´Ï´Ù. +#define WINVER 0x0600 // ´Ù¸¥ ¹öÀüÀÇ Windows¿¡ ¸Âµµ·Ï ÀûÇÕÇÑ °ªÀ¸·Î º¯°æÇØ ÁֽʽÿÀ. +#endif + +#ifndef _WIN32_WINNT // ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Windows Vista·Î ÁöÁ¤ÇÕ´Ï´Ù. +#define _WIN32_WINNT 0x0600 // ´Ù¸¥ ¹öÀüÀÇ Windows¿¡ ¸Âµµ·Ï ÀûÇÕÇÑ °ªÀ¸·Î º¯°æÇØ ÁֽʽÿÀ. +#endif + +#ifndef _WIN32_WINDOWS // ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Windows 98·Î ÁöÁ¤ÇÕ´Ï´Ù. +#define _WIN32_WINDOWS 0x0410 // Windows Me ÀÌ»ó¿¡ ¸Âµµ·Ï ÀûÇÕÇÑ °ªÀ¸·Î º¯°æÇØ ÁֽʽÿÀ. +#endif + +#ifndef _WIN32_IE // ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Internet Explorer 7.0À¸·Î ÁöÁ¤ÇÕ´Ï´Ù. +#define _WIN32_IE 0x0700 // ´Ù¸¥ ¹öÀüÀÇ IE¿¡ ¸Âµµ·Ï ÀûÇÕÇÑ °ªÀ¸·Î º¯°æÇØ ÁֽʽÿÀ. +#endif + diff --git a/TestClient/ConnectSocket.cpp b/TestClient/ConnectSocket.cpp new file mode 100644 index 0000000..6c55e85 --- /dev/null +++ b/TestClient/ConnectSocket.cpp @@ -0,0 +1,42 @@ +// ConnectSocket.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. +// + +#include "stdafx.h" +#include "ConnectSocket.h" + +// CConnectSocket + +CConnectSocket::CConnectSocket() +{ + ServerConnectState = NULL; +} + +CConnectSocket::~CConnectSocket() +{ +} + + +// CConnectSocket ¸â¹ö ÇÔ¼ö + + +void CConnectSocket::OnClose(int nErrorCode) +{ + // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. + + ShutDown(); + Close(); + + ServerConnectState = FALSE; + + CSocket::OnClose(nErrorCode); + + AfxMessageBox(_T("ERROR: Disconnected from server!")); + //::PostQuitMessage(0); +} + +void CConnectSocket::OnReceive(int nErrorCode) +{ + // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. + + CSocket::OnReceive(nErrorCode); +} diff --git a/TestClient/ConnectSocket.h b/TestClient/ConnectSocket.h new file mode 100644 index 0000000..1b46c56 --- /dev/null +++ b/TestClient/ConnectSocket.h @@ -0,0 +1,14 @@ +#pragma once +#include "afxwin.h" +// CConnectSocket ¸í·É ´ë»óÀÔ´Ï´Ù. + +class CConnectSocket : public CSocket +{ +public: + CConnectSocket(); + virtual ~CConnectSocket(); + virtual void OnClose(int nErrorCode); + virtual void OnReceive(int nErrorCode); +public: + BOOL ServerConnectState; +}; \ No newline at end of file diff --git a/TestClient/ReadMe.txt b/TestClient/ReadMe.txt new file mode 100644 index 0000000..562fd3e --- /dev/null +++ b/TestClient/ReadMe.txt @@ -0,0 +1,96 @@ +================================================================================ + MFC ¶óÀ̺귯¸® : TestClient ÇÁ·ÎÁ§Æ® °³¿ä +=============================================================================== + +ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ ÀÌ TestClient ÀÀ¿ë ÇÁ·Î±×·¥À» +¸¸µé¾ú½À´Ï´Ù. ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥Àº MFC(Microsoft Foundation Classes)ÀÇ +±âº»ÀûÀÎ »ç¿ë¹ýÀ» º¸¿© ÁÖ¸ç ÀÀ¿ë ÇÁ·Î±×·¥ ÀÛ¼ºÀ» À§ÇÑ Ãâ¹ßÁ¡À» Á¦°øÇÕ´Ï´Ù. + +ÀÌ ÆÄÀÏ¿¡´Â TestClient ÀÀ¿ë ÇÁ·Î±×·¥À» ±¸¼ºÇÏ´Â °¢ ÆÄÀÏ¿¡ ´ëÇÑ +¿ä¾à ¼³¸íÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. + +TestClient.vcproj + ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¸¦ »ç¿ëÇÏ¿© »ý¼ºµÈ VC++ ÇÁ·ÎÁ§Æ®ÀÇ ÁÖ ÇÁ·ÎÁ§Æ® ÆÄÀÏÀÔ´Ï´Ù. + ÆÄÀÏÀ» »ý¼ºÇÑ Visual C++ ¹öÀü¿¡ ´ëÇÑ Á¤º¸¿Í + ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¸¦ »ç¿ëÇÏ¿© ¼±ÅÃÇÑ Ç÷§Æû, ±¸¼º ¹× ÇÁ·ÎÁ§Æ® + ±â´É¿¡ ´ëÇÑ Á¤º¸°¡ µé¾î ÀÖ½À´Ï´Ù. + +TestClient.h + ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ±âº» Çì´õ ÆÄÀÏÀÔ´Ï´Ù. ¿©±â¿¡´Â ´Ù¸¥ ÇÁ·ÎÁ§Æ® °ü·Ã + Çì´õ(Resource.h Æ÷ÇÔ)°¡ µé¾î ÀÖ°í CTestClientApp ÀÀ¿ë ÇÁ·Î±×·¥ + Ŭ·¡½º¸¦ ¼±¾ðÇÕ´Ï´Ù. + +TestClient.cpp + ÀÀ¿ë ÇÁ·Î±×·¥ Ŭ·¡½º CTestClientAppÀÌ(°¡) µé¾î ÀÖ´Â ±âº» ÀÀ¿ë ÇÁ·Î±×·¥ + ¼Ò½º ÆÄÀÏÀÔ´Ï´Ù. + +TestClient.rc + ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÏ´Â ¸ðµç Microsoft Windows ¸®¼Ò½ºÀÇ ¸ñ·ÏÀÔ´Ï´Ù. + ¿©±â¿¡´Â RES ÇÏÀ§ µð·ºÅ͸®¿¡ ÀúÀåµÈ ¾ÆÀÌÄÜ, ºñÆ®¸Ê ¹× Ä¿¼­°¡ + Æ÷ÇԵ˴ϴÙ. ÀÌ ÆÄÀÏÀº Microsoft Visual C++¿¡¼­ + Á÷Á¢ ÆíÁýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·ÎÁ§Æ® ¸®¼Ò½º´Â 1042¿¡ ÀÖ½À´Ï´Ù. + +res\TestClient.ico + ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¾ÆÀÌÄÜÀ¸·Î »ç¿ëµÇ´Â ¾ÆÀÌÄÜ ÆÄÀÏÀÔ´Ï´Ù. ÀÌ ¾ÆÀÌÄÜÀº + ÁÖ ¸®¼Ò½º ÆÄÀÏÀÎ TestClient.rc¿¡ ÀÇÇØ Æ÷ÇԵ˴ϴÙ. + +res\TestClient.rc2 + ÀÌ ÆÄÀÏ¿¡´Â Microsoft Visual C++ ÀÌ¿ÜÀÇ ´Ù¸¥ µµ±¸¿¡¼­ ÆíÁýÇÑ ¸®¼Ò½º°¡ + Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ¸®¼Ò½º ÆíÁý±â·Î ÆíÁýÇÒ ¼ö ¾ø´Â ¸ðµç ¸®¼Ò½º´Â + ÀÌ ÆÄÀÏ¿¡ ³Ö¾î¾ß ÇÕ´Ï´Ù. + + +///////////////////////////////////////////////////////////////////////////// + +ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ ÇϳªÀÇ ´ëÈ­ »óÀÚ Å¬·¡½º°¡ ¸¸µé¾îÁý´Ï´Ù. + +TestClientDlg.h, TestClientDlg.cpp - ´ëÈ­ »óÀÚ + ÀÌ ÆÄÀÏ¿¡´Â CTestClientDlg Ŭ·¡½º°¡ µé¾î ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º´Â + ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ ´ëÈ­ »óÀÚ µ¿ÀÛÀ» Á¤ÀÇÇÕ´Ï´Ù. ´ëÈ­ »óÀÚÀÇ ÅÛÇø´Àº + Microsoft Visual C++¿¡¼­ ÆíÁýÇÒ ¼ö ÀÖ´Â TestClient.rc¿¡ ÀÖ½À´Ï´Ù. + + +///////////////////////////////////////////////////////////////////////////// + +±âŸ ±â´É: + +ActiveX ÄÁÆ®·Ñ + ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ ActiveX ÄÁÆ®·ÑÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÕ´Ï´Ù. + +Windows ¼ÒÄÏ + ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ TCP/IP ³×Æ®¿öÅ©¸¦ »ç¿ëÇÑ Åë½ÅÀ» Áö¿øÇÕ´Ï´Ù. + +///////////////////////////////////////////////////////////////////////////// + +±âŸ Ç¥ÁØ ÆÄÀÏ: + +StdAfx.h, StdAfx.cpp + ÀÌ ÆÄÀÏÀº ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ(PCH) ÆÄÀÏÀÎ TestClient.pch¿Í + ¹Ì¸® ÄÄÆÄÀÏµÈ Çü½Ä ÆÄÀÏÀÎ StdAfx.obj¸¦ ºôµåÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. + +Resource.h + »õ ¸®¼Ò½º ID¸¦ Á¤ÀÇÇϴ ǥÁØ Çì´õ ÆÄÀÏÀÔ´Ï´Ù. + Microsoft Visual C++¿¡¼­ ÀÌ ÆÄÀÏÀ» ÀÐ°í ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù. + +TestClient.manifest + ÀÀ¿ë ÇÁ·Î±×·¥ ¸Å´ÏÆä½ºÆ® ÆÄÀÏÀº Windows XP¿¡¼­ ƯÁ¤ ¹öÀüÀÇ Side-by-Side + ¾î¼Àºí¸®¿¡ ´ëÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ Á¾¼Ó¼ºÀ» ¼³¸íÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. ·Î´õ´Â ÀÌ Á¤º¸¸¦ + »ç¿ëÇÏ¿© ¾î¼Àºí¸® ij½Ã¿¡¼­ ÀûÀýÇÑ ¾î¼Àºí¸®¸¦ ·ÎµåÇϰųª ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ Àü¿ë + ¾î¼Àºí¸®¸¦ ·ÎµåÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ ¸Å´ÏÆä½ºÆ®´Â ÀÀ¿ë ÇÁ·Î±×·¥ ½ÇÇà ÆÄÀϰú °°Àº + Æú´õ¿¡ ¼³Ä¡µÈ ¿ÜºÎ .manifest ÆÄÀÏ·Î Àç¹èÆ÷¸¦ À§ÇØ Æ÷ÇԵǰųª ¸®¼Ò½ºÀÇ ÇüÅ·Π+ ½ÇÇà ÆÄÀÏ¿¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. +///////////////////////////////////////////////////////////////////////////// + +±âŸ Âü°í: + +ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç´Â "TODO:"¸¦ »ç¿ëÇÏ¿© Ãß°¡Çϰųª »ç¿ëÀÚ ÁöÁ¤ÇØ¾ß ÇÏ´Â +¼Ò½º ÄÚµå ºÎºÐÀ» ³ªÅ¸³À´Ï´Ù. + +ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ °øÀ¯ DLLÀÇ MFC¸¦ »ç¿ëÇÏ´Â °æ¿ì +ÇØ´ç MFC DLLÀ» ´Ù½Ã ¹èÆ÷ÇØ¾ß ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¾ð¾î°¡ +¿î¿µ üÁ¦ÀÇ ·ÎͰú ´Ù¸¥ °æ¿ì +Áö¿ªÈ­µÈ ÇØ´ç ¸®¼Ò½º MFC90XXX.DLLµµ ´Ù½Ã ¹èÆ÷ÇØ¾ß ÇÕ´Ï´Ù. +ÀÌ µÎ °¡Áö Ç׸ñ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº MSDN ¼³¸í¼­¿¡¼­ +Visual C++ ÀÀ¿ë ÇÁ·Î±×·¥ ´Ù½Ã ¹èÆ÷¿¡ ´ëÇÑ ´Ü¿øÀ» ÂüÁ¶ÇϽʽÿÀ. + +///////////////////////////////////////////////////////////////////////////// diff --git a/TestClient/TestClient.cpp b/TestClient/TestClient.cpp new file mode 100644 index 0000000..0313c99 --- /dev/null +++ b/TestClient/TestClient.cpp @@ -0,0 +1,85 @@ + +// TestClient.cpp : ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ Å¬·¡½º µ¿ÀÛÀ» Á¤ÀÇÇÕ´Ï´Ù. +// + +#include "stdafx.h" +#include "TestClient.h" +#include "TestClientDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CTestClientApp + +BEGIN_MESSAGE_MAP(CTestClientApp, CWinAppEx) + ON_COMMAND(ID_HELP, &CWinApp::OnHelp) +END_MESSAGE_MAP() + + +// CTestClientApp »ý¼º + +CTestClientApp::CTestClientApp() +{ + // TODO: ¿©±â¿¡ »ý¼º Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + // InitInstance¿¡ ¸ðµç Áß¿äÇÑ ÃʱâÈ­ ÀÛ¾÷À» ¹èÄ¡ÇÕ´Ï´Ù. +} + + +// À¯ÀÏÇÑ CTestClientApp °³Ã¼ÀÔ´Ï´Ù. + +CTestClientApp theApp; + + +// CTestClientApp ÃʱâÈ­ + +BOOL CTestClientApp::InitInstance() +{ + // ÀÀ¿ë ÇÁ·Î±×·¥ ¸Å´ÏÆä½ºÆ®°¡ ComCtl32.dll ¹öÀü 6 ÀÌ»óÀ» »ç¿ëÇÏ¿© ºñÁÖ¾ó ½ºÅ¸ÀÏÀ» + // »ç¿ëÇϵµ·Ï ÁöÁ¤ÇÏ´Â °æ¿ì, Windows XP »ó¿¡¼­ ¹Ýµå½Ã InitCommonControlsEx()°¡ ÇÊ¿äÇÕ´Ï´Ù. + // InitCommonControlsEx()¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é âÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù. + INITCOMMONCONTROLSEX InitCtrls; + InitCtrls.dwSize = sizeof(InitCtrls); + // ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¸ðµç °ø¿ë ÄÁÆ®·Ñ Ŭ·¡½º¸¦ Æ÷ÇÔÇϵµ·Ï + // ÀÌ Ç׸ñÀ» ¼³Á¤ÇϽʽÿÀ. + InitCtrls.dwICC = ICC_WIN95_CLASSES; + InitCommonControlsEx(&InitCtrls); + + CWinAppEx::InitInstance(); + + if (!AfxSocketInit()) + { + AfxMessageBox(IDP_SOCKETS_INIT_FAILED); + return FALSE; + } + + AfxEnableControlContainer(); + + // Ç¥ÁØ ÃʱâÈ­ + // ÀÌµé ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê°í ÃÖÁ¾ ½ÇÇà ÆÄÀÏÀÇ Å©±â¸¦ ÁÙÀÌ·Á¸é + // ¾Æ·¡¿¡¼­ ÇÊ¿ä ¾ø´Â ƯÁ¤ ÃʱâÈ­ + // ·çƾÀ» Á¦°ÅÇØ¾ß ÇÕ´Ï´Ù. + // ÇØ´ç ¼³Á¤ÀÌ ÀúÀåµÈ ·¹Áö½ºÆ®¸® ۸¦ º¯°æÇϽʽÿÀ. + // TODO: ÀÌ ¹®ÀÚ¿­À» ȸ»ç ¶Ç´Â Á¶Á÷ÀÇ À̸§°ú °°Àº + // ÀûÀýÇÑ ³»¿ëÀ¸·Î ¼öÁ¤ÇØ¾ß ÇÕ´Ï´Ù. + SetRegistryKey(_T("·ÎÄà ÀÀ¿ë ÇÁ·Î±×·¥ ¸¶¹ý»ç¿¡¼­ »ý¼ºµÈ ÀÀ¿ë ÇÁ·Î±×·¥")); + + CTestClientDlg dlg; + m_pMainWnd = &dlg; + INT_PTR nResponse = dlg.DoModal(); + if (nResponse == IDOK) + { + // TODO: ¿©±â¿¡ [È®ÀÎ]À» Ŭ¸¯ÇÏ¿© ´ëÈ­ »óÀÚ°¡ ¾ø¾îÁú ¶§ ó¸®ÇÒ + // Äڵ带 ¹èÄ¡ÇÕ´Ï´Ù. + } + else if (nResponse == IDCANCEL) + { + // TODO: ¿©±â¿¡ [Ãë¼Ò]¸¦ Ŭ¸¯ÇÏ¿© ´ëÈ­ »óÀÚ°¡ ¾ø¾îÁú ¶§ ó¸®ÇÒ + // Äڵ带 ¹èÄ¡ÇÕ´Ï´Ù. + } + + // ´ëÈ­ »óÀÚ°¡ ´ÝÇûÀ¸¹Ç·Î ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö ÆßÇÁ¸¦ ½ÃÀÛÇÏÁö ¾Ê°í ÀÀ¿ë ÇÁ·Î±×·¥À» ³¡³¾ ¼ö ÀÖµµ·Ï FALSE¸¦ + // ¹ÝȯÇÕ´Ï´Ù. + return FALSE; +} diff --git a/TestClient/TestClient.h b/TestClient/TestClient.h new file mode 100644 index 0000000..82d69a1 --- /dev/null +++ b/TestClient/TestClient.h @@ -0,0 +1,32 @@ + +// TestClient.h : PROJECT_NAME ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÁÖ Çì´õ ÆÄÀÏÀÔ´Ï´Ù. +// + +#pragma once + +#ifndef __AFXWIN_H__ + #error "PCH¿¡ ´ëÇØ ÀÌ ÆÄÀÏÀ» Æ÷ÇÔÇϱâ Àü¿¡ 'stdafx.h'¸¦ Æ÷ÇÔÇÕ´Ï´Ù." +#endif + +#include "resource.h" // ÁÖ ±âÈ£ÀÔ´Ï´Ù. + + +// CTestClientApp: +// ÀÌ Å¬·¡½ºÀÇ ±¸Çö¿¡ ´ëÇØ¼­´Â TestClient.cppÀ» ÂüÁ¶ÇϽʽÿÀ. +// + +class CTestClientApp : public CWinAppEx +{ +public: + CTestClientApp(); + +// ÀçÁ¤ÀÇÀÔ´Ï´Ù. + public: + virtual BOOL InitInstance(); + +// ±¸ÇöÀÔ´Ï´Ù. + + DECLARE_MESSAGE_MAP() +}; + +extern CTestClientApp theApp; \ No newline at end of file diff --git a/TestClient/TestClient.rc b/TestClient/TestClient.rc new file mode 100644 index 0000000..f4e3866 --- /dev/null +++ b/TestClient/TestClient.rc @@ -0,0 +1,204 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#ifndef APSTUDIO_INVOKED +#include "targetver.h" +#endif +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Çѱ¹¾î resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR) +#ifdef _WIN32 +LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT +#pragma code_page(949) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#ifndef APSTUDIO_INVOKED\r\n" + "#include ""targetver.h""\r\n" + "#endif\r\n" + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#define _AFX_NO_SPLITTER_RESOURCES\r\n" + "#define _AFX_NO_OLE_RESOURCES\r\n" + "#define _AFX_NO_TRACKER_RESOURCES\r\n" + "#define _AFX_NO_PROPERTY_RESOURCES\r\n" + "\r\n" + "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)\r\n" + "LANGUAGE 18, 1\r\n" + "#pragma code_page(949)\r\n" + "#include ""res\\TestClient.rc2"" // Microsoft Visual C++ ÀÌ¿ÜÀÇ ´Ù¸¥ µµ±¸¿¡¼­ ÆíÁýÇÑ ¸®¼Ò½ºÀÔ´Ï´Ù.\r\n" + "#include ""l.KOR\\afxres.rc"" // Ç¥ÁØ ±¸¼º ¿ä¼ÒÀÔ´Ï´Ù.\r\n" + "#endif\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_MAINFRAME ICON "res\\TestClient.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "TestClient Á¤º¸" +FONT 9, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20 + LTEXT "TestClient, ¹öÀü 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX + LTEXT "Copyright (C) 2011",IDC_STATIC,42,26,114,8 + DEFPUSHBUTTON "È®ÀÎ",IDOK,113,41,50,14,WS_GROUP +END + +IDD_TESTCLIENT_DIALOG DIALOGEX 0, 0, 118, 47 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_APPWINDOW +CAPTION "TestClient" +FONT 9, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "È®ÀÎ",IDOK,7,26,50,14 + PUSHBUTTON "Ãë¼Ò",IDCANCEL,61,26,50,14 + EDITTEXT IDC_EDIT_IP,7,7,104,14,ES_AUTOHSCROLL +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "041203b5" + BEGIN + VALUE "CompanyName", "TODO: <ȸ»ç À̸§>" + VALUE "FileDescription", "TODO: <ÆÄÀÏ ¼³¸í>" + VALUE "FileVersion", "1.0.0.1" + VALUE "InternalName", "TestClient.exe" + VALUE "LegalCopyright", "TODO: (c) <ȸ»ç À̸§>. All rights reserved." + VALUE "OriginalFilename", "TestClient.exe" + VALUE "ProductName", "TODO: <Á¦Ç° À̸§>" + VALUE "ProductVersion", "1.0.0.1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x412, 949 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUTBOX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 163 + TOPMARGIN, 7 + BOTTOMMARGIN, 55 + END + + IDD_TESTCLIENT_DIALOG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 111 + TOPMARGIN, 7 + BOTTOMMARGIN, 40 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_ABOUTBOX "TestClient Á¤º¸(&A)..." + IDP_SOCKETS_INIT_FAILED "Windows ¼ÒÄÏÀ» ÃʱâÈ­ÇÏÁö ¸øÇß½À´Ï´Ù." +END + +#endif // Çѱ¹¾î resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#define _AFX_NO_SPLITTER_RESOURCES +#define _AFX_NO_OLE_RESOURCES +#define _AFX_NO_TRACKER_RESOURCES +#define _AFX_NO_PROPERTY_RESOURCES + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR) +LANGUAGE 18, 1 +#pragma code_page(949) +#include "res\TestClient.rc2" // Microsoft Visual C++ ÀÌ¿ÜÀÇ ´Ù¸¥ µµ±¸¿¡¼­ ÆíÁýÇÑ ¸®¼Ò½ºÀÔ´Ï´Ù. +#include "l.KOR\afxres.rc" // Ç¥ÁØ ±¸¼º ¿ä¼ÒÀÔ´Ï´Ù. +#endif + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/TestClient/TestClient.vcproj b/TestClient/TestClient.vcproj new file mode 100644 index 0000000..5f56419 --- /dev/null +++ b/TestClient/TestClient.vcproj @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TestClient/TestClientDlg.cpp b/TestClient/TestClientDlg.cpp new file mode 100644 index 0000000..8d28b11 --- /dev/null +++ b/TestClient/TestClientDlg.cpp @@ -0,0 +1,206 @@ +// TestClientDlg.cpp : ±¸Çö ÆÄÀÏ +// + +#include "stdafx.h" +#include "TestClient.h" +#include "TestClientDlg.h" +#include "ConnectSocket.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// ÀÀ¿ë ÇÁ·Î±×·¥ Á¤º¸¿¡ »ç¿ëµÇ´Â CAboutDlg ´ëÈ­ »óÀÚÀÔ´Ï´Ù. + +class CAboutDlg : public CDialog +{ +public: + CAboutDlg(); + +// ´ëÈ­ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù. + enum { IDD = IDD_ABOUTBOX }; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. + +// ±¸ÇöÀÔ´Ï´Ù. +protected: + DECLARE_MESSAGE_MAP() +}; + +CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) +{ +} + +void CAboutDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) +END_MESSAGE_MAP() + + +// CTestClientDlg ´ëÈ­ »óÀÚ + + + + +CTestClientDlg::CTestClientDlg(CWnd* pParent /*=NULL*/) + : CDialog(CTestClientDlg::IDD, pParent) + , m_ip(_T("")) + , m_nSocketCnt(0) + //, m_csPtr(NULL) +{ + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); +} + +void CTestClientDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + DDX_Text(pDX, IDC_EDIT_IP, m_ip); +} + +BEGIN_MESSAGE_MAP(CTestClientDlg, CDialog) + ON_WM_SYSCOMMAND() + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() + //}}AFX_MSG_MAP + ON_BN_CLICKED(IDOK, &CTestClientDlg::OnBnClickedOk) + ON_WM_DESTROY() +END_MESSAGE_MAP() + + +// CTestClientDlg ¸Þ½ÃÁö 󸮱â + +BOOL CTestClientDlg::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // ½Ã½ºÅÛ ¸Þ´º¿¡ "Á¤º¸..." ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÕ´Ï´Ù. + + // IDM_ABOUTBOX´Â ½Ã½ºÅÛ ¸í·É ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. + ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); + ASSERT(IDM_ABOUTBOX < 0xF000); + + CMenu* pSysMenu = GetSystemMenu(FALSE); + if (pSysMenu != NULL) + { + BOOL bNameValid; + CString strAboutMenu; + bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); + ASSERT(bNameValid); + if (!strAboutMenu.IsEmpty()) + { + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); + } + } + + // ÀÌ ´ëÈ­ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ­ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â + // ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. + SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. + SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. + + // TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù. + + return TRUE; // Æ÷Ä¿½º¸¦ ÄÁÆ®·Ñ¿¡ ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù. +} + +void CTestClientDlg::OnSysCommand(UINT nID, LPARAM lParam) +{ + if ((nID & 0xFFF0) == IDM_ABOUTBOX) + { + CAboutDlg dlgAbout; + dlgAbout.DoModal(); + } + else + { + CDialog::OnSysCommand(nID, lParam); + } +} + +// ´ëÈ­ »óÀÚ¿¡ ÃÖ¼ÒÈ­ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é +// ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼­/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â +// ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. + +void CTestClientDlg::OnPaint() +{ + if (IsIconic()) + { + CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅØ½ºÆ® + + SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); + + // Ŭ¶óÀÌ¾ðÆ® »ç°¢Çü¿¡¼­ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù. + int cxIcon = GetSystemMetrics(SM_CXICON); + int cyIcon = GetSystemMetrics(SM_CYICON); + CRect rect; + GetClientRect(&rect); + int x = (rect.Width() - cxIcon + 1) / 2; + int y = (rect.Height() - cyIcon + 1) / 2; + + // ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù. + dc.DrawIcon(x, y, m_hIcon); + } + else + { + CDialog::OnPaint(); + } +} + +// »ç¿ëÀÚ°¡ ÃÖ¼ÒÈ­µÈ âÀ» ²ô´Â µ¿¾È¿¡ Ä¿¼­°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼­ +// ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. +HCURSOR CTestClientDlg::OnQueryDragIcon() +{ + return static_cast(m_hIcon); +} + + +void CTestClientDlg::OnBnClickedOk() +{ + // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. + + UpdateData(TRUE); + + if(m_ip.IsEmpty()) + { + AfxMessageBox(_T("¾ÆÀÌÇÇ ÀÔ·ÂÇϼî")); + return; + } + + if(m_nSocketCnt >= 100) + { + AfxMessageBox(_T("´õ´Â Á¢¼Ó ¸øÇÔ")); + return; + } + + m_csPtr[m_nSocketCnt] = new CConnectSocket(); + + m_csPtr[m_nSocketCnt]->Create(); + + if(m_csPtr[m_nSocketCnt]->Connect(m_ip, 19999) == FALSE) + { + AfxMessageBox(_T("ERROR: Failed to connect server")); + m_csPtr[m_nSocketCnt]->ServerConnectState = FALSE; + + m_nSocketCnt++; + OnOK(); + } + else + { + AfxMessageBox(_T("Success to connect server")); + m_csPtr[m_nSocketCnt]->ServerConnectState = TRUE; + } + + m_nSocketCnt++; + //OnOK(); +} + +void CTestClientDlg::OnDestroy() +{ + CDialog::OnDestroy(); + + // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. +} diff --git a/TestClient/TestClientDlg.h b/TestClient/TestClientDlg.h new file mode 100644 index 0000000..02c5bb4 --- /dev/null +++ b/TestClient/TestClientDlg.h @@ -0,0 +1,40 @@ + +// TestClientDlg.h : Çì´õ ÆÄÀÏ +// + +#pragma once +#include "connectsocket.h" + + +// CTestClientDlg ´ëÈ­ »óÀÚ +class CTestClientDlg : public CDialog +{ +// »ý¼ºÀÔ´Ï´Ù. +public: + CTestClientDlg(CWnd* pParent = NULL); // Ç¥ÁØ »ý¼ºÀÚÀÔ´Ï´Ù. + +// ´ëÈ­ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù. + enum { IDD = IDD_TESTCLIENT_DIALOG }; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. + + +// ±¸ÇöÀÔ´Ï´Ù. +protected: + HICON m_hIcon; + + // »ý¼ºµÈ ¸Þ½ÃÁö ¸Ê ÇÔ¼ö + virtual BOOL OnInitDialog(); + afx_msg void OnSysCommand(UINT nID, LPARAM lParam); + afx_msg void OnPaint(); + afx_msg HCURSOR OnQueryDragIcon(); + DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedOk(); + CConnectSocket m_CConnectSocket; + CString m_ip; + int m_nSocketCnt; + CConnectSocket *m_csPtr[100]; + afx_msg void OnDestroy(); +}; diff --git a/TestClient/res/TestClient.ico b/TestClient/res/TestClient.ico new file mode 100644 index 0000000..d56fbcd Binary files /dev/null and b/TestClient/res/TestClient.ico differ diff --git a/TestClient/res/TestClient.rc2 b/TestClient/res/TestClient.rc2 new file mode 100644 index 0000000..4c3c65f --- /dev/null +++ b/TestClient/res/TestClient.rc2 @@ -0,0 +1,13 @@ +// +// TestClient.RC2 - Microsoft Visual C++¿¡¼­ Á÷Á¢ ÆíÁýÇÏÁö ¾Ê´Â ¸®¼Ò½º +// + +#ifdef APSTUDIO_INVOKED +#error ÀÌ ÆÄÀÏÀº Microsoft Visual C++¿¡¼­ ÆíÁýÇÒ ¼ö ¾ø½À´Ï´Ù. +#endif //APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// ¿©±â¿¡ ¼öµ¿À¸·Î ÆíÁýÇÑ ¸®¼Ò½º¸¦ Ãß°¡ÇÕ´Ï´Ù. + +///////////////////////////////////////////////////////////////////////////// diff --git a/TestClient/resource.h b/TestClient/resource.h new file mode 100644 index 0000000..0bae25e --- /dev/null +++ b/TestClient/resource.h @@ -0,0 +1,23 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by TestClient.rc +// +#define IDM_ABOUTBOX 0x0010 +#define IDD_ABOUTBOX 100 +#define IDS_ABOUTBOX 101 +#define IDD_TESTCLIENT_DIALOG 102 +#define IDP_SOCKETS_INIT_FAILED 103 +#define IDR_MAINFRAME 128 +#define IDC_EDIT1 1000 +#define IDC_EDIT_IP 1000 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/TestClient/stdafx.cpp b/TestClient/stdafx.cpp new file mode 100644 index 0000000..86eaad6 --- /dev/null +++ b/TestClient/stdafx.cpp @@ -0,0 +1,8 @@ + +// stdafx.cpp : Ç¥ÁØ Æ÷ÇÔ ÆÄÀϸ¸ µé¾î ÀÖ´Â ¼Ò½º ÆÄÀÏÀÔ´Ï´Ù. +// TestClient.pch´Â ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ°¡ µË´Ï´Ù. +// stdafx.obj¿¡´Â ¹Ì¸® ÄÄÆÄÀÏµÈ Çü½Ä Á¤º¸°¡ Æ÷ÇԵ˴ϴÙ. + +#include "stdafx.h" + + diff --git a/TestClient/stdafx.h b/TestClient/stdafx.h new file mode 100644 index 0000000..af477c3 --- /dev/null +++ b/TestClient/stdafx.h @@ -0,0 +1,61 @@ + +// stdafx.h : ÀÚÁÖ »ç¿ëÇÏÁö¸¸ ÀÚÁÖ º¯°æµÇÁö´Â ¾Ê´Â +// Ç¥ÁØ ½Ã½ºÅÛ Æ÷ÇÔ ÆÄÀÏ ¹× ÇÁ·ÎÁ§Æ® °ü·Ã Æ÷ÇÔ ÆÄÀÏÀÌ +// µé¾î ÀÖ´Â Æ÷ÇÔ ÆÄÀÏÀÔ´Ï´Ù. + +#pragma once + +#ifndef _SECURE_ATL +#define _SECURE_ATL 1 +#endif + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // °ÅÀÇ »ç¿ëµÇÁö ¾Ê´Â ³»¿ëÀº Windows Çì´õ¿¡¼­ Á¦¿ÜÇÕ´Ï´Ù. +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // ÀϺΠCString »ý¼ºÀÚ´Â ¸í½ÃÀûÀ¸·Î ¼±¾ðµË´Ï´Ù. + +// MFCÀÇ °øÅë ºÎºÐ°ú ¹«½Ã °¡´ÉÇÑ °æ°í ¸Þ½ÃÁö¿¡ ´ëÇÑ ¼û±â±â¸¦ ÇØÁ¦ÇÕ´Ï´Ù. +#define _AFX_ALL_WARNINGS + +#include // MFC ÇÙ½É ¹× Ç¥ÁØ ±¸¼º ¿ä¼ÒÀÔ´Ï´Ù. +#include // MFC È®ÀåÀÔ´Ï´Ù. + + +#include // MFC ÀÚµ¿È­ Ŭ·¡½ºÀÔ´Ï´Ù. + + + +#ifndef _AFX_NO_OLE_SUPPORT +#include // Internet Explorer 4 °ø¿ë ÄÁÆ®·Ñ¿¡ ´ëÇÑ MFC Áö¿øÀÔ´Ï´Ù. +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // Windows °ø¿ë ÄÁÆ®·Ñ¿¡ ´ëÇÑ MFC Áö¿øÀÔ´Ï´Ù. +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include // MFCÀÇ ¸®º» ¹× ÄÁÆ®·Ñ ¸·´ë Áö¿ø + + +#include // MFC ¼ÒÄÏ È®Àå + + + + + + + +#ifdef _UNICODE +#if defined _M_IX86 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_IA64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_X64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#else +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif +#endif + + diff --git a/TestClient/targetver.h b/TestClient/targetver.h new file mode 100644 index 0000000..75a9f56 --- /dev/null +++ b/TestClient/targetver.h @@ -0,0 +1,26 @@ + +#pragma once + +// ´ÙÀ½ ¸ÅÅ©·Î´Â ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Á¤ÀÇÇÕ´Ï´Ù. ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀº +// ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â µ¥ ÇÊ¿äÇÑ ±â´ÉÀÌ Æ÷ÇÔµÈ °¡Àå ºü¸¥ ¹öÀüÀÇ Windows, Internet Explorer +// µîÀÔ´Ï´Ù. ÀÌ ¸ÅÅ©·Î´Â ÁöÁ¤µÈ ¹öÀü ÀÌ»óÀÇ Ç÷§Æû ¹öÀü¿¡¼­ »ç¿ë °¡´ÉÇÑ ¸ðµç ±â´ÉÀ» Ȱ¼ºÈ­ÇØ¾ß +// ÀÛµ¿ÇÕ´Ï´Ù. + +// ¾Æ·¡ ÁöÁ¤µÈ Ç÷§Æû¿¡ ¿ì¼±ÇÏ´Â Ç÷§ÆûÀ» ´ë»óÀ¸·Î ÇÏ´Â °æ¿ì ´ÙÀ½ Á¤ÀǸ¦ ¼öÁ¤ÇϽʽÿÀ. +// ´Ù¸¥ Ç÷§Æû¿¡ »ç¿ëµÇ´Â ÇØ´ç °ªÀÇ ÃֽŠÁ¤º¸´Â MSDNÀ» ÂüÁ¶ÇϽʽÿÀ. +#ifndef WINVER // ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Windows Vista·Î ÁöÁ¤ÇÕ´Ï´Ù. +#define WINVER 0x0600 // ´Ù¸¥ ¹öÀüÀÇ Windows¿¡ ¸Âµµ·Ï ÀûÇÕÇÑ °ªÀ¸·Î º¯°æÇØ ÁֽʽÿÀ. +#endif + +#ifndef _WIN32_WINNT // ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Windows Vista·Î ÁöÁ¤ÇÕ´Ï´Ù. +#define _WIN32_WINNT 0x0600 // ´Ù¸¥ ¹öÀüÀÇ Windows¿¡ ¸Âµµ·Ï ÀûÇÕÇÑ °ªÀ¸·Î º¯°æÇØ ÁֽʽÿÀ. +#endif + +#ifndef _WIN32_WINDOWS // ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Windows 98·Î ÁöÁ¤ÇÕ´Ï´Ù. +#define _WIN32_WINDOWS 0x0410 // Windows Me ÀÌ»ó¿¡ ¸Âµµ·Ï ÀûÇÕÇÑ °ªÀ¸·Î º¯°æÇØ ÁֽʽÿÀ. +#endif + +#ifndef _WIN32_IE // ÇÊ¿äÇÑ ÃÖ¼Ò Ç÷§ÆûÀ» Internet Explorer 7.0À¸·Î ÁöÁ¤ÇÕ´Ï´Ù. +#define _WIN32_IE 0x0700 // ´Ù¸¥ ¹öÀüÀÇ IE¿¡ ¸Âµµ·Ï ÀûÇÕÇÑ °ªÀ¸·Î º¯°æÇØ ÁֽʽÿÀ. +#endif + diff --git a/TestServer/TestServer.cpp b/TestServer/TestServer.cpp new file mode 100644 index 0000000..f6efdd2 --- /dev/null +++ b/TestServer/TestServer.cpp @@ -0,0 +1,217 @@ +#include +#include + + +#define BUFSIZE 100 + +#pragma comment(lib, "ws2_32.lib") + +int main(int argc, char** argv){ + + WSADATA wsaData; + SOCKET hServSock; + SOCKADDR_IN servAddr; + + + int arrIndex; + int clntLen; + SOCKET hClntSock; + SOCKADDR_IN clntAddr; + + + fd_set reads, tmps; + + + char message[BUFSIZE]; + int strLen; + TIMEVAL timeout; + + if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) + fputs("WSADStartup() error", stderr); + + + hServSock = socket(PF_INET, SOCK_STREAM, 0); + if(hServSock == INVALID_SOCKET) + fputs("socket() error", stderr); + + argv[1] = "19999"; + + memset(&servAddr, 0, sizeof(servAddr)); + servAddr.sin_addr.s_addr = htonl(INADDR_ANY); + servAddr.sin_port = htons(atoi(argv[1])); + servAddr.sin_family = AF_INET; + + + if(bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) + fputs("bind() error", stderr); + + if(listen(hServSock, 5) == SOCKET_ERROR) + fputs("listen() error", stderr); + + + FD_ZERO(&reads); + FD_SET(hServSock, &reads); //hServSockÀ» ÅëÇØ µé¾î¿À´Â °ÍÀÎÁö È®ÀÎ + + + + while(1){ + tmps = reads; + timeout.tv_sec = 5; + timeout.tv_usec = 0; + + + //´ë±âÇϰí ÀÖ´Ù°¡ º¯È­°¡ ÀÖÀ¸¸é ¸®ÅÏ + + if(select(0, &tmps, 0, 0, &timeout) == SOCKET_ERROR) + fputs("select() error", stderr); + +//¸ðµç ¼ÒÄÏ ÇÚµéÀ» ¼øÈ¸. + +for(arrIndex = 0; arrIndex < (int)reads.fd_count; arrIndex++){ +if(FD_ISSET(reads.fd_array[arrIndex], &tmps)){ + //¿¬°á ¿äûÀÎ °æ¿ì + + if(tmps.fd_array[arrIndex] == hServSock){ + clntLen = sizeof(clntAddr); + hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntLen); + //¿¬°áÀÌµÈ Å¬¶óÀÌ¾ðÆ®¸¦ FD_SET¿¡ Ãß°¡. + + FD_SET(hClntSock, &reads); + printf("Ŭ¶óÀÌ¾ðÆ® ¿¬°á : ¼ÒÄÏ ÇÚµé %d \n", hClntSock); + }else{ //Àü¼ÛµÈ µ¥ÀÌÅͰ¡ Á¸ÀçÇÏ´Â °æ¿ì. Á¾·á ¿äû ȤÀº µ¥ÀÌÅÍ ¼ö½Å. + + strLen = recv(tmps.fd_array[arrIndex], message, BUFSIZE-1, 0); + + if(strLen == 0){ //Á¾·á ¿äûÀÇ °æ¿ì. + + FD_CLR(tmps.fd_array[arrIndex], &reads); + closesocket(tmps.fd_array[arrIndex]); + printf("Ŭ¶óÀÌ¾ðÆ® Á¾·á : ¼ÒÄÏ ÇÚµé %d \n", tmps.fd_array[arrIndex]); + }else{ //µ¥ÀÌÅÍ ¼ö½ÅÀÇ °æ¿ì. + + send(tmps.fd_array[arrIndex], message, strLen, 0); + } //else + +} //else +} //if + +} //for + +} //while + + + WSACleanup(); + return 0; +} //main + + + + + + +//#include +//#include +//#include +// +//#pragma comment(lib, "ws2_32.lib") +// +//#define BUFSIZE 100 +// +//void ErrorHandling(char *message); +// +//int main(int argc, char **argv) +//{ +// WSADATA wsaData; +// SOCKET hServSock; +// SOCKADDR_IN servAddr; +// +// int arrIndex; +// int clntLen; +// SOCKET hClntSock; +// SOCKADDR_IN clntAddr; +// +// fd_set reads, temps; +// +// char message[BUFSIZE]; +// int strLen; +// TIMEVAL timeout; +// +// /*if(argc != 2) +// { +// exit(1); +// }*/ +// +// if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) +// ErrorHandling("e"); +// +// hServSock = socket(PF_INET, SOCK_STREAM, 0); +// +// if(hServSock == INVALID_SOCKET) +// ErrorHandling("e"); +// +// servAddr.sin_family = AF_INET; +// servAddr.sin_addr.s_addr = htonl(INADDR_ANY); +// servAddr.sin_port = 19999; +// +// if(bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr))==SOCKET_ERROR) +// ErrorHandling("e"); +// +// if(listen(hServSock, 5)==SOCKET_ERROR) +// ErrorHandling("e"); +// +// FD_ZERO(&reads); +// FD_SET(hServSock, &reads); +// +// printf("-1\n"); +// +// while(1) +// { +// temps = reads; +// timeout.tv_sec = 5; +// timeout.tv_usec = 0; +// +// if(select(0, &temps, 0, 0, &timeout) == SOCKET_ERROR) +// ErrorHandling("e"); +// +// for(arrIndex=0; arrIndex < reads.fd_count; arrIndex++) +// { +// printf("1\n"); +// if(FD_ISSET(reads.fd_array[arrIndex], &temps)) +// { +// printf("2\n"); +// if(reads.fd_array[arrIndex]==hServSock) +// { +// clntLen = sizeof(clntAddr); +// hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntLen); +// FD_SET(hClntSock, &reads); +// printf("Ŭ¶óÀÌ¾ðÆ® ¿¬°á : ¼ÒÄÏ ÇÚµé %d \n", hClntSock); +// } +// else +// { +// strLen = recv(reads.fd_array[arrIndex], message, BUFSIZE-1, 0); +// if(strLen == 0) +// { +// closesocket(temps.fd_array[arrIndex]); +// //printf("Ŭ¶óÀÌ¾ðÆ® Á¾·á : ¼ÒÄÏ ÇÚµé %d \n", reads.fd_array[arrIndex]); +// printf("Ŭ¶óÀÌ¾ðÆ® Á¾·á : ¼ÒÄÏ ÇÚµé\n"); +// FD_CLR(reads.fd_array[arrIndex], &reads); +// +// } +// else +// { +// send(reads.fd_array[arrIndex], message, strLen, 0); +// } +// } +// } +// } +// } +// WSACleanup(); +// return 0; +//} +// +//void ErrorHandling(char *message) +//{ +// fputs(message, stderr); +// fputc('\n', stderr); +// exit(1); +//} \ No newline at end of file diff --git a/TestServer/TestServer.vcproj b/TestServer/TestServer.vcproj new file mode 100644 index 0000000..c330e3d --- /dev/null +++ b/TestServer/TestServer.vcproj @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +