207 lines
5.1 KiB
C++
207 lines
5.1 KiB
C++
|
|
|||
|
// TouchBoard.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
//
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
#include "TouchBoard.h"
|
|||
|
#include "TouchBoardDlg.h"
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
#define new DEBUG_NEW
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
// CTouchBoardApp
|
|||
|
|
|||
|
BEGIN_MESSAGE_MAP(CTouchBoardApp, CWinApp)
|
|||
|
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
|
|||
|
END_MESSAGE_MAP()
|
|||
|
|
|||
|
|
|||
|
// CTouchBoardApp <20><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
CTouchBoardApp::CTouchBoardApp()
|
|||
|
{
|
|||
|
// <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
|
|||
|
|
|||
|
// TODO: <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
|||
|
// InitInstance<63><65> <20><><EFBFBD><EFBFBD> <20>߿<EFBFBD><DFBF><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20><>ġ<EFBFBD>մϴ<D5B4>.
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CTouchBoardApp <20><>ü<EFBFBD>Դϴ<D4B4>.
|
|||
|
|
|||
|
CTouchBoardApp theApp;
|
|||
|
|
|||
|
|
|||
|
// CTouchBoardApp <20>ʱ<EFBFBD>ȭ
|
|||
|
|
|||
|
ULONG ProcIDFromWnd(HWND hwnd)
|
|||
|
{
|
|||
|
ULONG idProc;
|
|||
|
GetWindowThreadProcessId( hwnd, &idProc );
|
|||
|
return idProc;
|
|||
|
}
|
|||
|
|
|||
|
HWND GetWinHandle(ULONG pid)
|
|||
|
{
|
|||
|
HWND tempHwnd = ::FindWindow(NULL,NULL); // <20>ֻ<EFBFBD><D6BB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> ã<><C3A3>
|
|||
|
|
|||
|
while( tempHwnd != NULL )
|
|||
|
{
|
|||
|
if( ::GetParent(tempHwnd) == NULL )
|
|||
|
if( pid == ProcIDFromWnd(tempHwnd) )
|
|||
|
return tempHwnd;
|
|||
|
|
|||
|
tempHwnd = ::GetWindow(tempHwnd, GW_HWNDNEXT);
|
|||
|
}
|
|||
|
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
|
|||
|
#include <fcntl.h>
|
|||
|
#include <psapi.h>
|
|||
|
|
|||
|
void PrintProcessNameAndID(DWORD processID, CString& strPath)
|
|||
|
{
|
|||
|
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
|
|||
|
|
|||
|
// Get a handle to the process.
|
|||
|
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
|
|||
|
PROCESS_VM_READ,
|
|||
|
FALSE, processID );
|
|||
|
|
|||
|
// Get the process name.
|
|||
|
if (NULL != hProcess )
|
|||
|
{
|
|||
|
HMODULE hMod;
|
|||
|
DWORD cbNeeded;
|
|||
|
|
|||
|
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
|
|||
|
&cbNeeded) )
|
|||
|
{
|
|||
|
GetModuleFileNameEx( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Print the process name and identifier.
|
|||
|
strPath = szProcessName;
|
|||
|
// Release the handle to the process.
|
|||
|
CloseHandle( hProcess );
|
|||
|
}
|
|||
|
|
|||
|
BOOL EnumProcessAndFocus(CString processPath)
|
|||
|
{
|
|||
|
DWORD aProcesses[1024], cbNeeded, cProcesses;
|
|||
|
unsigned int i;
|
|||
|
BOOL bFound = false;
|
|||
|
|
|||
|
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
// Calculate how many process identifiers were returned.
|
|||
|
cProcesses = cbNeeded / sizeof(DWORD);
|
|||
|
|
|||
|
// Print the name and process identifier for each process.
|
|||
|
for ( i = 0; i < cProcesses; i++ )
|
|||
|
{
|
|||
|
if( aProcesses[i] != 0 )
|
|||
|
{
|
|||
|
CString strPath;
|
|||
|
PrintProcessNameAndID( aProcesses[i], strPath );
|
|||
|
if(strPath.Find(processPath) >= 0) {
|
|||
|
HWND hwnd = GetWinHandle(aProcesses[i]);
|
|||
|
::BringWindowToTop(hwnd);
|
|||
|
::SetForegroundWindow(hwnd);
|
|||
|
::ShowWindow(hwnd, SW_SHOWDEFAULT);
|
|||
|
bFound = true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return bFound;
|
|||
|
}
|
|||
|
|
|||
|
BOOL CTouchBoardApp::InitInstance()
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20>Ŵ<EFBFBD><C5B4>佺Ʈ<E4BDBA><C6AE> ComCtl32.dll <20><><EFBFBD><EFBFBD> 6 <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD>־<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>, Windows XP <20><EFBFBD> <20>ݵ<EFBFBD><DDB5><EFBFBD> InitCommonControlsEx()<29><> <20>ʿ<EFBFBD><CABF>մϴ<D5B4>.
|
|||
|
// InitCommonControlsEx()<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
|||
|
INITCOMMONCONTROLSEX InitCtrls;
|
|||
|
InitCtrls.dwSize = sizeof(InitCtrls);
|
|||
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
|
|||
|
// <20><> <20><EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻʽÿ<CABD>.
|
|||
|
InitCtrls.dwICC = ICC_WIN95_CLASSES;
|
|||
|
InitCommonControlsEx(&InitCtrls);
|
|||
|
|
|||
|
CWinApp::InitInstance();
|
|||
|
|
|||
|
if (!AfxSocketInit())
|
|||
|
{
|
|||
|
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* <20>ߺ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - added by ritoseo */
|
|||
|
HANDLE hEvent;
|
|||
|
hEvent = CreateEvent(NULL, FALSE, TRUE, AfxGetAppName());
|
|||
|
if ( GetLastError() == ERROR_ALREADY_EXISTS)
|
|||
|
{
|
|||
|
EnumProcessAndFocus(L"TouchBoard.exe");
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
/************************************/
|
|||
|
|
|||
|
AfxEnableControlContainer();
|
|||
|
|
|||
|
// <20><>ȭ <20><><EFBFBD>ڿ<EFBFBD> <20><> Ʈ<><C6AE> <20><> <20>Ǵ<EFBFBD>
|
|||
|
// <20><> <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD>ԵǾ<D4B5> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
|||
|
CShellManager *pShellManager = new CShellManager;
|
|||
|
|
|||
|
// MFC <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> "Windows <20><><EFBFBD><EFBFBD>" <20><><EFBFBD>־<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0>ȭ
|
|||
|
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
|
|||
|
|
|||
|
// ǥ<><C7A5> <20>ʱ<EFBFBD>ȭ
|
|||
|
// <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<>⸦ <20><><EFBFBD>̷<EFBFBD><CCB7><EFBFBD>
|
|||
|
// <20>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD> Ư<><C6AF> <20>ʱ<EFBFBD>ȭ
|
|||
|
// <20><>ƾ<EFBFBD><C6BE> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>մϴ<D5B4>.
|
|||
|
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Ű<><C5B0> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻʽÿ<CABD>.
|
|||
|
// TODO: <20><> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> ȸ<><C8B8> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>մϴ<D5B4>.
|
|||
|
SetRegistryKey(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><E7BFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1>"));
|
|||
|
|
|||
|
CTouchBoardDlg dlg;
|
|||
|
m_pMainWnd = &dlg;
|
|||
|
INT_PTR nResponse = dlg.DoModal();
|
|||
|
if (nResponse == IDOK)
|
|||
|
{
|
|||
|
// TODO: <20><><EFBFBD> [Ȯ<><C8AE>]<5D><> Ŭ<><C5AC><EFBFBD>Ͽ<EFBFBD> <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3><EFBFBD><EFBFBD>
|
|||
|
// <20>ڵ带 <20><>ġ<EFBFBD>մϴ<D5B4>.
|
|||
|
}
|
|||
|
else if (nResponse == IDCANCEL)
|
|||
|
{
|
|||
|
// TODO: <20><><EFBFBD> [<5B><><EFBFBD><EFBFBD>]<5D><> Ŭ<><C5AC><EFBFBD>Ͽ<EFBFBD> <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3><EFBFBD><EFBFBD>
|
|||
|
// <20>ڵ带 <20><>ġ<EFBFBD>մϴ<D5B4>.
|
|||
|
}
|
|||
|
else if (nResponse == -1)
|
|||
|
{
|
|||
|
TRACE(traceAppMsg, 0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȭ <20><><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>.\n");
|
|||
|
TRACE(traceAppMsg, 0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȭ <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> MFC <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS<47><53> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.\n");
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
if (pShellManager != NULL)
|
|||
|
{
|
|||
|
delete pShellManager;
|
|||
|
}
|
|||
|
|
|||
|
// <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> FALSE<53><45>
|
|||
|
// <20><>ȯ<EFBFBD>մϴ<D5B4>.
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|