[转载]C#获取进程的主窗口句柄
- public class User32API
- {
- private static Hashtable processWnd = null;
- public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);
- static User32API()
- {
- if (processWnd == null)
- {
- processWnd = new Hashtable();
- }
- }
- [DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)]
- public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);
- [DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)]
- public static extern IntPtr GetParent(IntPtr hWnd);
- [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")]
- public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);
- [DllImport("user32.dll", EntryPoint = "IsWindow")]
- public static extern bool IsWindow(IntPtr hWnd);
- [DllImport("kernel32.dll", EntryPoint = "SetLastError")]
- public static extern void SetLastError(uint dwErrCode);
- public static IntPtr GetCurrentWindowHandle()
- {
- IntPtr ptrWnd = IntPtr.Zero;
- uint uiPid = (uint)Process.GetCurrentProcess().Id; // 当前进程 ID
- object objWnd = processWnd[uiPid];
- if (objWnd != null)
- {
- ptrWnd = (IntPtr)objWnd;
- if (ptrWnd != IntPtr.Zero && IsWindow(ptrWnd)) // 从缓存中获取句柄
- {
- return ptrWnd;
- }
- else
- {
- ptrWnd = IntPtr.Zero;
- }
- }
- bool bResult = EnumWindows(new WNDENUMPROC(EnumWindowsProc), uiPid);
- // 枚举窗口返回 false 并且没有错误号时表明获取成功
- if (!bResult && Marshal.GetLastWin32Error() == )
- {
- objWnd = processWnd[uiPid];
- if (objWnd != null)
- {
- ptrWnd = (IntPtr)objWnd;
- }
- }
- return ptrWnd;
- }
- private static bool EnumWindowsProc(IntPtr hwnd, uint lParam)
- {
- uint uiPid = ;
- if (GetParent(hwnd) == IntPtr.Zero)
- {
- GetWindowThreadProcessId(hwnd, ref uiPid);
- if (uiPid == lParam) // 找到进程对应的主窗口句柄
- {
- processWnd[uiPid] = hwnd; // 把句柄缓存起来
- SetLastError(); // 设置无错误
- return false; // 返回 false 以终止枚举窗口
- }
- }
- return true;
- }
- }
调用User32API.GetCurrentWindowHandle()即可返回当前进程的主窗口句柄,如果获取失败则返回IntPtr.Zero。
http://www.cnblogs.com/qiuyi21/articles/1302732.html
[转载]C#获取进程的主窗口句柄的更多相关文章
- C#获取进程的主窗口句柄的实现方法
通过调用Win32 API实现. public class User32API { private static Hashtable processWnd = null; public delegat ...
- Delphi 通得进程ID获取主窗口句柄
只知道进程ID,获取主窗口句柄的方法如下: 通过EnumWindows枚举所有窗口 使用GetWindowThreadProcessID,通过窗口句柄获取进程ID 比便获取的进程ID与当前已知的进程I ...
- C# 获取进程或线程的相关信息
信息来自: http://blog.163.com/kunkun0921@126/blog/static/169204332201293023432113/ using System; using S ...
- C#根据进程名称获取进程的句柄?
C#根据进程名称获取进程的句柄或C#如何获取其他进程的句柄? 有时候标题名是动态变化的,所以不使用FindWindow方法! [StructLayout(LayoutKind.Sequential)] ...
- Bash Shell 获取进程 PID
转载地址:http://weyo.me/pages/techs/linux-get-pid/ 导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运 ...
- CMD魔法堂:获取进程路径和PID值的方法集
一.前言 在开发发布更更新工具——更新Weblogic应用模块时,了解到更新Weblogic应用需要先关闭Weblogic应用窗口然后是清缓存.更新应用文件,最后再重启Weblogic应用窗口. ...
- C++获取进程号及窗口
#include <TlHelp32.h> //根据进程名获取进程ID BOOL GetPidByProcessName(TCHAR *pProcess, DWORD*dwPid) { H ...
- 写一个Windows上的守护进程(8)获取进程路径
写一个Windows上的守护进程(8)获取进程路径 要想守护某个进程,就先得知道这个进程在不在.我们假设要守护的进程只会存在一个实例(这也是绝大部分情形). 我是遍历系统上的所有进程,然后判断他们的路 ...
- C#依据进程名称获取进程的句柄?
C#依据进程名称获取进程的句柄或C#怎样获取其它进程的句柄? 有时候标题名是动态变化的,所以不使用FindWindow方法! [StructLayout(LayoutKind.Sequential)] ...
随机推荐
- hdu 2689 Sort it
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2689 题目分析:求至少交换多少次可排好序,可转换为逆序对问题. 用冒泡排序较为简单,复杂度较大~~ 也 ...
- 汇编中PTR常见的几种用法
汇编中PTR的用法确实是令人比较头疼的,我特意搜集了一些PTR的应用实例,可以从例子中揣摩出规律: 1.MOV WORD PTR [DI],OFFSET BUF1 2.SUB BYTE ...
- C指针赋值
Node* p = A; Node* f = B; Node* t; t = p; t = f 本人试图让p指向B,但这样操作是不行的.如下图:只是改变了t的指向,p并没有变
- 字符串转成int数组
package lianxi; import java.awt.image.ConvolveOp; public class ZhengshuShuzu { public static void ma ...
- 分享:Perl打开与读取文件的方法
在Perl中可以用open或者sysopen函数来打开文件进行操作,这两个函数都需要通过一个文件句柄(即文件指针)来对文件进行读写定位等操作. Perl打开与读取文件的方法,供大家学习参考.本文转自: ...
- 2013-07-23 IT 要闻速记快想
### ========================= ###苹果的新动向今天华尔街日报称,苹果正在测试13英寸的大号iPad,以及更大屏幕的iPhone.而早在五月份,韩国资讯网站 ET New ...
- python 内置模块之hashlib、hmac、uuid
一.hashlib md5和sha算法通过消息摘要算法生成定长的消息摘要,消息摘要算法是不可逆的.但同一段消息通过摘要算法后得到的值是一样的,可一通过比对消息摘要验证数据的完整性. sha算法比MD5 ...
- C# 刷票程序
上个月有人让我帮忙投票,我想要不写个程序给他多刷点得了,虽然这事情有悖原则,就当娱乐了.. 先上图 1.分析 既然是网页投票,那肯定可以伪造HTTP请求来实现刷票.需要分析的就是该网站到底采用了哪些防 ...
- erp与电子商务集成的结构图
集约化采购管理系统和电子商务平台统一规划.统一设计,通过系统之间的安全接口全面集成,进而实现资源共享和数据共享,企业内外部系统运作的一体化,建立企业同上.下游合作伙伴的电子数据交互,从而提高电子商务的 ...
- Python流程控制
if语句: --Pyhon中的IF跟其他语言类似,if包含一个逻辑表达式,使用表达式比较,在比较的结果的基础上做出判断 --if expression: statement(s) 注意:Python使 ...