bekomm Active Desktop nicht



  • mach ich bereits

    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    	int nRetCode = 0;
    
    	HRESULT hr;
    	IActiveDesktop *pActiveDesktop;
    
    	hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                          IID_IActiveDesktop, (void**)&pActiveDesktop);
    
    	pActiveDesktop->Release();
    
    	// initialize MFC and print and error on failure
    

    wenn ich pActiveDesktop->Release(); auskommentier gehts, wenn nicht kommt dort der fehler, der debugger hilft gar nicht, der sagt an dieser stelle nur acess violation, also das ich auf den zeiger kein zugriff im speicher hab - versteh ich nicht



  • Dann solltest Du vielleicht man den Rückgabewert von "CoCreateInstance" auswerten...
    Dir fehlt nämlich noch ein CoInitialize(Ex)



  • ich hab grad gemerkt
    wenn ich ein leeres projekt erstell und in einer einzelnen .cpp datei das einfueg

    #define _WIN32_IE 0x400
    #include <windows.h>
    #include <tchar.h>
    #include <wininet.h>
    #include <shlobj.h>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
      HRESULT hr;
      IActiveDesktop *pActiveDesktop;
      hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
        IID_IActiveDesktop, (void**)&pActiveDesktop);
      pActiveDesktop->Release();
      return 0;
    }
    

    compiliert der fehlerfrei, aber kommt das selbe problem

    von CoInitialize hab ich bisher nirgends gelesen, auch in der MSDN nicht {zu dem problem}





  • das ich nach CoInitialize in der MSDN schau ist mir schon klar, hab cih auch gemacht und eingebaut
    nuuuuur - woher sollte ich wissen das ich das aufrufen muss, in der MSDN und auch sonst ueberall in google steht zu IActiveDesktop nirgends dieser aufruf

    ich hab den nu drinne - compiliert fehlerfrei - und das programm laeuft auch fehlerfrei

    nur ->SetWallpaper wird ignoriert

    HRESULT hr;
    IActiveDesktop *pActiveDesktop;
    CoInitialize( NULL );
    hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pActiveDesktop);
    pActiveDesktop->SetWallpaper( L"C:\2.jpg", NULL );
    pActiveDesktop->Release();
    

    commandbox geht kurz auf - verschwindet gleich wieder ohne eine aenderung

    auf jeden fall vielen dank fuer deine geduld !!!!!!



  • "C:\2.jpg" -> "C:\\2.jpg"



  • Du hast immer noch nicht die Rückgabewerte geprüft! Dann wäre Dir auch aufgefallen, dass man CoInitialize aufrufen muss!!!

    Aber ich halte mich jetzt hier raus.



  • 000 schrieb:

    "C:\2.jpg" -> "C:\\2.jpg"

    hab ich gemacht, war mir auch aufgefallen - keine aenderung, erscheint kein neues bild

    @jochen
    ich bedanke mich nochmal fuer deine geduld, kann deine jetzige reaktion verstehen {o;
    ps. ich hab bereits CInitialize aufgerufen, siehe den source

    #dazuedit
    mein problem war, ich hab das
    pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
    vergessen

    nu funktioniert alles
    [thread geloest]

    vielen dank



  • Vermutlich musst Du noch den ActiveDesktop zuerst mal aktivieren mit SetDesktopItemOptions und fActiveDesktop=TRUE
    Und natürlich noch "ApplyChanges"...
    Siehe
    http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/activedesktop.asp



  • ne brauch ich nicht aktivieren - ist bereits - da es nun problemlos funktioniert

    danke fuer die geduld, topic kann als [solve] betitelt werden #gg

    HRESULT hr;
    IActiveDesktop *pActiveDesktop;
    CoInitialize( NULL );
    hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pActiveDesktop);
    
    pActiveDesktop->SetWallpaper( L"C:\\115.jpg", NULL );
    pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
    
    pActiveDesktop->Release();
    

    sehr komisch find ich nur, das ich wininet.h direkt unter afxext setzen muss damit es funktioniert, wenn ich es tiefer anordne bekomm ich nur schwierigkeiten

    .
    .
    .
    #include <afx.h>
    #include <afxwin.h>         // MFC core and standard components
    #include <afxext.h>         // MFC extensions
    
    #include <wininet.h>		// IActiveDesktop
    
    #ifndef _AFX_NO_OLE_SUPPORT
    #include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
    #endif
    #ifndef _AFX_NO_AFXCMN_SUPPORT
    #include <afxcmn.h>			// MFC support for Windows Common Controls
    #endif // _AFX_NO_AFXCMN_SUPPORT
    
    #include <iostream>
    
    // TODO: reference additional headers your program requires here
    #include <shlobj.h>
    

Anmelden zum Antworten