VC中如何获得其他进程的窗口句柄

VC中如何获得其他进程的窗口句柄,第1张

HWND nhWnd[10];

int count;

BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)

{

DWORD dwID ;

GetWindowThreadProcessId(hwnd, &dwID) ;

if (dwID == (DWORD)lParam && IsWindowVisible(hwnd) && GetParent(hwnd) == NULL)

{

nhWnd[count++] = hwnd;

}

return (count == 10) false : true;

}

void GetProcessTopWindows(DWORD dwPID)

{

count = 0;

EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);

}

GetProcessTopWindows(dwPID)//dwPID进程句柄

将属于 dwPID进程的所有顶层可见窗口句柄保存到nhWnd 中 最多 10 个

对于当前窗口:HWND hwnd = GetActiveWindow();

对于特定窗口:HWND hwnd = FindWindow(NULL, TEXT("my window"));

这两个是API函数,与MFC无关,因此通用性较强,可以在MFC中使用,也可以是纯WIN32中使用。

包含图标的窗口实际上是DesktopWindow的一个字窗口。确切地讲,Desktop Window包含一个无标题的、类名为“SHELLDLL_DefView”的子窗口,这个字窗口又包含一个无标题的、类名为“SysListView32”的子窗口——这才是那个真正包含桌面图标的窗口。 // HWN[VC++]如何得到桌面窗口的句柄(桌面图标)

HWND CreateChild( LPSTR pszClassName, LPSTR pszWndName,

HWND hParent ){

HWND hChild = CreateWindowEx( 0, pszClassName,

pszWndName,

WS_CHILD|WS_VISIBLE|WS_OVERLAPPEDWINDOW,

100, 100, 200, 200,

hParent, NULL,

g_hInstance, NULL );

return hChild;

}

下面是MFC中获取各种指针的方式, 自己找去吧

在CWinApp中

AfxGetMainWnd()

m_pMainWnd

AfxGetMainWnd()->MDIGetActive()

AfxGetMainWnd()->GetActiveFrame()

SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()

MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()

SDI:AfxGetMainWnd()->GetActiveView()

MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()

在CMainFrame中 AfxGetApp()

theApp

MDIGetActive()

GetActiveFrame()

SDI:GetActiveView()->GetDocument()

MDI:MDIGetActive()->GetActiveView()->GetDocument() SDI:GetActiveView()

MDI:MDIGetActive()->GetActiveView()

在CChildFrame中 AfxGetApp()

theApp

GetParentFrame()

GetActiveView()->GetDocument() GetActiveView()

在CDocument中 AfxGetApp()

theApp

AfxGetMainWnd() AfxGetMainWnd()->MDIGetActive()

AfxGetMainWnd()->GetActiveFrame()

POSITION pos = GetFirstViewPosition();GetNextView(pos)

在CView中 AfxGetApp()

theApp

AfxGetMainWnd() GetParentFrame() GetDocument()

在其他类中 AfxGetApp()

AfxGetMainWnd() AfxGetMainWnd()->MDIGetActive()

AfxGetMainWnd()->GetActiveFrame()

SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()

MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()

SDI:AfxGetMainWnd()->GetActiveView()

MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()

CTestDlg 类中 声明 CTestA NewForm;

然后

void CTestDlg::OnButton1()

{

NewForm=new CTestA;

NewForm->Create(IDD_TestA_DIALOG,this);

NewForm->ShowWindow(SW_SHOW);

}

然后

void CTestDlg::OnButton2()

{

if(::IsWindow(NewForm->GetSafeHwnd()))

{

if(::IsWindowVisible(NewForm->GetSafeHwnd()))

{

AfxMessageBox("窗体存在");

}

else

{

AfxMessageBox("窗体不存在");

}

}

}

最后别忘了在新窗口中重载

void CTestADlg::PostNcDestroy()

{

delete this;

CDialog::PostNcDestroy();

}

以上就是关于VC中如何获得其他进程的窗口句柄全部的内容,包括:VC中如何获得其他进程的窗口句柄、【VC】GetClientRect中如何得到窗口的句柄、[VC++]如何得到桌面窗口的句柄(桌面图标)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10069214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存