|
제가 너무 무성의하게 올렸는 것 같네요.
HookData는 제가 정의한 구조체로 원하시는 형태로 정의하시면 됩니다.
typedef struct
{
HWND hWnd; // hook master main form handle
HHOOK lock_KBD; // lock keyboard hook handle
HHOOK mnt_CRT; // monitoring screen hook handle
} HookData;
^^ 님이 쓰신 글 :
:
: 음, 내용을 보니, F12키가 눌러진 횟수를 체크하고 있네요.
: 시스템전체 갈고리이니, 당연히 dll로 만드신 것 같구요.
: 우선 dll과 app의 자료 공유가 문제인 것 같은데, 대부분 이럴때는 일반 file io를 사용하거나, 이것이 조금 추잡해 보인다면, 메모리상에서 자료 공유를 할 수 있도록 하는 Memory Mapped File IO(MMF) 방식을 많이 사용합니다.
: 제가 예제를 하나 첨부할께여.
: 첨부한 것은 MMF의 예입니다.
: 이와 같이 하는 이유는 아시겠지만, 32bit 체제에서의 dll은 다른 프로그램에서 실행되고 있으면 다른 메모리를 가지고 작업하기 때문입니다. 그래서 자료공유를 해야 할 경우는 공통적으로 접근할 수 있는 방법이 필요한데, 가장 손쉬운 방법이 파일접근법이져. MMF는 가상메모리 기법이 나오면서 부가적으로 나온 기법이라고 해야 할까요.
: 일단 이렇게 해서 dll과 app에서 자료를 읽을 때는 GetData를 쓸때는 SetData를 쓰면 될 것 같습니다.
:
: MMF에 대해서 더 궁금하시다면, 델파이코리아에 강좌가 올라와 있으니 참고하시기를....
:
:
:
: //---------------------------------------------------
: void GetData (HookData *hd)
: {
: HANDLE hMMF;
: LPVOID pData;
:
: hMMF = CreateFileMapping ((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0,
: sizeof (HookData), "MMF_SC_Hook");
: if ( GetLastError () == 0 )
: { // 오류발생시 제시도
: hMMF = CreateFileMapping ((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0,
: sizeof (HookData), "MMF_SC_Hook");
: }
: try
: {
: pData = MapViewOfFile (hMMF, FILE_MAP_WRITE, 0, 0, 0);
: if ( pData != NULL )
: {
: hd = (HookData*)pData;
: UnmapViewOfFile (pData);
: }
: }
: __finally
: {
: CloseHandle (hMMF);
: }
: }
: //---------------------------------------------------
: void SetData (HookData *hd)
: {
: HANDLE hMMF;
: LPVOID pData;
:
: hMMF = CreateFileMapping ((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0,
: sizeof (HookData), "MMF_SC_Hook");
: try
: {
: pData = MapViewOfFile (hMMF, FILE_MAP_WRITE, 0, 0, 0);
: if ( pData != NULL )
: {
: (HookData*)pData = hd;
: UnmapViewOfFile (pData);
: }
: }
: __finally
: {
: CloseHandle (hMMF);
: }
: }
: //---------------------------------------------------
|