window下启动另外一个进程和给进程发送消息

【window守护进程功能】 命令检查进程是否在运行。如果进程不存在(ERRORLEVEL为1),则输出提示消息并使用。文件,然后双击运行即可开始监控应用进程。脚本会一直运行,直到手动关闭命令窗口。文件,然后双击运行即可。脚本将会持续监控应用进程,当进程关闭时自动重新启动。文件,然后双击运行即可。命令来检查进程是否在运行,如果进程不存在,则使用。替换为你想要监控的应用进程的名称。命令来检查进程是否在运行。函数,并传入进程名称作为参数来执行检查。如果进程不存在,则使用。替换为要检查的进程名称。替换为要监控的应用进程的名称。 阅读详情

判断一个程序是否启动,并给一个进程发送信息

#include "Switch2.h"
#include <tchar.h>
#include <psapi.h>

///
/// 判断软件是否已经启动
///
///

struct ProcessWindow
{
	DWORD dwProcessId;
	HWND hWnd;
};

// 查找进程主窗口的回调函数
BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam)
{
	ProcessWindow *pProcessWindow = (ProcessWindow *)lParam;
	DWORD dwProcessId;
	GetWindowThreadProcessId(hWnd, &dwProcessId);

	// 判断是否是指定进程的主窗口
	if (pProcessWindow->dwProcessId == dwProcessId && IsWindowVisible(hWnd) && GetParent(hWnd) == NULL)
	{
		pProcessWindow->hWnd = hWnd;
		return FALSE;
	}
	return TRUE;
}

HWND  GetProcessMainWnd(DWORD  dwProcessId)
{
	ProcessWindow  wi;
	wi.dwProcessId = dwProcessId;
	wi.hWnd = NULL;
    (EnumWindowCallBack, (LPARAM)&wi);
	return  wi.hWnd;
}


///EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
/// 保存进程iD的数组;进程数组的大小;返回进程组的大小
DWORD FindProcess(LPCTSTR modname, BOOL bAddExe)
{
	DWORD aProcesses[1024];
	DWORD cbNeeded;
	DWORD cProcesses;
	unsigned int i;

    //枚举所有的进程
	if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
	{
		return -1;
	}

	// Calculate how many process identifiers were returned.
    //计算有多少个进程ID
	cProcesses = cbNeeded / sizeof(DWORD);

	// Print the name and process identifier for each process.
    //打印进程的名字和标识符
	for (i = 0; i < cProcesses; i++)
	{
		if (aProcesses[i] != 0)
		{
			TCHAR name[_MAX_PATH];
			TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
			// Get a handle to the process.
			HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
			if (NULL != hProcess)
			{
				HMODULE hMod;
				DWORD cbNeeded;

				if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
				{
                    //获取进程的名字
					GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName) / sizeof(TCHAR));
					std::wstring sModName = modname;
					if (_tcsicmp(modname, szProcessName) == 0)
					{
						return aProcesses[i];
					}
					sModName += L".exe";
					if (bAddExe && _tcsicmp(sModName.c_str(), name) == 0)
					{
						return aProcesses[i];
					}
				}
			}
		}
	}

	return 0;
}

	typedef struct _MessageData
	{
		int channel;
		int serialIndex;
	} MessageData, *PMessageData;

    //给进程发送信息
	void sendToDvs(int channel)
	{
		const wchar_t szDlgTitle[] = L"φ-OTDR ";

        HWND hSendWindow = GetConsoleWindow();

		if (hSendWindow == NULL)
		{
			return;
		}
		
		DWORD pid = FindProcess(L"TerminalPhi.exe", false);
		//HWND hRecvWindow = FindWindow(NULL, szDlgTitle);
		TCHAR cmd[] = TEXT("..\\dvs\\TerminalPhi.exe");//"..\\TerminalDvs2x2\\bin\\TerminalPhi.exe", "..\\dvs\\TerminalPhi.exe"
		STARTUPINFO si;
		PROCESS_INFORMATION pi;

		ZeroMemory(&si, sizeof(si));
		si.cb = sizeof(si);
		ZeroMemory(&pi, sizeof(pi));

		if (pid <= 0)
		{
            //程序未打开,启动程序
			CreateProcess(NULL, cmd, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);
			pid = pi.dwProcessId;
		}
		HWND hRecvWindow = GetProcessMainWnd(pid);
		
		if (hRecvWindow == NULL)
		{
			return;
		}

		MessageData messageData;
		messageData.channel = channel;
		messageData.serialIndex = m_port;
		COPYDATASTRUCT copyData;
		copyData.dwData = channel;
		copyData.cbData = sizeof(MessageData);
        copyData.lpData = &messageData;
        SendMessage(hRecvWindow, WM_COPYDATA, (WPARAM)hSendWindow, (LPARAM)&copyData);
	}
};
Android Framework学习——安卓进程启动流程(Android 13) 进程是作为应用程序容器存在的,每个应用启动前需要先创建一个进程,进程是由Zygote进程孵化来的,它拥有独立的资源空间,用来运行四大组件,大部分应用运行在一个进程上,部分应用如微信、支付宝等运行在多个进程上,比如微信小程序就是一个子进程。未完待续。 阅读详情

相关推荐

Qt多进程开发

包含所需库,定义发送的自定义类型、接收消息的窗体标题。自定义类型可以处理消息过多情况下,对消息的区分,如果不需要也可以去掉。comment。

qq_31286321的博客 2979

【笔记】C++一种把信息发送给窗口进行异步处理的方法

宏是MFC框架中用于将消息映射到消息处理函数的一种机制,可以扩展MFC框架的消息处理能力,处理自定义消息或系统消息。这段代码的作用是向指定的窗口发送一个自定义消息,告诉窗口接收到了一个消息,并将消息的一些参数传递给该窗口。窗口:“行,我注册一下,用ON_MESSAGE进行了消息映射,你来活了丢给我就行,你好好跑腿XD~”函数:该函数是Windows API中的一个函数,用于向指定的窗口发送一个消息。在这里,它表示接收到的消息的命令码。是一个消息处理函数的名称,它必须是窗口类的成员函数,并且具有特定的签名。

weixin_53513779的博客 621

VS Code+ESP-IDF开发避坑指南:头文件标红报错的5种解决方法(附CMakeLists.txt配置)

本文详细解析了在VS Code中使用ESP-IDF开发ESP32时头文件标红报错的5种解决方法,包括环境配置检查、CMakeLists.txt规范配置、路径解析策略、缓存清理技巧和高级调试手段。特别提供了CMakeLists.txt的实战配置示例,帮助开发者彻底解决头文件路径问题,提升开发效率。

weixin_33670786的博客 559

C++-win32-SendMessage-最简单的进程间消息传递-消息钩子

使用消息钩子会出现bug。

插件开发 1089

模拟滤波器的基础知识和设计

使用Python实现多种模拟滤波器

faltas的博客 3529

多机器人编队人工势场法协同避障算法原理及实现

ROS及SLAM进阶教程(十一)多机器人编队人工势场法协同避障算法原理及实现避障算法原理避障算法仿真 多机器人协同编队需要将理论和实践紧密地结合起来,其应用包括编队队形生成、保持、变换和路径规划与避障等等都是基于图论的理论基础完成的。 详细请参考ROS及SLAM进阶教程(八)多机器人协同编队算法原理及实现 自主避障功能是机器人编队在各种环境中保持自身安全的重要功能,在编队的基础上加入避障的功能,机器人可扫描到一定范围内的障碍物(包括其他机器人),在即将与之发生冲突时提前规避冲突,以保证自身的安全性,同时

Redglass的博客 1万+

多进程通信, 带消息的事件(Win32, C++)

适用共享内存与事件简单实现了一个多进程之间收发数据的代码, 发送数据后,所有接收线程都可以收到数据.

FlameCyclone的博客 433

GAN网络详解析

介绍目前常见的GAN网络,以及GAN网络的基本组成

wm199的博客 6504

Window下跨进程发消息(命名消息)

1、定义消息名,两个进程消息名必须一致 2、OpenEvent / CreateEvent 3、SetEvent / WaitForSingleObject 4、CloseHandle (各进程必须关闭消息句柄以防止句柄泄露) 进程A: 1、 #define MYEVENT L"MYEVENT_725231EA-83DB-4880-BE50-20F6F031C5D3" 2、 HANDLE hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE...

qq_33650889的博客 829

从球谐函数到哈希编码:Instant-NGP如何重构NeRF的数学基础

本文深入解析了Instant-NGP如何通过多分辨率哈希编码重构NeRF的数学基础,显著提升训练速度和渲染效率。对比传统球谐函数,哈希编码在计算复杂度、频率适应性和内存访问效率上具有明显优势,为实时神经渲染技术开辟了新方向。

weixin_29240711的博客 418

【架构】-- StarRocks 和 Doris 介绍与选型建议

查询性能 | ✅ 高性能,支持向量化执行和 CBO 优化器 | ✅ 高性能,优化的查询引擎 |- **实时性要求高**:如果业务对数据的实时性要求较高,建议选择 **StarRocks**,其在实时数据处理和低延迟查询方面表现优越。- **复杂查询需求**:对于需要处理复杂多表关联查询的场景,两者均可胜任,需根据具体性能测试结果进行选择。

欢迎来到我的博客,一起探索代码里的世界! 1831

Windows程序的启动过程

Windows程序启动过程: 1.操作系统为进程分配地址空间,然后将exe的映像文件载入进程地址空间。 2.操作系统读取exe映像文件的导入段数据,找到需要导入的dll文件,并且导入dll到进程地址空间。 3.操作系统读取dll映像文件的导入段数据,找到需要导入的dll文件,并且导入dll到进程地址空间。 4.操作系统读取exe映像文件的导入段数据,找到导入的函数,并且到对应的dll中找到...

萧戈的专栏 704

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案

本文主要介绍了ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

使用windows钩子捕获进程的启动和关闭消息

2012年12月13日补充: 这篇文章写的时候是我还在上学的时候,所以不管是从技术实现角度还是文笔都显得很嫩,在此向所有无意间看到这篇文章的人表示抱歉。我写了这篇文章之后2年有人想问我要源代码,唉,如果我下次写文章一定贴上源代码,不过那么老的代码我实在是不大情愿找出来了。 我希望这篇文章已经把实现原理的每一个细节都点到了,虽然讲了很多废话,但是细节都埋在废话当中。 我自己简单看了一下我自己的

maoenpei002的专栏 9267

水与光的奇妙“切割之舞”:水导激光切割技术探秘

水导激光切割技术的诞生,是材料加工领域不断追求高精度、高质量加工的成果。传统激光切割技术在加工过程中,材料会因瞬间高温而产生热变形、热影响区大以及切割面粗糙等问题,这些弊端在对一些高精度、热敏性材料的加工中尤为突出 ,迫切需要一种新的技术来克服这些难题。水导激光切割技术的起源可以追溯到 20 世纪 80 年代。1986 年,德国公司 Aesculap-Werke AG 首次提出了将水流引入激光切割过程的创新想法,并制造出首代水导激光设备。不过,当时的技术尚处于雏形阶段,仅仅是在光纤出口添加了一小柱水流,激光

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1673

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Window进程监控工具,能自动重启进程和卡死检测

这款进程监控工具是一款绿色免安装的 Windows 小程序,体积小巧但功能实用。它通过定时检测系统中指定进程的运行状态(是否卡死、资源占用是否异常),并在发现问题时通过消息通知方式提醒用户。界面简洁直观,操作门槛低,基本零配置即可使用,非常适合需要持续运行软件或保持系统稳定性的用户。总的来说,这款「进程监控工具」虽然界面朴素,但功能实用性极强。它适合希望在后台静默运行、实时掌握进程状态、避免卡顿崩溃造成损失的用户,放在生产环境运行完全不是问题。特别适合开发、测试、办公等对程序稳定性有较高要求的场景。

运维老生常谈 2443

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python发送windows消息测试

python发送windows消息测试 import win32gui, win32con, win32api, win32event, win32process, time, psutil, datetime tarExe = r"E:\test.x64.exe" win32api.ShellExecute(0, ‘open’, tarExe, r’“C:\Users\test.png”’,’’...

w29468的博客 1463

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Windows进程间消息通信

第一個程序“以管理員身份運行”,這個程序要調用另一個程序時不希望再“以管理員身份運行”,於是取explorer的令牌再用這個令牌去調用另一個程序,可是調用CreateProcessAsUser產生1314的錯誤。 ...

甜筒八部 的专栏 1450

应用启动流程 Window创建流程 安卓系统启动流程(待补充)

点击app的启动图标时,Android系统会从Zygote进程fork创建出一个新的进程分配给该应用;之后会依次创建和初始化Application类,创建MainActivity类,加载主题样式Theme中背景等属性;然后再inflate布局,当oncreate/onstart/onresume方法都走完了之后,最后才对contentview进行measure/layout/draw显示再界面上,到此,应用的第一次启动才算完成; ...

emmmsuperdan的博客 445

Wpf发送接收 win32消息

#region WPF发送和接收win32消息 public const int WM_GETTEXT = 0x0D; public const int WM_SETTEXT = 0x0C; public const int WM_SIZEING = 0x0214; public const int WM_COPYDATA...

weixin_30511039的博客 583

Electron渲染进程通知主进程启动Unity

/** * Created by admin on 2018/11/13. */ const ipc = require('electron').ipcRenderer; // function showTip(bool,str){ var overlay = document.getElementById("overlay"); if(bool){ over...

为人类进化与传承而奋斗! 769

C#进程间通信,传递消息给其它窗口

目前,网上关于C#进程间通信的方法有很多种,但是总结起来它们不外乎从以下两个方面进行考虑: 一、在两个进程之间建立一个共同区域,其中一个进程改变这个区域的内容,而另一个进程则去读取它,反之亦 然。比如,可以让两个进程共享同一块内存,通过改变和读取内存中的内容进行通信;或者,创建一个文件,两个进程同时占用,甚至可以利用注册表或者剪贴板充当这个“共同区域”。 二、利用API函数去找到进程窗

wem520的专栏 4388

低权限进程向高权限进程发送wm_copydata消息失败的原因

问题描述 :     用非管理员权限启动dzh,dzh再启动dtssm,由于dtssm的配置文件app.manifest 中设置了requireAdministrator,导致dtssm总是以管理员权限启动的。     故当dzh向dtssm发消息时,会发生用户界面特权隔离。 大智慧端调用 sendMessge 时,LastError为 5 ,即拒绝访问。

aa1991的专栏 2990

Win8、Win10中不同进程间发送自定义消息失败

程序A和程序B,其中程序A向程序B发送自定义消息,在Win7、XP上都没有问题,但是在Win8、Win10中有些时候无法收到消息,导致调用失败。 经过一番测试,最终发现问题所在: 情景1: 用户账户控制中设置为从不通知                                               ===》    收发消息成功 情景2: 用户账户控制设置为其他(除了从不通

长风v持成的博客 3089

ShellExecuteEx启动WORD进程关不掉的处理

需求:启动一个WORD进程给用户操作,用户关闭进程后进行后续操作 一般处理方法,用ShellExecuteEx或者CreateProcess函数启动进程,然后等待进程退出。代码如下: m_localFilePath="C:\DocExc006926.doc"; SHELLEXECUTEINFO ShExecInfo ; memset(&ShExecInfo,0,sizeof

求索 1706

Winform跨程序发送、接收消息

看到论坛上一个问题:程序已经在运行,再次运行时,要向前一个实例发送一些消息。 简单的写了一些,直接贴代码! 1、封装了一个类,用于发送信息 class Note { [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessag

yuankaiwsl的博客 2925
上一篇: Qt的串口通信例子
下一篇: Qt的日常编程过程中遇见的问题和使用
Simple_core
博客等级 码龄6年 929粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值