CRÉER DES RACCOURCIS BUREAU ET MENU DÉMARRER

Signaler
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28240-creer-des-raccourcis-bureau-et-menu-demarrer

Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

Pour info je suis sous windows 7 64, je ne trouve pas le problème...
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

Salut, merci pour la source, je viens d'essayer et le raccourcis ne pointe sur rien, voila ma fonction:

void Raccourci(char* name,char* description,char* path)
{
// Créer un buffer pour recevoir le chemin d'un dossier spécial:
char buffer[MAX_PATH];

// Initialiser la librairie COM pour notre programme:
CoInitialize(NULL);
// Déclarer un pointeur sur IShellLink:
IShellLink* psl;
// Créer une instance de l'interface IShellLink:
HRESULT res = CoCreateInstance(CLSID_ShellLink,0,CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID *)&psl);
//Si instance créées avec succès:
if (SUCCEEDED(res))
{
// Déclarer un pointeur sur IPersistFile:
IPersistFile* ppf;
// Obtenir une interface IPersistFile:
psl->QueryInterface(IID_IPersistFile,(LPVOID *)&ppf);
// Ajout des raccourcis:

// Obtenir le chemin du dosier spécial en cours:
SHGetSpecialFolderPath(0,buffer,CSIDL_DESKTOP,0);
strcat(buffer,"\");

// Former le chemin complet de l'emplacement du raccourci:
strcat(buffer,name);
strcat(buffer,".lnk");

// Définir le chemin du raccourci:
psl->SetPath(path);
// Définir la description:
psl->SetDescription(description);
// Convertir le chemin en UNICODE:
WORD chaine[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0,buffer, -1,(LPWSTR)chaine, MAX_PATH);
// Créer le raccourci:
ppf->Save((LPWSTR)chaine, 1);
// Incrémenter le compteur de raccourcis créés:

// Libérer l'interface IPersistFile:
ppf->Release();
}

psl->Release();

CoUninitialize();
}
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
BruNews > Merci, j'espère que "erreur 500" ne m'empechera plus de répondre aux commentaires.

cosmobob > Merci pour les remarques. En effet, lorsqu'on focalise sur le noyau d'un programme on ne fait pas très attention au reste, surtout quand on manque de temps.
A propos de la première remarque, j'avais fait "char str[30]" car le message à concaténer était " raccourci(s) créé(s)!", ce qui fait un total de 23 caractères seulement. Mais, après avoir ajouté "avec succès", j'ai oublié d'augmenter la taille du tableau str. Ca n'a pourtant pas empêché le message de s'afficher correctement (non tronqué chez moi). Si sa taille est 40 par exemple, on n'aura jamais de buffer overflow. La fonction strncat() est inutile ici puisque la taille de la chaine à concaténer est fixe. Cette fonction ne sert qu'à limiter le nombre de caractères à concaténer.
Pour la deuxième remarque, je n'ai jamais eu de plantages causés par l'absence de "const" dans le prototype de fonctions. Mais c'est bon à savoir. Merci pour le conseil.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Avec un peu de retard de ma part, bonne source.
Afficher les 14 commentaires