VC怎么向某个进程或窗口发送关机消息

VC如何向某个进程或窗口发送关机消息?
    我现在想模拟Windows关机消息以关闭某些程序,比如讨厌的极域电子教室,不知道极域电子教室接收到系统的关机通知时是否会判断消息发出的进程?RT,如何模拟Windows关机向进程发送WM_QUERYENDSESSION消息和WM_ENDSESSION消息?如何获取程序OnQueryEndSession()的返回?
    我测试过,以下代码无法使用。编译过了但是关闭不了程序。

#include "windows.h"
int main(int argc, char* argv[])
{
HWND hWnd = ::FindWindow(NULL,"无标题 - 记事本");
if( hWnd != NULL)
{
::SendMessage(hWnd,WM_QUERYENDSESSION,0,0);
}
return 0;
}
windows关机消息 VC 模拟windows消息 关闭进程

------解决方案--------------------
如果可以的话,用 CreateRemoteThread()远程调用ExitProcess()函数退出进程.

PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hProcess = 0;
DWORD dwExitCode = 0;
BOOLEAN bEnabled;

HANDLE hProessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProessSnap != INVALID_HANDLE_VALUE)
{
if (::Process32First(hProessSnap, &pe32))
{
do
{
if (StrCmpI(pe32.szExeFile, TEXT("notepad.exe")) == 0)
{
RtlAdjustPrivilege(0x14, 1, 0, &bEnabled);
hProcess = ::OpenProcess(PROCESS_VM_OPERATION
------解决方案--------------------
PROCESS_VM_WRITE
------解决方案--------------------
PROCESS_VM_READ
------解决方案--------------------
PROCESS_CREATE_THREAD, FALSE, pe32.th32ProcessID);
CloseHandle(hProessSnap);
break;
}
}while(::Process32Next(hProessSnap, &pe32));
}
}

LPVOID Param = VirtualAllocEx(hProcess, NULL, sizeof(DWORD), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hProcess, Param, (LPVOID)&dwExitCode, sizeof(DWORD), NULL);

HANDLE hThread = CreateRemoteThread(hProcess, 
NULL, 
NULL, 
(LPTHREAD_START_ROUTINE)ExitProcess,
Param, 
NULL, 
NULL);