Maxbad`Blog

系统服务弹出信息框!

2020-10-20 · 1 min read
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <tchar.h>
#include <WtsApi32.h>
#pragma comment(lib, "WtsApi32.lib")

void ShowMessage(TCHAR* lpszMessage, TCHAR* lpszTitle)
{
	// 获取当前的Session ID
	DWORD dwSessionId = ::WTSGetActiveConsoleSessionId();
	// 显示消息对话框
	DWORD dwResponse = 0;
	::WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, dwSessionId,
		lpszTitle, static_cast<DWORD>((_tcslen(lpszTitle) + 1) * sizeof(TCHAR)),
		lpszMessage, static_cast<DWORD>((_tcslen(lpszMessage) + 1) * sizeof(TCHAR)),
		MB_ICONINFORMATION, 0 /*wait indefinitely*/, &dwResponse, TRUE);
}

BOOL APIENTRY DllMain(HMODULE hModule,
	DWORD  ul_reason_for_call,
	LPVOID lpReserved
)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	{
		ShowMessage(TEXT("DLL_PROCESS_加载"), TEXT("Tips:"));
	}
	break;
	case DLL_THREAD_ATTACH:
	{
		ShowMessage(TEXT("DLL_THREAD_加载"), TEXT("Tips:"));
	}
	break;
	case DLL_THREAD_DETACH:
	{
		ShowMessage(TEXT("DLL_THREAD_销毁"), TEXT("Tips:"));
	}
	break;
	case DLL_PROCESS_DETACH:
	{
		ShowMessage(TEXT("DLL_PROCESS_销毁"), TEXT("Tips:"));
	}
	break;
	}
	return TRUE;
}