根据pid 获得窗口句柄?

时间:2021-08-26 09:05:13
知道程序的pid 如何和获得 窗口句柄能?
没看懂 enumwindows 函数 ?
希望高手 给个例子谢谢

12 个解决方案

#1


没有人吗 ?
自己顶 !
希望有好心的高手!

#2


enumwindows: 函数功能:该函数枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有顶层窗口枚举完为止或回调函数返回FALSE为止函数原型:BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);

    参数:

    lpEnumFunc:指向一个应用程序定义的回调数指针,请参看EnumWindowsProc。

    lPararm:指定一个传递给回调函数的应用程序定义值。

    返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。

    备注:EnumWindows函数不列举子窗口。

    在循环体中调用这个函数比调用GetWindow函数更可靠。调用GetWindow函数中执行这个任务的应用程序可能会陷入死循环或指向一个已被销毁的窗口的句柄。

    速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。

#3


空口无凭 啊 大侠 
能写个例子吗?

#4


高手在哪里 两天来毫无收获 郁闷啊!

#5


DWORD PID;
 PID = GetProcessPID(L"test.exe");
//获取进程pid函数
DWORD GetProcessPID(LPCTSTR pName)
{
 HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if (INVALID_HANDLE_VALUE == hSnapshot) {
  return NULL;
 }
 PROCESSENTRY32 pe = { sizeof(pe) };
 BOOL fOk;
 for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)){
  if (!_tcsicmp(pe.szExeFile, pName)) {
   CloseHandle(hSnapshot);
   return pe.th32ProcessID;
  }
 }
 return NULL;
}
//由进程pid获取进程句柄,置顶
HWND hh = GetProcessTopWindows(PID);
HWND GetProcessTopWindows(DWORD dwPID){
  count = 0;
  EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
  if(count > 0) {
   //cout << "窗口句柄是:" << nhWnd[count -1] << endl;//输出句柄,可用spy++工具核对
   return (nhWnd[count -1]);
  }
  return NULL;
}

#6


HWND GetProcessTopWindows(DWORD dwPID){
  count = 0;
  EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
  if(count > 0) {
   //cout << "窗口句柄是:" << nhWnd[count -1] << endl;//输出句柄,可用spy++工具核对
   return (nhWnd[count -1]);
  }
  return NULL;
}
什么意思啊 count不是永远都是零啊!?还有nhWnd是什么?
enumwindows 的百度里解释的太简单了!

#7


秧歌 帮帮忙

#8


大侠帮帮忙

#9


5楼高人 可惜EnumWndProc是什么
还有楼主你想msdn啊

#10


例子
http://download.csdn.net/source/2879513

#11


枚举所有窗口,同时得到此窗口pid.比较pid,等于则返回hwnd.

#12


引用 5 楼  的回复:
C/C++ code

DWORD PID;
 PID = GetProcessPID(L"test.exe");
//获取进程pid函数
DWORD GetProcessPID(LPCTSTR pName)
{
 HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if (INVALID_HAN……


楼主大哥,窗口回调函数求解啊。

#1


没有人吗 ?
自己顶 !
希望有好心的高手!

#2


enumwindows: 函数功能:该函数枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有顶层窗口枚举完为止或回调函数返回FALSE为止函数原型:BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);

    参数:

    lpEnumFunc:指向一个应用程序定义的回调数指针,请参看EnumWindowsProc。

    lPararm:指定一个传递给回调函数的应用程序定义值。

    返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。

    备注:EnumWindows函数不列举子窗口。

    在循环体中调用这个函数比调用GetWindow函数更可靠。调用GetWindow函数中执行这个任务的应用程序可能会陷入死循环或指向一个已被销毁的窗口的句柄。

    速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。

#3


空口无凭 啊 大侠 
能写个例子吗?

#4


高手在哪里 两天来毫无收获 郁闷啊!

#5


DWORD PID;
 PID = GetProcessPID(L"test.exe");
//获取进程pid函数
DWORD GetProcessPID(LPCTSTR pName)
{
 HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if (INVALID_HANDLE_VALUE == hSnapshot) {
  return NULL;
 }
 PROCESSENTRY32 pe = { sizeof(pe) };
 BOOL fOk;
 for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)){
  if (!_tcsicmp(pe.szExeFile, pName)) {
   CloseHandle(hSnapshot);
   return pe.th32ProcessID;
  }
 }
 return NULL;
}
//由进程pid获取进程句柄,置顶
HWND hh = GetProcessTopWindows(PID);
HWND GetProcessTopWindows(DWORD dwPID){
  count = 0;
  EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
  if(count > 0) {
   //cout << "窗口句柄是:" << nhWnd[count -1] << endl;//输出句柄,可用spy++工具核对
   return (nhWnd[count -1]);
  }
  return NULL;
}

#6


HWND GetProcessTopWindows(DWORD dwPID){
  count = 0;
  EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
  if(count > 0) {
   //cout << "窗口句柄是:" << nhWnd[count -1] << endl;//输出句柄,可用spy++工具核对
   return (nhWnd[count -1]);
  }
  return NULL;
}
什么意思啊 count不是永远都是零啊!?还有nhWnd是什么?
enumwindows 的百度里解释的太简单了!

#7


秧歌 帮帮忙

#8


大侠帮帮忙

#9


5楼高人 可惜EnumWndProc是什么
还有楼主你想msdn啊

#10


例子
http://download.csdn.net/source/2879513

#11


枚举所有窗口,同时得到此窗口pid.比较pid,等于则返回hwnd.

#12


引用 5 楼  的回复:
C/C++ code

DWORD PID;
 PID = GetProcessPID(L"test.exe");
//获取进程pid函数
DWORD GetProcessPID(LPCTSTR pName)
{
 HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if (INVALID_HAN……


楼主大哥,窗口回调函数求解啊。