J'essaie d'écrire une application, d'utiliser qt et mingw32, pour télécharger des images et les définir comme fond d'écran de fond. J'ai lu plusieurs articles en ligne sur la façon de faire cela, dans VB et C #, et dans une certaine mesure à le faire en C ++. J'appelle actuellement le ci-dessous est le code que j'utilise (sous un formulaire légèrement modifié, vous n'avez donc pas à afficher les internes de l'objet ). P> SystemParametersinfo code> avec ce qui semble être tous les arguments corrects (aucune erreur de compilateur) et échoue. Aucun grand accident de cymbales, juste un
0 code> est retourné.
getlasterror () code> renvoie un
0 code> 0 code>.
#include <windows.h>
#include <iostream>
#include <QString>
void setWall()
{
QString filepath = "C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";
char path[150];
strcpy(path, currentFilePath.toStdString().c_str());
char *pathp;
pathp = path;
cout << path;
int result;
result = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pathp, SPIF_UPDATEINIFILE);
if (result)
{
cout << "Wallpaper set";
}
else
{
cout << "Wallpaper not set";
cout << "SPI returned" << result;
}
}
3 Réponses :
"C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";
Oh c'est vrai. Mais ce n'est pas l'erreur. Dans le programme actuel, le qstring est correctement peuplé par une fonction différente :) mais des félicitations pour avoir repéré mon erreur :)
Cela pourrait être que Essayez ceci: P> systemparametersinfo code> s'attend à un
lpwstr code> (un pointeur sur
wchar_t code>).
LPWSTR test = L"C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";
result = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, test, SPIF_UPDATEINIFILE);
Vous pouvez utiliser Définir la minuterie code> pour déclencher une modification.
#define STRICT 1
#include <windows.h>
#include <iostream.h>
VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
{
LPWSTR wallpaper_file = L"C:\\Wallpapers\\wallpaper.png";
int return_value = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, wallpaper_file, SPIF_UPDATEINIFILE);
cout << "Programmatically change the desktop wallpaper periodically: " << dwTime << '\n';
cout.flush();
}
int main(int argc, char *argv[], char *envp[])
{
int Counter=0;
MSG Msg;
UINT TimerId = SetTimer(NULL, 0, 2000, &TimerProc); //2000 milliseconds
cout << "TimerId: " << TimerId << '\n';
if (!TimerId)
return 16;
while (GetMessage(&Msg, NULL, 0, 0))
{
++Counter;
if (Msg.message == WM_TIMER)
cout << "Counter: " << Counter << "; timer message\n";
else
cout << "Counter: " << Counter << "; message: " << Msg.message << '\n';
DispatchMessage(&Msg);
}
KillTimer(NULL, TimerId);
return 0;
}
L'avez-vous essayé avec un fichier bitmap et non PNG / JPG?