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 failurewenn 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}
-
Aber Du hast schon mal von google.de gehört, oder?
http://msdn.microsoft.com/library/en-us/com/html/0f171cf4-87b9-43a6-97f2-80ed344fe376.asp
http://www.microsoft.co.ke/germany/msdn/library/components/AchtLektionenZumThemaCOM.mspx
-
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 aufrufich 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);
vergessennu 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>