• Delphi通过调用COM对象实现更改桌面壁纸


       从前我也是用SystemParametersInfo这API来改桌面壁纸的,问题多多,也不知道哪错了,就没深究下去。看了CSDN的帖子后,大彻大悟~~ 
            在XP下,SystemParametersInfo只支持BMP格式的图片,如果用其他格式的话就会黑屏?(我记得当年我就是这情况 现在懒得测试了) 把这API的调用方法扔出来:
    SystemParametersInfo(SPI_SETDESKWALLPAPER, 1, pointer(pchar(‘c:a.bmp’)), 0); 
           因为这API函数的局限性

    uses shlobj,  ComObj;

    procedure SetWP(wp:string);
    var
        hObj: IUnknown;
        ADesktop: IActiveDesktop;
    begin
        hObj := CreateComObject(CLSID_ActiveDesktop);
        ADesktop := hObj as IActiveDesktop;
        ADesktop.SetWallpaper(PWideChar(WideString(wp)), 0);
        ADesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);?
    end;

    //调用方法
    SetWP('C:1.jpg');

    注意:因为调用的是COM对象,那么就需要初始化COM库
    如果没有引用类似 dialogs 那种单元的话,就需要手动调用CoInitialize() 然后退出时释放对象

    uses ActiveX;

    initialization
        CoInitialize(nil);

    finalization
        CoUninitialize;

    http://www.lsworks.net/article/29.html

  • 相关阅读:
    二叉树的遍历
    深度优先遍历和广度优先遍历
    N的阶乘末尾有多少个0
    框架产生的历史
    Ansible--初始ansible
    日积跬步05
    日积跬步04
    日积跬步03
    日积跬步02
    日积跬步01
  • 原文地址:https://www.cnblogs.com/findumars/p/4999035.html
Copyright © 2020-2023  润新知