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++]如何得到桌面窗口的句柄(桌面图标)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)