1. 최초 커밋
This commit is contained in:
commit
eddba8f209
245
.gitignore
vendored
Normal file
245
.gitignore
vendored
Normal file
@ -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
|
47
KeyHookForCapture/HookProcedure.cpp
Normal file
47
KeyHookForCapture/HookProcedure.cpp
Normal file
@ -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);
|
||||
}
|
8
KeyHookForCapture/HookProcedure.h
Normal file
8
KeyHookForCapture/HookProcedure.h
Normal file
@ -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);
|
50
KeyHookForCapture/KeyHookForCapture.cpp
Normal file
50
KeyHookForCapture/KeyHookForCapture.cpp
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
245
KeyHookForCapture/KeyHookForCapture.vcproj
Normal file
245
KeyHookForCapture/KeyHookForCapture.vcproj
Normal file
@ -0,0 +1,245 @@
|
||||
<?xml version="1.0" encoding="ks_c_5601-1987"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="KeyHookForCapture"
|
||||
ProjectGUID="{CBAE52E4-75F6-4E3A-AC60-028649CF136A}"
|
||||
RootNamespace="KeyHookForCapture"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
UseOfMFC="0"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;KEYHOOKFORCAPTURE_EXPORTS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\$(ProjectName)_D.dll"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/KeyHookForCapture.pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/KeyHookForCapture.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;KEYHOOKFORCAPTURE_EXPORTS"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/KeyHookForCapture.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="소스 파일"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\HookProcedure.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\KeyHookForCapture.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Utility.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="헤더 파일"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\HookProcedure.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Utility.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="리소스 파일"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\ReadMe.txt"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
40
KeyHookForCapture/ReadMe.txt
Normal file
40
KeyHookForCapture/ReadMe.txt
Normal file
@ -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:" 주석은 사용자가 추가하거나 사용자 지정해야 하는
|
||||
소스 코드 부분을 나타냅니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
32
KeyHookForCapture/Utility.cpp
Normal file
32
KeyHookForCapture/Utility.cpp
Normal file
@ -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;
|
||||
}
|
7
KeyHookForCapture/Utility.h
Normal file
7
KeyHookForCapture/Utility.h
Normal file
@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
//------------------------------------------
|
||||
// 인자로 전달된 이름의 프로세스를 찾는다
|
||||
//------------------------------------------
|
||||
DWORD FindProcessID( LPCTSTR szProcessName );
|
8
KeyHookForCapture/stdafx.cpp
Normal file
8
KeyHookForCapture/stdafx.cpp
Normal file
@ -0,0 +1,8 @@
|
||||
// stdafx.cpp : 표준 포함 파일만 들어 있는 소스 파일입니다.
|
||||
// KeyHookForCapture.pch는 미리 컴파일된 헤더가 됩니다.
|
||||
// stdafx.obj에는 미리 컴파일된 형식 정보가 포함됩니다.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: 필요한 추가 헤더는
|
||||
// 이 파일이 아닌 STDAFX.H에서 참조합니다.
|
24
KeyHookForCapture/stdafx.h
Normal file
24
KeyHookForCapture/stdafx.h
Normal file
@ -0,0 +1,24 @@
|
||||
// stdafx.h : 자주 사용하지만 자주 변경되지는 않는
|
||||
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이
|
||||
// 들어 있는 포함 파일입니다.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // 거의 사용되지 않는 내용은 Windows 헤더에서 제외합니다.
|
||||
// Windows 헤더 파일입니다.
|
||||
#include <windows.h>
|
||||
|
||||
// TODO: 프로그램에 필요한 추가 헤더는 여기에서 참조합니다.
|
||||
#include "tlhelp32.h"
|
||||
|
||||
//==========================================
|
||||
// 상수
|
||||
//==========================================
|
||||
#define DELARE_EXPORT_FUNCTION extern "C" __declspec(dllexport)
|
||||
|
||||
// 키가 눌렸는지 판단하는 부분의 비트 마스크
|
||||
#define FLAG_KEYDOWN 0x80000000
|
||||
|
||||
//#define _DEBUG_MODE_
|
38
MFC_PIDINFO_Training.sln
Normal file
38
MFC_PIDINFO_Training.sln
Normal file
@ -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
|
231
MFC_PIDINFO_Training/DefineData.cpp
Normal file
231
MFC_PIDINFO_Training/DefineData.cpp
Normal file
@ -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;
|
||||
}
|
22
MFC_PIDINFO_Training/DefineData.h
Normal file
22
MFC_PIDINFO_Training/DefineData.h
Normal file
@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include <d3dx9.h>
|
||||
|
||||
#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);
|
85
MFC_PIDINFO_Training/MFC_PIDINFO_Training.cpp
Normal file
85
MFC_PIDINFO_Training/MFC_PIDINFO_Training.cpp
Normal file
@ -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;
|
||||
}
|
32
MFC_PIDINFO_Training/MFC_PIDINFO_Training.h
Normal file
32
MFC_PIDINFO_Training/MFC_PIDINFO_Training.h
Normal file
@ -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;
|
211
MFC_PIDINFO_Training/MFC_PIDINFO_Training.rc
Normal file
211
MFC_PIDINFO_Training/MFC_PIDINFO_Training.rc
Normal file
@ -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
|
||||
|
282
MFC_PIDINFO_Training/MFC_PIDINFO_Training.vcproj
Normal file
282
MFC_PIDINFO_Training/MFC_PIDINFO_Training.vcproj
Normal file
@ -0,0 +1,282 @@
|
||||
<?xml version="1.0" encoding="ks_c_5601-1987"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="MFC_PIDINFO_Training"
|
||||
ProjectGUID="{B2530686-89DF-4608-BBD4-9773B0A90528}"
|
||||
RootNamespace="MFC_PIDINFO_Training"
|
||||
Keyword="MFCProj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="2"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MkTypLibCompatible="false"
|
||||
ValidateParameters="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1042"
|
||||
AdditionalIncludeDirectories="$(IntDir)"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\$(ProjectName)_D.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="2"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
MkTypLibCompatible="false"
|
||||
ValidateParameters="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
|
||||
MinimalRebuild="false"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1042"
|
||||
AdditionalIncludeDirectories="$(IntDir)"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="소스 파일"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\DefineData.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MFC_PIDINFO_Training.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MFC_PIDINFO_TrainingDlg.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="헤더 파일"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\DefineData.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MFC_PIDINFO_Training.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MFC_PIDINFO_TrainingDlg.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Resource.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\targetver.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="리소스 파일"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\res\MFC_PIDINFO_Training.ico"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\MFC_PIDINFO_Training.rc"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\res\MFC_PIDINFO_Training.rc2"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\ReadMe.txt"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
<Global
|
||||
Name="RESOURCE_FILE"
|
||||
Value="MFC_PIDINFO_Training.rc"
|
||||
/>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
675
MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.cpp
Normal file
675
MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.cpp
Normal file
@ -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 <iphlpapi.h>
|
||||
#include <vector>
|
||||
|
||||
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 <NETINFO> 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<WPARAM>(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<HCURSOR>(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();
|
||||
}
|
||||
|
81
MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.h
Normal file
81
MFC_PIDINFO_Training/MFC_PIDINFO_TrainingDlg.h
Normal file
@ -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;
|
||||
};
|
96
MFC_PIDINFO_Training/ReadMe.txt
Normal file
96
MFC_PIDINFO_Training/ReadMe.txt
Normal file
@ -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
|
||||
어셈블리에 대한 응용 프로그램 종속성을 설명하는 데 사용됩니다. 로더는 이 정보를
|
||||
사용하여 어셈블리 캐시에서 적절한 어셈블리를 로드하거나 응용 프로그램에서 전용
|
||||
어셈블리를 로드합니다. 응용 프로그램 매니페스트는 응용 프로그램 실행 파일과 같은
|
||||
폴더에 설치된 외부 .manifest 파일로 재배포를 위해 포함되거나 리소스의 형태로
|
||||
실행 파일에 포함될 수 있습니다.
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
기타 참고:
|
||||
|
||||
응용 프로그램 마법사는 "TODO:"를 사용하여 추가하거나 사용자 지정해야 하는
|
||||
소스 코드 부분을 나타냅니다.
|
||||
|
||||
응용 프로그램에서 공유 DLL의 MFC를 사용하는 경우
|
||||
해당 MFC DLL을 다시 배포해야 합니다. 응용 프로그램의 언어가
|
||||
운영 체제의 로캘과 다른 경우
|
||||
지역화된 해당 리소스 MFC90XXX.DLL도 다시 배포해야 합니다.
|
||||
이 두 가지 항목에 대한 자세한 내용은 MSDN 설명서에서
|
||||
Visual C++ 응용 프로그램 다시 배포에 대한 단원을 참조하십시오.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
0
MFC_PIDINFO_Training/UserImages.bmp
Normal file
0
MFC_PIDINFO_Training/UserImages.bmp
Normal file
BIN
MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.ico
Normal file
BIN
MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
13
MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.rc2
Normal file
13
MFC_PIDINFO_Training/res/MFC_PIDINFO_Training.rc2
Normal file
@ -0,0 +1,13 @@
|
||||
//
|
||||
// MFC_PIDINFO_Training.RC2 - Microsoft Visual C++에서 직접 편집하지 않는 리소스
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#error 이 파일은 Microsoft Visual C++에서 편집할 수 없습니다.
|
||||
#endif //APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 여기에 수동으로 편집한 리소스를 추가합니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
30
MFC_PIDINFO_Training/resource.h
Normal file
30
MFC_PIDINFO_Training/resource.h
Normal file
@ -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
|
8
MFC_PIDINFO_Training/stdafx.cpp
Normal file
8
MFC_PIDINFO_Training/stdafx.cpp
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
// stdafx.cpp : 표준 포함 파일만 들어 있는 소스 파일입니다.
|
||||
// MFC_PIDINFO_Training.pch는 미리 컴파일된 헤더가 됩니다.
|
||||
// stdafx.obj에는 미리 컴파일된 형식 정보가 포함됩니다.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
|
53
MFC_PIDINFO_Training/stdafx.h
Normal file
53
MFC_PIDINFO_Training/stdafx.h
Normal file
@ -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 <afxwin.h> // MFC 핵심 및 표준 구성 요소입니다.
|
||||
#include <afxext.h> // MFC 확장입니다.
|
||||
|
||||
|
||||
#include <afxdisp.h> // MFC 자동화 클래스입니다.
|
||||
|
||||
|
||||
|
||||
#ifndef _AFX_NO_OLE_SUPPORT
|
||||
#include <afxdtctl.h> // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다.
|
||||
#endif
|
||||
#ifndef _AFX_NO_AFXCMN_SUPPORT
|
||||
#include <afxcmn.h> // Windows 공용 컨트롤에 대한 MFC 지원입니다.
|
||||
#endif // _AFX_NO_AFXCMN_SUPPORT
|
||||
|
||||
#include <afxcontrolbars.h> // MFC의 리본 및 컨트롤 막대 지원
|
||||
|
||||
|
||||
#include <afxsock.h> // 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
|
26
MFC_PIDINFO_Training/targetver.h
Normal file
26
MFC_PIDINFO_Training/targetver.h
Normal file
@ -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
|
||||
|
42
TestClient/ConnectSocket.cpp
Normal file
42
TestClient/ConnectSocket.cpp
Normal file
@ -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);
|
||||
}
|
14
TestClient/ConnectSocket.h
Normal file
14
TestClient/ConnectSocket.h
Normal file
@ -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;
|
||||
};
|
96
TestClient/ReadMe.txt
Normal file
96
TestClient/ReadMe.txt
Normal file
@ -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
|
||||
어셈블리에 대한 응용 프로그램 종속성을 설명하는 데 사용됩니다. 로더는 이 정보를
|
||||
사용하여 어셈블리 캐시에서 적절한 어셈블리를 로드하거나 응용 프로그램에서 전용
|
||||
어셈블리를 로드합니다. 응용 프로그램 매니페스트는 응용 프로그램 실행 파일과 같은
|
||||
폴더에 설치된 외부 .manifest 파일로 재배포를 위해 포함되거나 리소스의 형태로
|
||||
실행 파일에 포함될 수 있습니다.
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
기타 참고:
|
||||
|
||||
응용 프로그램 마법사는 "TODO:"를 사용하여 추가하거나 사용자 지정해야 하는
|
||||
소스 코드 부분을 나타냅니다.
|
||||
|
||||
응용 프로그램에서 공유 DLL의 MFC를 사용하는 경우
|
||||
해당 MFC DLL을 다시 배포해야 합니다. 응용 프로그램의 언어가
|
||||
운영 체제의 로캘과 다른 경우
|
||||
지역화된 해당 리소스 MFC90XXX.DLL도 다시 배포해야 합니다.
|
||||
이 두 가지 항목에 대한 자세한 내용은 MSDN 설명서에서
|
||||
Visual C++ 응용 프로그램 다시 배포에 대한 단원을 참조하십시오.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
85
TestClient/TestClient.cpp
Normal file
85
TestClient/TestClient.cpp
Normal file
@ -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;
|
||||
}
|
32
TestClient/TestClient.h
Normal file
32
TestClient/TestClient.h
Normal file
@ -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;
|
204
TestClient/TestClient.rc
Normal file
204
TestClient/TestClient.rc
Normal file
@ -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
|
||||
|
281
TestClient/TestClient.vcproj
Normal file
281
TestClient/TestClient.vcproj
Normal file
@ -0,0 +1,281 @@
|
||||
<?xml version="1.0" encoding="ks_c_5601-1987"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="TestClient"
|
||||
ProjectGUID="{D58FB8F1-9532-4706-ABC1-D48956E34B9B}"
|
||||
RootNamespace="TestClient"
|
||||
Keyword="MFCProj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="2"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MkTypLibCompatible="false"
|
||||
ValidateParameters="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1042"
|
||||
AdditionalIncludeDirectories="$(IntDir)"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\$(ProjectName)_D.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="2"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
MkTypLibCompatible="false"
|
||||
ValidateParameters="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
|
||||
MinimalRebuild="false"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1042"
|
||||
AdditionalIncludeDirectories="$(IntDir)"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="소스 파일"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\ConnectSocket.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.cpp"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TestClient.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TestClientDlg.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="헤더 파일"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\ConnectSocket.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Resource.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\targetver.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TestClient.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TestClientDlg.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="리소스 파일"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\res\TestClient.ico"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\TestClient.rc"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\res\TestClient.rc2"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\ReadMe.txt"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
<Global
|
||||
Name="RESOURCE_FILE"
|
||||
Value="TestClient.rc"
|
||||
/>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
206
TestClient/TestClientDlg.cpp
Normal file
206
TestClient/TestClientDlg.cpp
Normal file
@ -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<WPARAM>(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<HCURSOR>(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: 여기에 메시지 처리기 코드를 추가합니다.
|
||||
}
|
40
TestClient/TestClientDlg.h
Normal file
40
TestClient/TestClientDlg.h
Normal file
@ -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();
|
||||
};
|
BIN
TestClient/res/TestClient.ico
Normal file
BIN
TestClient/res/TestClient.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
13
TestClient/res/TestClient.rc2
Normal file
13
TestClient/res/TestClient.rc2
Normal file
@ -0,0 +1,13 @@
|
||||
//
|
||||
// TestClient.RC2 - Microsoft Visual C++에서 직접 편집하지 않는 리소스
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#error 이 파일은 Microsoft Visual C++에서 편집할 수 없습니다.
|
||||
#endif //APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 여기에 수동으로 편집한 리소스를 추가합니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
23
TestClient/resource.h
Normal file
23
TestClient/resource.h
Normal file
@ -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
|
8
TestClient/stdafx.cpp
Normal file
8
TestClient/stdafx.cpp
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
// stdafx.cpp : 표준 포함 파일만 들어 있는 소스 파일입니다.
|
||||
// TestClient.pch는 미리 컴파일된 헤더가 됩니다.
|
||||
// stdafx.obj에는 미리 컴파일된 형식 정보가 포함됩니다.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
|
61
TestClient/stdafx.h
Normal file
61
TestClient/stdafx.h
Normal file
@ -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 <afxwin.h> // MFC 핵심 및 표준 구성 요소입니다.
|
||||
#include <afxext.h> // MFC 확장입니다.
|
||||
|
||||
|
||||
#include <afxdisp.h> // MFC 자동화 클래스입니다.
|
||||
|
||||
|
||||
|
||||
#ifndef _AFX_NO_OLE_SUPPORT
|
||||
#include <afxdtctl.h> // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다.
|
||||
#endif
|
||||
#ifndef _AFX_NO_AFXCMN_SUPPORT
|
||||
#include <afxcmn.h> // Windows 공용 컨트롤에 대한 MFC 지원입니다.
|
||||
#endif // _AFX_NO_AFXCMN_SUPPORT
|
||||
|
||||
#include <afxcontrolbars.h> // MFC의 리본 및 컨트롤 막대 지원
|
||||
|
||||
|
||||
#include <afxsock.h> // 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
|
||||
|
||||
|
26
TestClient/targetver.h
Normal file
26
TestClient/targetver.h
Normal file
@ -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
|
||||
|
217
TestServer/TestServer.cpp
Normal file
217
TestServer/TestServer.cpp
Normal file
@ -0,0 +1,217 @@
|
||||
#include <stdio.h>
|
||||
#include <winsock2.h>
|
||||
|
||||
|
||||
#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 <stdio.h>
|
||||
//#include <string.h>
|
||||
//#include <WinSock2.h>
|
||||
//
|
||||
//#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);
|
||||
//}
|
194
TestServer/TestServer.vcproj
Normal file
194
TestServer/TestServer.vcproj
Normal file
@ -0,0 +1,194 @@
|
||||
<?xml version="1.0" encoding="ks_c_5601-1987"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="TestServer"
|
||||
ProjectGUID="{F41C2C14-83A7-4C8C-8198-559B58F945D1}"
|
||||
RootNamespace="TestServer"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\$(ProjectName)_D.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="소스 파일"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\TestServer.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="헤더 파일"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="리소스 파일"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
Loading…
x
Reference in New Issue
Block a user