Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14088] Re:중복실행 방지가 아니고 중복실행되면 강제 재실행 하는 방법은 없을까요?
빌더 [] 2315 읽음    2012-02-04 11:22
전에 올린 코드엔 논리적 오류가 있어서 다시 올립니다.


typedef struct
{
	HWND hWnd;
	int	 Left;
	int  Top;
} MAPDATA, *LPMAPDATA;


class TGlobalMap : public TObject
{
public:
	virtual __fastcall TGlobalMap();
	virtual __fastcall ~TGlobalMap();

	void __fastcall AcquireGlobalMap(TForm *MainForm);

private:
	static const TCHAR* const _ID;
	HANDLE _hMap;
	LPMAPDATA  _pMapData;
	TForm	*_MainForm;

	void __fastcall CreateGlobalMap();
};

const TCHAR* const TGlobalMap::_ID = L"Global/Application/MyMap";

__fastcall TGlobalMap::TGlobalMap()
{
	_hMap = NULL;
	_pMapData = NULL;
	_MainForm = NULL;
}

__fastcall TGlobalMap::~TGlobalMap()
{
	UnmapViewOfFile( _pMapData );
	CloseHandle(_hMap);
}

void __fastcall TGlobalMap::AcquireGlobalMap(TForm *MainForm)
{
	_MainForm = MainForm;
	HANDLE hMap = OpenFileMappingW(FILE_MAP_ALL_ACCESS, false, _ID);
	LPMAPDATA pMap;

	if( hMap )
	{
		pMap = (LPMAPDATA)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(MAPDATA));
		CloseHandle(hMap);
		if( !pMap ) {
			throw Exception("Fail - MapViewOfFile()");
		}

		PostMessage(pMap->hWnd, WM_QUIT, 0, 0);

		_MainForm->Left = pMap->Left;
		_MainForm->Top = pMap->Top;

		UnmapViewOfFile(pMap);
		CreateGlobalMap();
		return;
	}

	CreateGlobalMap();
}

void __fastcall TGlobalMap::CreateGlobalMap()
{
	_hMap = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(MAPDATA), _ID);

	if( !_hMap ) {
		throw Exception(L"Fail - CreateFileMapping()");
	}
	_pMapData = (LPMAPDATA)MapViewOfFile(_hMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(MAPDATA) );

	if( !_pMapData ) {
		throw Exception(L"Fail - MapViewOfFile()");;
	}

	_pMapData->hWnd = _MainForm->Handle;
	_pMapData->Left = _MainForm->Left;
	_pMapData->Top = _MainForm->Top;
}

WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
	TGlobalMap *Map;
	try
	{
		try
		{
			Map = new TGlobalMap();
			Application->Initialize();
			Application->MainFormOnTaskBar = true;
			Application->CreateForm(__classid(TForm1), &Form1);

			Map->AcquireGlobalMap(Application->MainForm);

			Application->Run();
		}
		catch (Exception &exception)
		{
			Application->ShowException(&exception);
		}
		catch (...)
		{
			try
			{
				throw Exception("");
			}
			catch (Exception &exception)
			{
				Application->ShowException(&exception);
			}
		}
	}
	__finally
	{
		delete Map;
	}
	return 0;
}


+ -

관련 글 리스트
14083 중복실행 방지가 아니고 중복실행되면 강제 재실행 하는 방법은 없을까요? 하두고 2104 2012/02/02
14088     Re:중복실행 방지가 아니고 중복실행되면 강제 재실행 하는 방법은 없을까요? 빌더 2315 2012/02/04
14089         Re:Re:빌더님 감사합니다. 하두고 1820 2012/02/06
14084     Re:중복실행 방지가 아니고 중복실행되면 강제 재실행 하는 방법은 없을까요? 빌더 1856 2012/02/03
14085         Re:Re:중복실행 방지가 아니고 중복실행되면 강제 재실행 하는 방법은 없을까요? 하두고 1823 2012/02/03
14087             Re:Re:Re:중복실행 방지가 아니고 중복실행되면 강제 재실행 하는 방법은 없을까요? 대박왕 2107 2012/02/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.