关于MFC程序对话提醒框Z轴高度的问题

最近遇到一个比较奇怪的问题,记录下,有类似的问题的同学可以参考下。

要求Windows开机后直接调用程序A,C#编写,程序A是占领全面屏幕,看不到桌面或者任务管理器。
打开注册表 开始菜单 运行 regedit。
定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
shell 数据 修改 explorer.exe为需要启动的程序路径。即可满足上面描述。

顺便提一下:
如果要求开机进入桌面而且直接启动程序A,则定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RUN
选中RUN目录,TITLE栏中编辑->新建->字符串值
新建一个启动配置,配置格式可根据RUN目录中已经存在的文件配置即可。

回到原题,开机进入程序A后,要求用程序A调用MFC项目B,程序B有一个导出数据功能,要求屏蔽程序B的主界面,但是导出数据后要有一个体系,导出数据成功,难点在于当前界面完全被程序A占着,B的提醒框出不来。

涉及到一个Windows中各个应用程序Z轴高度的问题。
试了三种方法,前2种都失败了:
1.使用 SetWindowPos方法
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE|SWP_NOACTIVATE);
SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE |SWP_SHOWWINDOW );
这个方法具体怎么用可以参考百度
2.
SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE |SWP_SHOWWINDOW );
HWND hForegdWnd = ::GetForegroundWindow();
DWORD dwCurID = ::GetCurrentThreadId();
DWORD dwForeID = ::GetWindowThreadProcessId(hForegdWnd, NULL);
::AttachThreadInput(dwCurID, dwForeID, TRUE);
::SetForegroundWindow(GetSafeHwnd());
::AttachThreadInput(dwCurID, dwForeID, FALSE);
这2种方法都是CSDN上找来的,但是在当前的环境下测试都失效了
3.
DWORD dwTimeout = -1;
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)&dwTimeout, 0);
if (dwTimeout >= 100) {
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
}
::SetForegroundWindow( ::AfxGetApp()-> GetMainWnd()->GetSafeHwnd());//置顶当前 Z轴高度
MessageBoxTimeout(NULL, S(ID_STRING_DATA_READ_SUCCESS),S(ID_STRING_SUCCESS), MB_ICONINFORMATION, GetSystemDefaultLangID(),2000);//MessageBoxTimeout 对话框2秒后自己关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值