屏幕保护程序在执行时发生“无法定位程序输入点ChangeWindowMessageFilter于动态链接库USER32.dll上。”错误
我用Visual Studio 2008写了一个屏幕保护程序,编译没有问题,但是在执行时发生“无法定位程序输入点ChangeWindowMessageFilter于动态链接库USER32.dll上。”错误,请有过类似经验的大侠给点帮助。
----源码如下-----
#include <windows.h>
#include "resource.h"
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")
#pragma comment(lib,"Scrnsave.lib")
LRESULT WINAPI ScreenSaverProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
// 从注册表中获取屏幕保护程序的设置信息
// 创建一个计时器
// 处理其它的初始化工作
return TRUE;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hWnd, &ps);
SetBkMode(hDC, TRANSPARENT);
SetTextColor(hDC, RGB(0x33, 0xcc, 0));
TextOut(hDC, 150, 150, "www.poroco.com.cn", 15);
EndPaint(hWnd, &ps);
break;
}
case WM_TIMER:
// 处理绘制工作
return TRUE;
case WM_DESTROY:
// 销毁计时器
// 处理其它销毁工作
return TRUE;
default:
return DefScreenSaverProc(hWnd, message, wParam, lParam);
}
return FALSE;
}
BOOL WINAPI ScreenSaverConfigureDialog (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
switch ( message )
{
case WM_INITDIALOG:
// 创建设置对话框并初始化各控件值
return TRUE;
case WM_COMMAND:
if ( LOWORD( wParam ) == IDOK )
{
// 将用户的输入保存到注册表中
EndDialog( hDlg, LOWORD( wParam ) );
return TRUE;
}
else if( LOWORD( wParam ) == IDCANCEL )
{
EndDialog( hDlg, LOWORD( wParam ) );
return TRUE;
}
break;
}
return FALSE;
}
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
// 注册特殊窗口类或自定义窗口类
return TRUE;
}
[解决办法]
同样的问题~在VC6.0能够正常,用vs2008编译出来的就不正常了。郁闷ing
[解决办法]
ChangeWindowMessageFilter是Vista以后才有的API,
你要LoadLibrary,GetProcAddr才行,编译,链接过了,只能说明你有SDK。