大家看看这段代码为什么运行有错误。(关机)

ririhaoma 2006-04-18 10:32:31

typedef void £ŸWINAPI¢ RUN£ £ŸUINT;¦ 

HMODULE hShell32;


RUN RunFileDlg;


//ʹÓà LoadLibraryº¯Êý»ñµÃshell32.dllµÄ¾ä±ú


hShell32 = LoadLibrary£Ÿ"shell32.dll";


//ʹÓÃGetProcAddressº¯Êý»ñµÃÕâ¸öº¯ÊýµÄµØÖ·£¬


RunFileDlg = £ŸRUN£ GetProcAddress£ŸhShell32¢Ÿ MAKEINTRESOURCE£Ÿ60;£ ¦ 


//×îºóʹÓÃÖ¸Õëµ÷ÓÃÕâ¸öº¯Êý£¬³öÏֹػú¶Ô»°¿ò


RunFileDlg£ŸNULL;
...全文
460 35 点赞 打赏 收藏 举报
写回复
35 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
DeadWolf 2006-04-19
搂主
MAKEINTRESOURCE
本来就不是用来关机的

关机用ExitWindowsEx
  • 打赏
  • 举报
回复
gogowhy 2006-04-19
m
  • 打赏
  • 举报
回复
xiaoyi20 2006-04-19
楼上的说得很清楚了.
  • 打赏
  • 举报
回复
Stefine 2006-04-19
重启

TOKEN_PRIVILEGES tp;
HANDLE hToken;
LUID luid;
LPTSTR MachineName=NULL;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken ))
{
// PERR("OpenProcessToken",GetLastError());
return ;
}
if(!LookupPrivilegeValue(MachineName, SE_SHUTDOWN_NAME, &luid))
{
// PERR("LookupPrivilegeValue", GetLastError());
return ;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL, NULL ); //到这里,是取得权限///
ExitWindowsEx(EWX_REBOOT,EWX_FORCE);
  • 打赏
  • 举报
回复
Stefine 2006-04-19
关机
TOKEN_PRIVILEGES tp;
HANDLE hToken;
LUID luid;
LPTSTR MachineName=NULL;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken ))
{
// PERR("OpenProcessToken",GetLastError());
return ;
}
if(!LookupPrivilegeValue(MachineName, SE_SHUTDOWN_NAME, &luid))
{
// PERR("LookupPrivilegeValue", GetLastError());
return ;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL, NULL ); //到这里,是取得权限///
ExitWindowsEx(EWX_POWEROFF,EWX_FORCE);
  • 打赏
  • 举报
回复
ririhaoma 2006-04-18
还有问题。调试虽然没问题,但是不能关机呀。
  • 打赏
  • 举报
回复
ririhaoma 2006-04-18
摁谢谢
  • 打赏
  • 举报
回复
ririhaoma 2006-04-18
摁谢谢jacklzw88(不可爱咯) ( ) 信誉:100 还有楼上的几为。你来我发的几个关机的和重起的
帖子回个贴我把那些分都给你。总共三个。
  • 打赏
  • 举报
回复
jacklzw88 2006-04-18
用我最后一段,不用加#define MAKEINTRESOURCE(i) (LPTSTR) ((DWORD) ((WORD) (i)))的
我只是给你看看原型,记得用msdn
  • 打赏
  • 举报
回复
ririhaoma 2006-04-18
我现在该成这样了。


typedef int(WINAPI *RUN)(WORD);
HMODULE hShell32;
RUN RunFileDlg;
hShell32 = LoadLibrary("shell32.dll");
RunFileDlg=GetProcAddress(hShell32,"MAKEINTRESOURCE");
FreeLibrary(hShell32);

删除了。刚才的#define命令但是还是有一处错误。


typedef int(WINAPI *RUN)(WORD);
HMODULE hShell32;
RUN RunFileDlg;
hShell32 = LoadLibrary("shell32.dll");
RunFileDlg=GetProcAddress(hShell32,"MAKEINTRESOURCE");
FreeLibrary(hShell32);


ration: lianxi - Win32 Debug--------------------
Compiling...
lianxiDlg.cpp
E:\lianxi\lianxiDlg.cpp(181) : error C2440: '=' : cannot convert from 'int (__stdcall *)(void)' to 'int (__stdcall *)(unsigned short)'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Ö´ÐÐ cl.exe ʱ³ö´í.

lianxi.exe - 1 error(s), 0 warning(s)



  • 打赏
  • 举报
回复
jacklzw88 2006-04-18
typedef int (WINAPI * RUN)(void);
HMODULE hShell32;
RUN RunFileDlg;
hShell32 = LoadLibrary("shell32.dll");
RunFileDlg = GetProcAddress(hShell32,"MAKEINTRESOURCE");
FreeLibrary(hShell32);

帮你调好的!
  • 打赏
  • 举报
回复
DoItFreely 2006-04-18
你太粗心了,自己好好检查。以下是一个例子
typedef int(WSPAPI *RUN)(WORD);
WSAPI => WINAPI
  • 打赏
  • 举报
回复
ririhaoma 2006-04-18
全部改成英文了,还是那么多错误
  • 打赏
  • 举报
回复
DoItFreely 2006-04-18
你在代码里面使用的标点都是中文的
  • 打赏
  • 举报
回复
ririhaoma 2006-04-18

Compiling...
lianxiDlg.cpp
E:\lianxi\lianxiDlg.cpp(7) : warning C4005: 'MAKEINTRESOURCE' : macro redefinition
c:\program files\microsoft visual studio\vc98\include\winuser.h(150) : see previous definition of 'MAKEINTRESOURCE'
E:\lianxi\lianxiDlg.cpp(177) : error C2143: syntax error : missing ')' before '*'
E:\lianxi\lianxiDlg.cpp(177) : error C2143: syntax error : missing ';' before '*'
E:\lianxi\lianxiDlg.cpp(177) : error C2065: 'RUN' : undeclared identifier
E:\lianxi\lianxiDlg.cpp(177) : error C2059: syntax error : ')'
E:\lianxi\lianxiDlg.cpp(177) : error C2275: 'WORD' : illegal use of this type as an expression
c:\program files\microsoft visual studio\vc98\include\windef.h(144) : see declaration of 'WORD'
E:\lianxi\lianxiDlg.cpp(177) : error C2100: illegal indirection
E:\lianxi\lianxiDlg.cpp(179) : error C2146: syntax error : missing ';' before identifier 'RunFileDlg'
E:\lianxi\lianxiDlg.cpp(179) : error C2065: 'RunFileDlg' : undeclared identifier
E:\lianxi\lianxiDlg.cpp(181) : error C2440: '=' : cannot convert from 'int (__stdcall *)(void)' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Ö´ÐÐ cl.exe ʱ³ö´í.

lianxi.exe - 1 error(s), 0 warning(s)
  • 打赏
  • 举报
回复
ririhaoma 2006-04-18

E:\lianxi\lianxiDlg.cpp(177) : error C2143: syntax error : missing ';' before '?'
E:\lianxi\lianxiDlg.cpp(177) : error C2143: syntax error : missing ';' before '?'
E:\lianxi\lianxiDlg.cpp(179) : error C2065: 'RUN' : undeclared identifier
E:\lianxi\lianxiDlg.cpp(179) : error C2146: syntax error : missing ';' before identifier 'RunFileDlg'
E:\lianxi\lianxiDlg.cpp(179) : error C2065: 'RunFileDlg' : undeclared identifier
E:\lianxi\lianxiDlg.cpp(181) : error C2440: '=' : cannot convert from 'int (__stdcall *)(void)' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Ö´ÐÐ cl.exe ʱ³ö´í.

lianxi.exe - 1 error(s), 0 warning(s)
  • 打赏
  • 举报
回复
jacklzw88 2006-04-18
刚才帮你看了一下
#define MAKEINTRESOURCE(i) (LPTSTR) ((DWORD) ((WORD) (i)))
  • 打赏
  • 举报
回复
jacklzw88 2006-04-18
看看哪些有中文空格隐藏!!再出错的提示给我看一下
  • 打赏
  • 举报
回复
DoItFreely 2006-04-18
先粘贴到记事本里面,再粘进来就好了。
shell32.dll的60号导出函数……没见过原形,不好说
  • 打赏
  • 举报
回复
ririhaoma 2006-04-18

拷贝你的
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
VC/MFC
加入

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2006-04-18 10:32
社区公告

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