GetForegroundWindow获取的是托管进程ApplicationFrameHost,而不是真正的进程,比如XD软件

问题描述

  最近做一个实时检测系统当前激活进程的软件,Photoshop、PPT、Word都没有问题,但是无法检测到XD软件的进程,返回的仅仅是ApplicationFrameHost进程,经过研究发现:XD软件被进程ApplicationFrameHost托管, 因此GetForegroundWindow()方法返回带有标题的窗口,但不返回托管的实际进程,

解决思路

  解决方法是再次通过EnumChildWindows获取ApplicationFrameHost的子窗口句柄,直到获取到实际进程。

代码:

  GitHub :https://github.com/qiuxianhu/WinFormGetActiveProcess

  CSDN:

原文地址:https://www.cnblogs.com/qtiger/p/10792160.html

时间: 2024-11-09 00:07:47

GetForegroundWindow获取的是托管进程ApplicationFrameHost,而不是真正的进程,比如XD软件的相关文章

UNIX高级环境编程(11)进程控制(Process Control)- 进程快照,用户标识符,进程调度

1 进程快照(Process Accounting) 当一个进程终止时,内核会为该进程保存一些数据,包括命令的小部分二进制数据.CPU time.启动时间.用户Id和组Id.这样的过程称为process accounting,本篇译为进程快照. 函数acct可以打开或关闭进程快照功能. 负责记录快照的数据结构如下所示: 成员说明: ac_flag成员记录进程执行过程中的特定事件(稍后的表中会详细说明): 进程创建时,初始化进程快照的数据在进程表(process table)中,但是只有在进程终止

Winform and WPF 第二遍双击快捷方式或应用程序打开原来的应用程序而不新建一个实例[进程通信 1]

private void Window_Loaded(object sender, RoutedEventArgs e)         {             Process[] pro = Process.GetProcesses();             int n = pro.Where(p => p.ProcessName.Equals("进程名称")).Count();             if (n > 1)             {      

Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四))

日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别和联系 _exit是linux系统调用,关闭所有文件描述符,然后退出进程. exit是c语言的库函数,他最

Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度(六)

日期 内核版本 架构 作者 GitHub CSDN 2016-05-29 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的创建 前言 Linux下有3个特殊的进程,idle进程(PID=0), init进程(PID=1)和kthreadd(PID=2) * idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产

Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别和联系 _exit是linux系统调用,关闭所有文件描述符,然后退出进程. exit是c语言的库函数,他最终调用_exit.在此之前,先清洗标准输出的缓存,调用用atexit注册的函数等, 在c语言的main函数中调用return就等价于调用exit. _Exit是c语言的库函数,自c99后加入,等

进程、join方法、守护进程、互斥锁

操作系统发展史 发展史1. 1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式.此时还没有操作系统的概念.2. 20世纪50年代后期,出现人机矛盾:手工操作的慢速度和计算机的高速度之间形成了尖锐矛盾,手工操作方式已严重损害了系统资源的利用率(使资源利用率降为百分之几,甚至更低),不能容忍.3. ?唯一的解决办法:只有摆脱人的手工操作,实现作业的自动过渡.这样就出现了成批处理.?? 批处理联机批处理系统(即作业的输入/输出由CPU来处理,例如 通过磁带)脱机批处理系

ps分明有这个进程,为什么杀不掉进程!!!还是根本就没有这个进程????

前两天安装mysql的时候要看一下有没有mysql的进程存在,就用了下面这条命令 ps -ef|grep mysql 然后查到了一条命令 以为有mysql进程正在运行就去kill -9 10674 可是死活就是杀不掉,气死我了.难道安装mysql要卡在这一步吗???我不服!!! 但事实是我这个小白完全没弄懂这个进程是干嘛的! 今天领导跟我们讲课的时候才意识到这点.就是这个进程信息是"查询这个命令"的进程,而不是真正的mysql的进程信息!也就是说,如果你查一个存在的进程的信息的话,是会

操作系统核心原理-3.进程管理(上):进程概要

进程管理.内存管理和文件管理是操作系统的三大核心功能,那么什么是进程呢?顾名思义,进程就是进展中的程序,或者说进程是执行中的程序.当一个程序被加载到内存之后就变为了进程.因此,我们可以得到:进程=程序+执行.本篇将会对进程.进程模型.进程状态以及进程的缺陷等进行学习,为后续学习进程调度与进程通信打下坚实基础. 一.进程是什么鬼? 1.1 从工作到进程 进程在Multics操作系统出现之前被叫做工作(Job),工作是IBM用于多道批处理程序设计中的概念.由于历史原因,Multics操作系统的研发人

Linux环境编程之进程(一):main函数调用、进程终止以及命令行参数和环境表

(一)main函数调用 main函数作为程序运行时的入口函数,它是如何被调用的呢?首先必须清楚一点,main函数也是一个函数,它只有被调用才能够执行.其实,在执行可执行程序时,在调用main函数之前,内核会先调用一个特殊的启动例程,将此启动例程作为可执行程序的起始地址.启动例程是如何作为可执行程序的起始地址的?这是由链接编译器设置的,而链接编译器则是由C编译器(如gcc编译器)调用的.启动例程作为可执行程序的起始地址主要做哪些工作呢?启动例程从内核取得命令行参数和环境变量值,以此来为main函数