Avatar billede mansword Nybegynder
11. december 2003 - 14:13 Der er 13 kommentarer og
2 løsninger

underlig idé, hent fil og brug som baggrund i C

Hey!

Jeg har lige fået en underlig (!) idé.. jeg vil lave et lille program der henter en fil ned fra et websted (en *.jpg) fil fx, gemmer den på harddisken hos brugeren og bruger den så som wallpaper (vil kun virke på en windows maskine, self.)

Kan man det? Og hvordan? Er helt vild.. .hjælp mig :D
Avatar billede arne_v Ekspert
11. december 2003 - 14:18 #1
Jeg kan sagtens forklare dig hvordan du downloader en fil via sockets
og HTTP protokollen.

Jeg ved ikke hvordan du sætter den som baggrund.
Avatar billede mansword Nybegynder
11. december 2003 - 14:21 #2
hmm... ved du om det i det hele taget er muligt at gøre det?
Avatar billede arne_v Ekspert
11. december 2003 - 14:38 #3
Jeg kender mange som skifter deres baggrund, så muligt er det ihvertfald.
Avatar billede arne_v Ekspert
11. december 2003 - 14:38 #4
Hente kode:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <windows.h>
#include <errno.h>

void get(char *hostname,int port,char *path,char *fnm)
{
  FILE *fp;
  int sd,status,len,tmp;
  char cmd[512],resp[51200],*p,seg[1024];
  struct sockaddr local,remote;
  struct hostent *hostinfo;
  time_t t;
  /* create socket */
  sd=socket(AF_INET,SOCK_STREAM,0);
  if(sd<0) {
      printf("Error creating socket: %s\n",strerror(errno));
      goto fin;
  }
  /* bind socket */
  local.sa_family=AF_INET;
  memset(local.sa_data,0,sizeof(local.sa_data));
  status=bind(sd,&local,sizeof(local));
  if(status<0) {
      printf("Error binding socket: %s\n",strerror(errno));
      goto fin;
  }
  /* lookup host */
  hostinfo=gethostbyname(hostname);
  if(!hostinfo) {
      printf("Error looking up host: %s\n",hostname);
      goto fin;
  }
  /* connect to host */
  remote.sa_family=hostinfo->h_addrtype;
  memcpy(remote.sa_data+2,hostinfo->h_addr_list[0],hostinfo->h_length);
  *((short *)remote.sa_data)=port;
  tmp=remote.sa_data[0];
  remote.sa_data[0]=remote.sa_data[1];
  remote.sa_data[1]=tmp;
  status=connect(sd,&remote,sizeof(remote));
  if(status!=0) {
      printf("Error connecting to host: %s port: %d\n",hostname,port);
      goto fin;
  }
  /* send GET request */
  sprintf(cmd,"GET %s HTTP/1.1\r\nHost: %s\r\n\r\n",path,hostname);
  status=send(sd,cmd,strlen(cmd),0);
  if(status<0) {
      printf("Error sending POST request\n");
      goto fin;
  }
  /* read response */
  fp = fopen(fnm,"wb");
  len=recv(sd,resp,sizeof(resp),0);
  p = strstr(resp,"\r\n\r\n") + 4;
  fwrite(p,1,len-(p-resp),fp);
  while ((len=recv(sd,resp,sizeof(resp),0))>0) {
      fwrite(resp,1,len,fp);
  }
  fclose(fp);
fin:
  closesocket(sd);
  return;
}

int main(int argc,char *argv[])
{
  WSADATA WSAData;
  WSAStartup(0x0101,&WSAData);
  get("www.domain.dk",80,"/dir/billede.jpg","billede.jpg");
  WSACleanup();
  return 0;
}
Avatar billede soreno Praktikant
11. december 2003 - 16:27 #5
Set wallpaper er ret nemt:

#include <windows.h>
#include <string.h>

int main(int argc, char **argv)
{
    if(argc == 2)
    {
        char buffer[MAX_PATH];

        GetWindowsDirectory(buffer, sizeof(buffer));
        strcat(buffer, "\\");
        strcat(buffer, argv[1]);
        CopyFile(argv[1], buffer, TRUE);

        SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, buffer, SPIF_UPDATEINIFILE);
    }

    return 0;
}

Jeg kan ikke huske hvad som er strengt nødvendigt i koden, men det skulle virke (med en billedfil som argument).
Avatar billede arne_v Ekspert
11. december 2003 - 16:33 #6
så er det jo bare at merge de 2 programmer !
Avatar billede soreno Praktikant
11. december 2003 - 17:09 #7
Det er muligvis versionsspecifikt hvilke billedeformater der kan håndteres.

Jeg testede i sin tid med bmp.

Jeg mener ikke at f.eks. win95 understøtter jpg og png som standard.
Avatar billede mansword Nybegynder
11. december 2003 - 17:14 #8
Tusind tak begge 2
Avatar billede mansword Nybegynder
11. december 2003 - 17:15 #9
men smider i ikke lige et svar hver...`? :D
Avatar billede arne_v Ekspert
11. december 2003 - 17:16 #10
svar
Avatar billede soreno Praktikant
11. december 2003 - 17:22 #11
Ok.
Avatar billede arne_v Ekspert
26. december 2003 - 16:33 #12
Tid at lukke spørgsmålet ?
Avatar billede mansword Nybegynder
26. december 2003 - 19:44 #13
Orv ja :)
Avatar billede raws Nybegynder
15. december 2006 - 09:38 #14
Det ser vildt inviklet ud men du kan sikkert få hjælp på www.cplusplus.com
Avatar billede arne_v Ekspert
15. december 2006 - 14:57 #15
raws>

Har du set tidspunktet ??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester