c++获取子类窗口句柄位置_C++根据进程获取主窗口的句柄

// processenum.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include

#include

#include

#include

#include

#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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值