我遇到的两个难题,希望高手帮忙 先得到窗口句柄 根据这个就可以得到任何关于窗口的信息 当然包括简单的Caption 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请参考ChildWindowFromPoint、WindowFromPointOK? 1.创建进程时你可以得到进程ID,在CreateProcess(...)的最后一个参数PROCESS_INFORMATION中;2.枚举所有窗口,然后GetWindowThreadProcessId(...)可以得到某一个窗口的进程ID,逐个和在1中得到的进程ID比较,知道相等为止。这样你就得到了进程的主窗口句柄;3.根据找到的窗口句柄可以得到窗口的Caption. 用GetWindowText(...);4.改变POP菜单,不太可能吧,关键时你的程序是客户任意指定的。那怎么可能知道。 改变菜单标题是这样的,我自己的程序有一个POP菜单,菜单的作用不需要改变,我也不需要添加菜单项目,只需要改变其中某一个标题就可以了,应该可以做到。现在主要是这个菜单是在程序中动态加载的,有什么方法可以改变吗? 你先用CMenu::CreatePopupMenu()创建弹出窗口,CMenu::RemoveMenu();可以让你动态删除菜单项CMenu::AppendMenu( ) ;可以让你动态加载菜单项 to table(天刹孤星): 能不能说得清楚些? 你是指改变别的进程的还是本进程的菜单,如果是别的进程,恐怕难啰;自己进程的话,简单啊。下面的代码是动态设置,菜单项的Check属性,看是否对你有用:#define SET_RADIO_MMI(hMenu,ID,mii,szBuf) { mii.fMask = MIIM_TYPE | MIIM_STATE; (LPTSTR) mii.dwTypeData = szBuf; mii.cch = sizeof(szBuf); GetMenuItemInfo(hMenu, ID, FALSE, &mii); mii.fType |= MFT_RADIOCHECK; mii.fState = MFS_UNCHECKED; SetMenuItemInfo(hMenu, ID, FALSE, &mii);}void InitPopMenu(HMENU hMenu){ MENUITEMINFO miInfo; TCHAR szMenu[64]; // Bring up the context menu m_hMenu = GetSubMenu(hMenu, 0); // Set the default menu item miInfo.cbSize = sizeof(MENUITEMINFO); miInfo.fMask = MIIM_STATE; miInfo.fState = MFS_DEFAULT; SetMenuItemInfo(m_hMenu, ID_PROPERTIES, FALSE, &miInfo); SET_RADIO_MMI(m_hMenu,ID_APPBAR_TOP,miInfo,szMenu) SET_RADIO_MMI(m_hMenu,ID_APPBAR_BOTTOM,miInfo,szMenu) SET_RADIO_MMI(m_hMenu,ID_APPBAR_LEFT,miInfo,szMenu) SET_RADIO_MMI(m_hMenu,ID_APPBAR_RIGHT,miInfo,szMenu)} 哦,对不起,SET_RADIO_MMI是一个自定已宏函数,怎么连在一起了#define SET_RADIO_MMI(hMenu,ID,mii,szBuf) \{\ mii.fMask = MIIM_TYPE | MIIM_STATE;\ (LPTSTR) mii.dwTypeData = szBuf;\ mii.cch = sizeof(szBuf);\ GetMenuItemInfo(hMenu, ID, FALSE, &mii);\ mii.fType |= MFT_RADIOCHECK;\ mii.fState = MFS_UNCHECKED;\ SetMenuItemInfo(hMenu, ID, FALSE, &mii);\} 请问下GetDIBits的用法 MFC中图片的插入 帮忙 如何让程序运行时不显示窗口? 关于虚函数问题 如何执行资源中的EXE文件!高手帮帮忙! TLS有何用? 翻译 请教VC如何加密字符串 如何在不同dpi下在A4上打印实际大小(宽,高)相同的线框 急!面试题。如何判断两条线段ab、cd是否相交,并求相交点x的位置。(a、b、c、d点的位置都已知) 为什么VC编DLL在BCB中用不了!选用的是REGULAR DLL WITH MFC STATICLLY LINKED
OK?
2.枚举所有窗口,然后GetWindowThreadProcessId(...)可以得到某一个窗口的进程ID,逐个和在1中得到的进程ID比较,知道相等为止。这样你就得到了进程的主窗口句柄;
3.根据找到的窗口句柄可以得到窗口的Caption. 用GetWindowText(...);4.改变POP菜单,不太可能吧,关键时你的程序是客户任意指定的。那怎么可能知道。
CMenu::RemoveMenu();可以让你动态删除菜单项
CMenu::AppendMenu( ) ;可以让你动态加载菜单项
能不能说得清楚些?
#define SET_RADIO_MMI(hMenu,ID,mii,szBuf) { mii.fMask = MIIM_TYPE | MIIM_STATE; (LPTSTR) mii.dwTypeData = szBuf; mii.cch = sizeof(szBuf); GetMenuItemInfo(hMenu, ID, FALSE, &mii); mii.fType |= MFT_RADIOCHECK; mii.fState = MFS_UNCHECKED; SetMenuItemInfo(hMenu, ID, FALSE, &mii);}void InitPopMenu(HMENU hMenu)
{
MENUITEMINFO miInfo;
TCHAR szMenu[64]; // Bring up the context menu
m_hMenu = GetSubMenu(hMenu, 0); // Set the default menu item
miInfo.cbSize = sizeof(MENUITEMINFO);
miInfo.fMask = MIIM_STATE;
miInfo.fState = MFS_DEFAULT;
SetMenuItemInfo(m_hMenu, ID_PROPERTIES, FALSE, &miInfo); SET_RADIO_MMI(m_hMenu,ID_APPBAR_TOP,miInfo,szMenu)
SET_RADIO_MMI(m_hMenu,ID_APPBAR_BOTTOM,miInfo,szMenu)
SET_RADIO_MMI(m_hMenu,ID_APPBAR_LEFT,miInfo,szMenu)
SET_RADIO_MMI(m_hMenu,ID_APPBAR_RIGHT,miInfo,szMenu)
}
#define SET_RADIO_MMI(hMenu,ID,mii,szBuf) \{\ mii.fMask = MIIM_TYPE | MIIM_STATE;\ (LPTSTR) mii.dwTypeData = szBuf;\ mii.cch = sizeof(szBuf);\ GetMenuItemInfo(hMenu, ID, FALSE, &mii);\ mii.fType |= MFT_RADIOCHECK;\ mii.fState = MFS_UNCHECKED;\ SetMenuItemInfo(hMenu, ID, FALSE, &mii);\}