#pragma once

#include "PipeClient.h"

namespace Utility
{
#pragma region 定义的全局结构体;
    // 配置文件内容;
    typedef struct __CFG_CONTENT__
    {
        // 窗口标题;
        TCHAR szWindowTitel[MAX_PATH];
        // 窗口进程名称(防止名称一样);
        TCHAR szWndProcessName[MAX_PATH];
        // 管道名称;
        TCHAR szPipeName[MAX_PATH];

        __CFG_CONTENT__()
        {
            memset(szWindowTitel, 0, MAX_PATH*sizeof(TCHAR));
            memset(szWndProcessName, 0, MAX_PATH*sizeof(TCHAR));
            memset(szPipeName, 0, MAX_PATH*sizeof(TCHAR));
        }
    }CFG_CTX, *pCFG_CTX;

    // DLL所在窗口信息;
    typedef struct __WND_INFO__
    {
        // DLL所在进程窗口句柄;
        HWND hWnd;
        // 窗口名称;
        TCHAR szWindowTitle[MAX_PATH];
        // DLL所在进程ID;
        DWORD dwProcessId;

        __WND_INFO__()
        {
            hWnd = NULL;
            dwProcessId = 0;
            memset(szWindowTitle, 0, MAX_PATH*sizeof(TCHAR));
        }
    }WndInfo, *pWndInfo;
#pragma endregion

#pragma region 全局变量;
    // 当前DLL模块句柄;
    extern HMODULE g_hDLLModule;
    // 当前DLL内部工作者线程句柄;
    extern HANDLE hWorkThreadProc;
    // 当前DLL所在路径;
    extern TCHAR g_szCurModulePath[MAX_PATH];
    // 管道实例;
    extern CPipeClient *g_pPipeClient;
    // 配置文件名称;
    extern TCHAR g_szConfigFile[MAX_PATH];
    // 配置文件内容;
    extern CFG_CTX g_cfgCtx;
    // DLL所在窗口信息;
    extern WndInfo g_WndInfo;
#pragma endregion

#pragma region 全局函数
    //////////////////////////////////////////////////////////////////////////
    // 全局函数;
    // 获取配置文件内容;
    void GetConfigContent();
    // 卸载DLL;
    void FreeLibraryAndExit();
    // Debug日志输出;
    void dprintf(TCHAR* pszStr, ...);
#pragma endregion
};
