bekomm Active Desktop nicht
-
mahlzeit
ich bekomm einfach das IActiveDesktop nicht in mein projekt
ich hab schon die shlobj includiert - auch _WININET_ und alles moegliche probiert was ich bei google gefunden habich benutz visual studio 2005
die MSDN hab ich acuh rauf und runter gelesen - ich komm einfach nicht vorran
immer heisst es er kenne dieses IActiveDesktop nicht }=hilfeeee
-
Folgendes geht bei mir Problemlos mit VS2005:
#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; }
-
hmm - schlau werd ich irgendwie nicht daraus
wenn ich ein leeres projekt erstell, funktioniert das problemlos
wenn ich das aber in ein MFC projekt paste, dann funktioniert das nichtversteh ich nicht
sind die selben header
sobald das IActiveDesktop kommt streikts
-
Du musst in Deinen Projekteinstellungen in den Proprozessor-Directivs das
_WIN32_IE=0x400
hinzufügen.
Dann natürlich noch in der stdafx.h
das#include <wininet.h> #include <shlobj.h>einfügen (in dieser Reihenfolge!)
Dann sollte es auch mit einem MFC Programm gehen.
-
hab ich nu gemacht, das mit den programmeinstellungen wusste ich ne
trotzdem kommt weiterhinError 1 error C2065: 'IActiveDesktop' : undeclared identifier e:\cpp\wall2005\wall2005\wall2005.cpp 19
-
was mir grad aufgefallen ist
wenn ich ein MFC projekt erstell ist bereits das enthalten in der stdafx
#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. #define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. #endif#dazuedit#
bin nu soweit das er fehlerfrei compiliert, ich hab das so gelassen, das 0x400 nicht geschrieben
ich hab in der stdafx die wininet.h direkt unter afxext.h gesetzt, und das shlobj.h direkt unten drannaaaaaaaaber - wenn cih die exe starte - kommt: " The Instruction at "0x00411585" referenced memory at "0x00000000". The memory could not be "read" " fehlermeldung
ich habs so wie in dem beispiel aus der MSDN aufgerufen /=
-
Wenn Du einen Fehler gemacht hast, solltest Du einfach debuggen...
-
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>