优化输出
很久没使用vs2017了,说我过期了,我不得已在微软上面注册一个账户。
开始编程,发现没法输入我的一些调试信息。我记得使用windbg可以的,但是又要我注册,我就放弃了,使用另外的办法
在做DLL库的时候经常会通过printf打印一些调试信息,但是MFC项目引用后printf信息是无法输出到调试窗口的,网上一些说通过AllocConsole();打开命令窗口在VS2017中竟然不好用,最终经过网络寻找到可用方法:
1、在vs中打开你的解决方案。
2、鼠标移动到你的项目名称上,点击鼠标右键,再点击属性,此刻会此项目的属性页。
3、在配置属性中,找到生成事件,在找到后期生成事件。
4、在命令行的右边空白处添加“editbin /SUBSYSTEM:CONSOLE $(OUTDIR)$(ProjectName).exe”,点击确定。
5、以上4步就已经ok了,此时运行你的程序,会多弹出一个黑色命令行的提示框,用来输出你的打印信息。
作者:路过之君
来源:CSDN
(https://blog.csdn.net/xinxinsky/article/details/80733400)
版权声明:本文为博主原创文章,转载请附上博文链接!
搞窗口遍历
我想遍历桌面下的子窗口,发现使用findwindow,不好用。还是使用遍历函数好用
Ø EnumChildWindows
使用这个函数得到一个窗口的所有子窗口,包括子窗口的子窗口。不过在列举的过程中这个函数不能够列出正在创建的或者销毁的窗口。
通俗说,这个函数就是全部子窗口都找到了。所以我们只需要编写处理函数就可以了。
这个EnumWindowProc是回调函数,所以是系统调用的,当然可能是多线程调用,我认为他的参数hWnd是0000000累加1上去的,所以达到遍历所有子窗口的功能。但是是多线程,所以是没一定顺序的。
HWND h_temp=NULL;
BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam)
{
char szCapture[1024]; CString str;
int nLen = GetWindowTextA(hWnd, szCapture, 1024);
//遍历所有子窗口
if (nLen)
{
if (strcmp(szCapture, (char*)lParam) == 0)
{
h_temp = hWnd;
//输出到调试窗口的。
//printf("%x已经找到 %s", h_temp,szCapture);
}
printf("%x %s\n", hWnd, szCapture);
}
return TRUE;
}
HWND h = GetDesktopWindow();
//获取了桌面句柄h 后,遍历全部子窗口,找一个窗口标题是 用户登录的窗口,然后用h_temp保存起来,等待利用。
EnumChildWindows(h,EnumWindowProc, (LPARAM)"用户登录");
main_hwnd = h_temp;