windows给同名多进程发消息
来源:互联网 发布:sql主键和外键的建立 编辑:程序博客网 时间:2024/04/28 23:57
#include <TlHelp32.h>
DWORD g_processID; //进程句柄
DWORD g_ThreadID; //线程句柄
CRITICAL_SECTION g_hCritical; //windows 锁句柄(确切的应该叫关键代码段)
bool IsExsit(CString strExeFile)
{
bool IsExsit(CString strExeFile)
{
//加锁
//::EnterCriticalSection(&g_hCritical);
CString strFileName;
bool bFound = false;
//::EnterCriticalSection(&g_hCritical);
CString strFileName;
bool bFound = false;
PROCESSENTRY32 pe32 = { sizeof(pe32) };
HANDLE hSnapShot = NULL;
HANDLE hSnapShot = NULL;
//系统内进行进程快照
hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == INVALID_HANDLE_VALUE)
{
hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == INVALID_HANDLE_VALUE)
{
//如果快照失败,释放锁
::LeaveCriticalSection(&g_hCritical);
return bFound;
}
//遍历这些快照后的结果,直到找到我们需要的进程,如果没有找到就返回失败
::LeaveCriticalSection(&g_hCritical);
return bFound;
}
//遍历这些快照后的结果,直到找到我们需要的进程,如果没有找到就返回失败
BOOL bFlag = ::Process32First(hSnapShot, &pe32);
int nCurProcessId = GetCurrentProcessId();
while (bFlag)
{
strFileName = CString(pe32.szExeFile);
if (strFileName.CompareNoCase(strExeFile) == 0 && nCurProcessId != pe32.th32ProcessID)
{
bFound = true;
g_processID = pe32.th32ProcessID;
break;
}
bFlag = ::Process32Next(hSnapShot, &pe32);
}
int nCurProcessId = GetCurrentProcessId();
while (bFlag)
{
strFileName = CString(pe32.szExeFile);
if (strFileName.CompareNoCase(strExeFile) == 0 && nCurProcessId != pe32.th32ProcessID)
{
bFound = true;
g_processID = pe32.th32ProcessID;
break;
}
bFlag = ::Process32Next(hSnapShot, &pe32);
}
//关闭系统快照
//::CloseToolhelp32Snapshot(hSnapShot);
//释放锁
//::CloseToolhelp32Snapshot(hSnapShot);
//释放锁
//::LeaveCriticalSection(&g_hCritical);
return bFound;
}
return bFound;
}
//首先查看该进程是否存在,同时找到该进程的进程id
void CheckProcess()
{
DWORD dwErr;
if (IsExsit(_T("Dialog01.exe")))
{
void CheckProcess()
{
DWORD dwErr;
if (IsExsit(_T("Dialog01.exe")))
{
HWND hwnd = ::FindWindow(NULL, _T("Dialog01"));
if (hwnd)
{
if (hwnd)
{
//根据句柄查找到该窗口对应的线程
g_ThreadID = GetWindowThreadProcessId(hwnd, &g_processID);
//发送消息
CString Msg;
Msg.Format(_T("Send msg wm_keyup to threadId:%d"),g_ThreadID);
AfxMessageBox(Msg);
::PostThreadMessage(g_ThreadID, WM_KEYUP, 13, 13);
}
else
{
dwErr = GetLastError();
}
}
}
g_ThreadID = GetWindowThreadProcessId(hwnd, &g_processID);
//发送消息
CString Msg;
Msg.Format(_T("Send msg wm_keyup to threadId:%d"),g_ThreadID);
AfxMessageBox(Msg);
::PostThreadMessage(g_ThreadID, WM_KEYUP, 13, 13);
}
else
{
dwErr = GetLastError();
}
}
}
0 0
- windows给同名多进程发消息
- Windows任务管理器同名进程批量删除
- 发消息控制其他进程
- QQ 点击这里给我发消息
- 多线程 自己给自己发消息
- MSNPSHARP主动发消息给联系人
- C#给其他程序发消息
- dll 工程给exe 发消息
- QQ 点击这里给我发消息
- 用飞q给我发消息
- 134_Activity给Service发消息
- 135_Service给Activity发消息
- 192_Activity给Service发消息
- 模拟按键给窗口发消息
- Java如何给极光推送发消息
- Java如何给极光推送发消息
- WebSocket给一个id发消息
- 不同进程间消息互发
- 【C语言】三种方法实现strlen函数
- 超实用的Git命令图解
- Android实战开发之CheckBox+ListView长按多选增删改查功能完美实现步骤
- AS-->如何用Gradle命令行,构建Android工程
- Mac OS X磁盘重新分区后 BootCamp Windows启动项丢失
- windows给同名多进程发消息
- [乡土民间故事_徐苟三传奇]第十七回_新老爷错寻调弄鬼
- [乡土民间故事_徐苟三传奇]第十八回_贪便宜“铁公鸡”挨打
- 16-01-15 RelativeLayout 属性
- [乡土民间故事_徐苟三传奇]第十九回_争棉被痛打蒋四棍
- 深度卷积网络CNN与图像语义分割
- Qwt中对于某个轴的缩放操作
- Android layer-list的属性和使用详解
- 40个针对集合的Java面试问题和答案