代码中要用到SetLayeredWindowAttributes方法,但这个方法只能在WIN2000以上才能得到支持。我通过什么方法才能让一个编译好的EXE在2000下使用这个方法,在98下直接跳过这个方法呢?

解决方案 »

  1.   

    用函数指针或者直接嵌入汇编,给你个例子,半透明任务栏
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) 
    {
    HWND hWnd = FindWindow("Shell_TrayWnd", NULL);
    SetWindowLong(hWnd, GWL_EXSTYLE, 800000);
    HMODULE hUser32DLL = GetModuleHandle("User32.dll");
    GetProcAddress(hUser32DLL, "SetLayeredWindowAttributes");
    __asm 
    {
    push 2
    push 128
    push 0
    push hWnd
    call eax
    }
    return 0;
    }
      

  2.   

    先GetVersion判断是否是2000以上系统,如果是LoadLibrary、GetProcAddress动态使用SetLayeredWindowAttributes函数
      

  3.   


    也可以不判断系统,直接LoadLibrary、GetProcAddress,没有SetLayeredWindowAttributes这个函数的系统会GetProcAddress失败的