C++根据进程获取主窗口的句柄
2015-01-05 11:28
621 查看
原帖网址:http://www.cnblogs.com/ylhome/archive/0001/01/01/1529681.html
// processenum.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
#include <Psapi.h>
#include <string.h>
#pragma comment ( lib, "Psapi.lib" )
HWND lmshwnd;
BOOL CALLBACK EnumWindowsProc(HWND hwnd,DWORD lParam)
{
DWORD mpid;
GetWindowThreadProcessId(hwnd,&mpid);
if (mpid==lParam)
{
int i=GetWindowTextLength(hwnd);
char szhello[255];
char lmschar[255]=_T("名称");
GetWindowText(hwnd,szhello,i+1);
if (strstr(szhello,lmschar))
{
printf("%s\n",szhello);
lmshwnd=hwnd;
}
}
return TRUE;
}
void PrintProcessNameAndID( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("unknow");
//根据进程ID,打开进程返回进程的句柄
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,processID );
//得到进程名
if (NULL!=hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
//EnumProcessModules根据句柄获取实例,保存到hMod中
if (EnumProcessModules( hProcess,&hMod,sizeof(hMod),&cbNeeded) )
{
//获取根据进程句柄获取进程名称 szProcessName
GetModuleBaseName( hProcess, hMod, szProcessName,sizeof(szProcessName)/sizeof(TCHAR) );
}
}
//打印进程名和进程ID,其进程句柄为hProcess
TCHAR *lmsname=TEXT("LMSVirtualLab.EXE");
if (!strcmp(szProcessName,lmsname))
{
_tprintf( TEXT("%s (PID: %x)\n"),szProcessName,processID);
EnumWindows((WNDENUMPROC)EnumWindowsProc,processID);
//HDESK hDesk=OpenDesktop(_T(""),0,FALSE,DESKTOP_ENUMERATE);
//EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowsProc,processID);
}
CloseHandle( hProcess );
}
int _tmain(int argc, _TCHAR* argv[])
{
// 得到进程ID的列表
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
//列举所有进程的ID,返回到aProcesses数组中
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return 0;
//计算一共返回了多少个进程ID
cProcesses = cbNeeded / sizeof(DWORD);
//打印每个进程的名称和对应的ID
for ( i = 0; i < cProcesses; i++ )
{
if( aProcesses[i] != 0 )
{
PrintProcessNameAndID(aProcesses[i]);
}
}
printf("%x\n",lmshwnd);
ShowWindow(lmshwnd,SW_MAXIMIZE);
return 0;
}
// processenum.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
#include <Psapi.h>
#include <string.h>
#pragma comment ( lib, "Psapi.lib" )
HWND lmshwnd;
BOOL CALLBACK EnumWindowsProc(HWND hwnd,DWORD lParam)
{
DWORD mpid;
GetWindowThreadProcessId(hwnd,&mpid);
if (mpid==lParam)
{
int i=GetWindowTextLength(hwnd);
char szhello[255];
char lmschar[255]=_T("名称");
GetWindowText(hwnd,szhello,i+1);
if (strstr(szhello,lmschar))
{
printf("%s\n",szhello);
lmshwnd=hwnd;
}
}
return TRUE;
}
void PrintProcessNameAndID( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("unknow");
//根据进程ID,打开进程返回进程的句柄
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,processID );
//得到进程名
if (NULL!=hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
//EnumProcessModules根据句柄获取实例,保存到hMod中
if (EnumProcessModules( hProcess,&hMod,sizeof(hMod),&cbNeeded) )
{
//获取根据进程句柄获取进程名称 szProcessName
GetModuleBaseName( hProcess, hMod, szProcessName,sizeof(szProcessName)/sizeof(TCHAR) );
}
}
//打印进程名和进程ID,其进程句柄为hProcess
TCHAR *lmsname=TEXT("LMSVirtualLab.EXE");
if (!strcmp(szProcessName,lmsname))
{
_tprintf( TEXT("%s (PID: %x)\n"),szProcessName,processID);
EnumWindows((WNDENUMPROC)EnumWindowsProc,processID);
//HDESK hDesk=OpenDesktop(_T(""),0,FALSE,DESKTOP_ENUMERATE);
//EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowsProc,processID);
}
CloseHandle( hProcess );
}
int _tmain(int argc, _TCHAR* argv[])
{
// 得到进程ID的列表
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
//列举所有进程的ID,返回到aProcesses数组中
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return 0;
//计算一共返回了多少个进程ID
cProcesses = cbNeeded / sizeof(DWORD);
//打印每个进程的名称和对应的ID
for ( i = 0; i < cProcesses; i++ )
{
if( aProcesses[i] != 0 )
{
PrintProcessNameAndID(aProcesses[i]);
}
}
printf("%x\n",lmshwnd);
ShowWindow(lmshwnd,SW_MAXIMIZE);
return 0;
}
相关文章推荐
- C++ Windows 下 根据进程名获取进程ID 以及该进程下所有窗口的句柄
- C++根据进程获取主窗口的句柄
- Process 后, 如何获取打开窗口的句柄(根据进程句柄获取窗口句柄)
- 根据窗口句柄来获取进程ID
- 转:VC:如何根据文件名来获取程序进程和窗口句柄的代码(转载)
- 如何根据进程id获取该进程的主窗口句柄
- 根据进程id获取主窗口句柄
- Windows 下 根据进程名获取进程ID 以及该进程下所有窗口的句柄
- 根据进程名称获取窗口句柄
- python 根据标题获取窗口句柄,根据句柄取得进程号,关闭进程
- VB6 根据进程ID(PID)获取窗体句柄
- WIN API-VFP获取第三方窗体的控件信息(句柄,窗口ID,进程ID,类名,标题
- 根据句柄如何获取该进程的所有线程(转)
- C# 获取指定进程的主窗口句柄
- 由进程获取窗口(CMainframe)句柄
- VC根据进程ID获得主窗口句柄(不是进程句柄)
- 通过进程ID获取进程主窗口句柄
- (转)获取指定进程的主窗口句柄
- C#遍历进程获取主窗口句柄
- [转]C#获取窗口进程ID与句柄还有读写内存类