如何获取Windows / C#顶层窗口的进程名称和标题
发布时间:2020-12-14 01:46:17 所属栏目:Windows 来源:网络整理
导读:在主题…或更好的 – 如何从顶部窗口更改事件时获取这些信息? 感谢提示.所以我应该使用P / Invoke.这是完整的代码: using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace CuckooCoach{ class
在主题…或更好的 – 如何从顶部窗口更改事件时获取这些信息?
感谢提示.所以我应该使用P / Invoke.这是完整的代码:
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace CuckooCoach { class Monitor { [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] static extern int GetWindowTextLength(IntPtr hWnd); // int GetWindowText( // __in HWND hWnd,// __out LPTSTR lpString,// __in int nMaxCount // ); [DllImport("user32.dll")] private static extern int GetWindowText(IntPtr hWnd,StringBuilder lpString,int nMaxCount); // DWORD GetWindowThreadProcessId( // __in HWND hWnd,// __out LPDWORD lpdwProcessId // ); [DllImport("user32.dll")] private static extern uint GetWindowThreadProcessId(IntPtr hWnd,out uint lpdwProcessId); //HANDLE WINAPI OpenProcess( // __in DWORD dwDesiredAccess,// __in BOOL bInheritHandle,// __in DWORD dwProcessId //); [DllImport("kernel32.dll")] private static extern IntPtr OpenProcess(uint dwDesiredAccess,bool bInheritHandle,uint dwProcessId); [DllImport("kernel32.dll")] private static extern bool CloseHandle(IntPtr handle); // DWORD WINAPI GetModuleBaseName( // __in HANDLE hProcess,// __in_opt HMODULE hModule,// __out LPTSTR lpBaseName,// __in DWORD nSize // ); [DllImport("psapi.dll")] private static extern uint GetModuleBaseName(IntPtr hWnd,IntPtr hModule,StringBuilder lpFileName,int nSize); // DWORD WINAPI GetModuleFileNameEx( // __in HANDLE hProcess,// __out LPTSTR lpFilename,// __in DWORD nSize // ); [DllImport("psapi.dll")] private static extern uint GetModuleFileNameEx(IntPtr hWnd,int nSize); public static string GetTopWindowText() { IntPtr hWnd = GetForegroundWindow(); int length = GetWindowTextLength(hWnd); StringBuilder text = new StringBuilder(length + 1); GetWindowText(hWnd,text,text.Capacity); return text.ToString(); } public static string GetTopWindowName() { IntPtr hWnd = GetForegroundWindow(); uint lpdwProcessId; GetWindowThreadProcessId(hWnd,out lpdwProcessId); IntPtr hProcess = OpenProcess(0x0410,false,lpdwProcessId); StringBuilder text = new StringBuilder(1000); //GetModuleBaseName(hProcess,IntPtr.Zero,text.Capacity); GetModuleFileNameEx(hProcess,text.Capacity); CloseHandle(hProcess); return text.ToString(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-7 – Windows 7:Delprof替换删除配置文件
- windows – 使用加密密码创建服务
- windows – 在域中为单个Exchange服务器进行备份和故障转移
- wpf – Window GotFocus事件未触发
- 用Win2003?server打造安全的个人Web服务器
- 预定任务 – Windows Server 2016计划任务计划必须在将来使
- windows-server-2008 – 无法增加Windows Server 2008上的动
- window.onbeforeunload的等价于AngularJS中的路由
- Windows使用VNC连接linux桌面
- windows-server-2008-r2 – 如何从Powershell的Hyper-V 200