高手请进__急--关于回调函数的问题

tanhuong 2004-01-06 02:01:34
//枚举所有的窗口,然后向窗口发送关闭的消息
#include <windows.h>


BOOL CALLBACK EnumWindowsProc( HWND hwnd,
DWORD lParam
);

//
// EnumWindowsProc must be called from a Windows
// application on Windows 95.
//
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
//
// Close all open applications.
//
// HWND oldHWnd = NULL;
EnumWindows(EnumWindowsProc, 0);

// Now do a regular logoff.
ExitWindowsEx(EWX_LOGOFF , 0);
return 1;

}

BOOL static CALLBACK EnumWindowsProc(
HWND hwnd,
DWORD lParam
)
{
DWORD pid = 0;
LRESULT lResult;
HANDLE hProcess;
DWORD dwResult;

lResult = SendMessageTimeout(
hwnd,
WM_QUERYENDSESSION,
0,
ENDSESSION_LOGOFF,
SMTO_ABORTIFHUNG,
2000,
&dwResult);

if( lResult )
{
//
// Application will terminate nicely, so let it.
//
lResult = SendMessageTimeout(
hwnd,
WM_ENDSESSION,
TRUE,
ENDSESSION_LOGOFF,
SMTO_ABORTIFHUNG,
2000,
&dwResult);
}
else // You have to take more forceful measures.
{
//
// Get the ProcessId for this window.
//
GetWindowThreadProcessId( hwnd, &pid );
//
// Open the process with all access.
//
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
//
// Terminate the process.
//
TerminateProcess(hProcess, 0);
}
//
// Continue the enumeration.
//
return TRUE;
}

出错,如下
--------------------Configuration: EnumWindows - Win32 Debug--------------------
Error: Could not delete file "G:\新s2012\邹军\VC++\资料\如何枚举窗口句柄\EnumWindows\Debug\EnumWindows.obj" : 找不到网络路径。

EnumWindows.obj - 1 error(s), 0 warning(s)
请高手指点一下,在下不胜感激

...全文
74 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanhuong 2004-01-06
  • 打赏
  • 举报
回复
to fzd999(花差)兄弟:再次感谢你的相助,按照你的提示,我把那段该死的程序pass,能否再请教一下其中的原因(注:这段代码是我下的,我的水平还很菜),万分感谢,再送你100分
fzd999 2004-01-06
  • 打赏
  • 举报
回复
我刚才研究了半天~原来这个程序是关掉所有窗口的

建立一个控制台程序,但是要是支持MFC的那种

然后把那个该死的BOOL CALLBACK EnumWindowsProc(HWND hwnd, DWORD lParam);的第二个参数的类型改成long,就是BOOL CALLBACK EnumWindowsProc(HWND hwnd, long lParam);

注意,声明和后面的函数定义都要改!

楼主的问题有够难!
tanhuong 2004-01-06
  • 打赏
  • 举报
回复
我已重建了一个新的工程,但还是不行,以上是报错的信息
tanhuong 2004-01-06
  • 打赏
  • 举报
回复
报错如下:
--------------------Configuration: call - Win32 Debug--------------------
Compiling...
test_call.cpp
E:\call\test_call.cpp(25) : error C2664: 'EnumWindows' : cannot convert parameter 1 from 'int (struct HWND__ *,unsigned long)' to 'int (__stdcall *)(struct HWND__ *,long)'
None of the functions with this name in scope match the target type
Error executing cl.exe.

test_call.obj - 1 error(s), 0 warning(s)

bluebohe 2004-01-06
  • 打赏
  • 举报
回复
你重新建一个工程,然后把这些代码拷贝进去后重新编译一下吧
victor_cui 2004-01-06
  • 打赏
  • 举报
回复
你的输出目标文件的路径还是指向网络路径吧
vollin 2004-01-06
  • 打赏
  • 举报
回复
是不是文件属性的问题?
tanhuong 2004-01-06
  • 打赏
  • 举报
回复
我已拷贝到本地,但还是不行,再次感谢各位大虾
ross33123 2004-01-06
  • 打赏
  • 举报
回复
或者把工程拷贝到本地
victor_cui 2004-01-06
  • 打赏
  • 举报
回复
这zh个错误跟程序没有关系吧,是你环境关系,估计是路径不正确,如果有G:的话是不是应该把++去掉,或者换成英文路径
ross33123 2004-01-06
  • 打赏
  • 举报
回复
代码没有问题

建议查一下网络通不通
fzd999 2004-01-06
  • 打赏
  • 举报
回复
代码没有问题

建议你RebuildAll
taianmonkey 2004-01-06
  • 打赏
  • 举报
回复
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1116

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧