begin process at 2012 05 29 12:30:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Fichier & Disque

 > 

mkdir %APPDATA%/inject32/ comment faire?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

mkdir %APPDATA%/inject32/ comment faire?

mercredi 10 décembre 2008 à 06:54:32 | mkdir %APPDATA%/inject32/ comment faire?

alphaone

Bonjour, j'aimerai creer le dossier %APPDATA%/inject32/ sachant que le systéme windows doit remplacer le %APPDATA% par le chemain du dossier application data, voila mon code qui marche pas:
        //folder for copy list
        QDir dir("%APPDATA%/inject32/");
        if(!dir.exists())
        {
            DEBUGCONSOLE(70,"UIcon::UIcon","Folder not found: %APPDATA%/inject32/");
            if(!dir.mkdir("%APPDATA%/inject32/"))
            {
                if(!CreateDirectory(TEXT("%APPDATA%/inject32/"),NULL))
                {
                    DEBUGCONSOLE(10,"UIcon::UIcon","Unable to mkdir: %APPDATA%/inject32/");
                }
            }
        }

Il y a donc une tentative en Qt puis une tentative en API win32 pur.
mercredi 10 décembre 2008 à 09:22:49 | Re : mkdir %APPDATA%/inject32/ comment faire?

fregolo52

Membre Club
Salut,

Pour QT, je coince, je ne connais pas.
Par contre en win32, tu devrais utiliser ca : voici une source que j'ai trouvé sur le Net :
BOOL GetSpecialFolderLocation (int nFolder, CString& path)
{
    BOOL               bResult;
    LPITEMIDLIST     pidl;
    LPMALLOC          pMalloc;
 
    bResult = FALSE;
    if (SUCCEEDED (SHGetMalloc (&pMalloc)))
     {
       if (SUCCEEDED (SHGetSpecialFolderLocation (NULL, nFolder, &pidl)))
          {
            bResult = SHGetPathFromIDList (pidl, path.GetBuffer(_MAX_PATH));
               path.ReleaseBuffer();
            pMalloc->Free (pidl);
        }
        pMalloc->Release ();
    }
    return bResult;
}


mercredi 10 décembre 2008 à 14:15:19 | Re : mkdir %APPDATA%/inject32/ comment faire?

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

SHGetMalloc est deprecated.

%APPDATA% utilisé dans un chemin... On est pas dans le DOS.

Faut plutôt la récupérer avec GetEnvironmentVariable.

#define UNICODE

/*
Pour compiler sous gcc en release, ajouter :
-nostartfiles -nodefaultlibs -nostdlib
dans les options du lieur.
*/

/* Suppression de la CRT sous VC */
#ifdef NDEBUG
#pragma comment(linker, "/NODEFAULTLIB")
#endif

/* Gestion de la compilation en unicode */
#ifdef UNICODE

#define _T(x) L ## x
typedef unsigned short TCHAR;

#else

#define _T(x) x
typedef char TCHAR;

#endif

#include "windows.h"

/**
 * Alloue une zone mémoire en utilisant VirtualAlloc
 *
 * @param nSize Taille de la zone à allouer
 * @return Pointeur sur la zone allouée
 */
void* __stdcall Memory_AllocPage(DWORD nSize)
{
  return VirtualAlloc(NULL, nSize,
                      MEM_RESERVE | MEM_COMMIT,
                      PAGE_READWRITE);
}

/**
 * Libère une zone mémoire allouée avec Memory_AllocPage
 *
 * @param Pointeur sur la zone allouée
 */
void __stdcall Memory_FreePage(void* lpAddress)
{
  VirtualFree(lpAddress, 0, MEM_RELEASE);
}


/**
 * Attend que l'utilisateur presse une touche avant de continuer l'exécution
 */
void __stdcall Console_Pause()
{
  HANDLE hInput;    /* Handle de l'entrée standard                            */
  DWORD nRead;      /* Nombre d'octets lus                                    */
  TCHAR buffer;     /* Réception du caractère                                 */
  DWORD nOldMode;   /* Sauvegarde le mode précédent pour le restituer         */

  hInput = GetStdHandle(STD_INPUT_HANDLE);
  GetConsoleMode(hInput, &nOldMode);
  SetConsoleMode(hInput, 0);
  ReadConsole(hInput, &buffer, 1, &nRead, NULL);
  SetConsoleMode(hInput, nOldMode);
}

/**
 * Affiche le texte indiqué dans la console
 *
 * @param lpText Texte à écrire dans la console
 * @return FALSE en cas de problème
 */
BOOL __stdcall Console_Write(TCHAR* lpText)
{
  DWORD nWritten;    /* Réception du nombre de caractère écris                */
  char* lpOemText;   /* Texte traduit en OEM                                  */
  DWORD nSize;       /* Taille du texte à écrire                              */
  BOOL bRes;

  /* Traduction des caractère àùéè... */
  nSize = lstrlen(lpText);
  lpOemText = (char*)Memory_AllocPage(nSize);
  CharToOem(lpText, lpOemText);

  bRes = WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), lpOemText,
                       nSize, &nWritten, NULL);

  Memory_FreePage(lpOemText);
  return bRes;
}


/**
 * Affiche le message d'erreur associé à la dernière erreur Win32
 *
 * @return Le code de la dernière erreur
 */
DWORD __stdcall ShowLastError()
{
  DWORD nLastError;           /* Code de la dernière erreur                   */
  TCHAR* lpMessageBuffer;     /* Message d'erreur associé                     */

  /* Récupération du numéro de l'erreur */
  nLastError = GetLastError();

  /* Formatage du message */
  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                (LPTSTR) &lpMessageBuffer, 0, NULL);

  /* Affichage du message */
  MessageBox(NULL, lpMessageBuffer, _T("ERROR"), MB_OK | MB_ICONERROR);

  return nLastError;
}

/**
 * Point d'entrée du programme
 *
 * @return Code d'erreur du processus
 */
#ifdef NDEBUG
int __cdecl mainCRTStartup()
#else
int main()
#endif
{
  TCHAR lpAppData[MAX_PATH];
  DWORD nSize;

  nSize = GetEnvironmentVariable(_T("APPDATA"), lpAppData, MAX_PATH);

  if (nSize == 0)
    ExitProcess(ShowLastError());

  if (nSize > MAX_PATH)
  {
    SetLastError(ERROR_INSUFFICIENT_BUFFER);
    ExitProcess(ShowLastError());
  }

  lstrcat(lpAppData, _T("\\inject32"));
  Console_Write(lpAppData);

  Console_Pause();
 
  return 0;
}

mercredi 10 décembre 2008 à 15:51:40 | Re : mkdir %APPDATA%/inject32/ comment faire?

fregolo52

Membre Club
rt15 tu veux dire que je bosse pas avec les bons outils ? VC6 avec sa MSDN qui date de euh.. 1998 (je crois) ?

Merci pour l'info, je vais changer pour CoTaskMemFree.

Perso je veux ecrire dans "All Users". J'ai tenté, sans succès :
GetEnvironmentVariable(_T("COMMONAPPDATA"), ... et
GetEnvironmentVariable(_T("COMMON_APPDATA"), ...

Mais ce n'est peut-être pas une variable d'environnement.
mercredi 10 décembre 2008 à 15:58:15 | Re : mkdir %APPDATA%/inject32/ comment faire?

rt15

Membre Club Administrateur CodeS-SourceS
Je travaille aussi régulièrement sous CV6 : c'est l'IDE du boulot !

Par contre, je n'ai pas la msdn sur mon dur... Je préfère utiliser celle de Borland ou utiliser Google.

Pour avoir la liste des variables d'environnement, on peut bien sûr aller dans les propriété du poste de travail (Windows + pause), onglet avancé, bouton "variables d'environnements".

Ou taper set dans une invite de commande.

Je n'ai pas de COMMONAPPDATA chez moi, par contre j'ai ALLUSERSPROFILE qui pointe sur All Users.
mercredi 10 décembre 2008 à 16:26:19 | Re : mkdir %APPDATA%/inject32/ comment faire?

fregolo52

Membre Club
J'aurai encore apprend qq chose aujourd'hui Je ne vois pas APPDATA dans "variables d'environnements". Mais on voit bien avec la commande set.

Bon je vais donc garder SHGetSpecialFolderLocation, virer SHGetMalloc pour y mettre CoTaskMemAlloc.

C'est drôle, apporter une solution à une question nous permet, quelque fois, de voir qu'on fait mal les choses.

mercredi 10 décembre 2008 à 17:23:33 | Re : mkdir %APPDATA%/inject32/ comment faire?

racpp

Administrateur CodeS-SourceS
Salut,
En Win32, l'appel d'une seule fonction suffit pour récupérer le chemin complet d'un dossier spécial de Windows. Pour "Application Data" faire:
#include <windows.h>
#include <shlobj.h>
//...
char buffer[MAX_PATH];
SHGetFolderPath(0,CSIDL_APPDATA,0,0,buffer);


Le 2ème paramètre permet de spécifier le dossier voulu.

mercredi 10 décembre 2008 à 17:34:33 | Re : mkdir %APPDATA%/inject32/ comment faire?

rt15

Membre Club Administrateur CodeS-SourceS
Ah tiens elle est deprecated aussi celle là. Mais bon apparemment pas d'autres alternatives avant Vista. Et elle fonctionne sous Vista. Ma méthode est quand à elle jugée "may not be reliable".
mercredi 10 décembre 2008 à 18:00:39 | Re : mkdir %APPDATA%/inject32/ comment faire?

racpp

Administrateur CodeS-SourceS
Oui elle est déclarée deprecated pour Vista si on veut un plus grand nombre d'identificateurs. En effet, SHGetKnownFolderPath() utilise un identificateur de 128 bits (GUID) au lieu de 32 bits pour SHGetFolderPath(). C'est la seule différence entre les deux. SHGetFolderPath() est donc toujours utilisable même sous Vista.
mardi 23 décembre 2008 à 15:09:30 | Re : mkdir %APPDATA%/inject32/ comment faire?

rt15

Membre Club Administrateur CodeS-SourceS
Manque un LocalFree dans ma ShowLastError.


Cette discussion est classée dans : dir, mkdir, appdata, inject32, uicon


Répondre à ce message

Sujets en rapport avec ce message

passage d'arguments à un programme [ par VolaiL ] J'ai réalisé un programme en C qui necessite le passage de 2 arguments lors de l'appel de l'executable.( ex : nom_du_prog arg1 arg2 )Pas de probleme, help pour IN OUT dans une fonction [ par youpiyoyo ] j'ai essayé différente maniere sans pouvoir y arriverexemple (source trouvé sur ce site pour recup le chemin a partir d'un fichier):int GetFileDir(IN Problème de débutant... La honte ;) [ par Repie ] Bonjour je redébute en cpp et j'ai un peu de mal ..en fait j'essaye de prendre des exemples d'ici, de les remanier pour voir si je les comprends bien. listage de fichiers et dossiers ! [ par dletozeun ] Bonjour,je cherche a lister des dossiers et des fichiers d'un dossier en c++.je m'aide d'une source (Je ne sais plus de qui elle est!) je vois que cet affichage du chemin d'un fichier lors d'un listage recursif en C [ par zegota ] voici ma procédure de parcours récursif, je l'ai testé elle fonctionne (sauf pour les rep qui commencent par un "." mais ce n'est pas un problme pour treeview avec c++ builder 6 [ par yuka_605 ] salut à tous j'ai un petit problème avec le code suivant :#include #pragma hdrstop#include #include #include "tree.h"//------------------------------ Optimisation et modification du codeC pour lire 4pixels au lieu 1 [ par zorrofes ] Bonjour,j ai besoin de votre aide. J' ai reussi a optimiser mon code et de diminuer un peu le nombre de cycles lors de l execution. Ce code permet de Delete [ par dido33 ] Bonjour, voila je voudrai supprimer pour de bon un fichier sur mon disque dur.J'ain une Tdirectorylistbox qui m'indique le chemin et quand j'ai trouve utilisation nouveau .h [ par gregorian ] Bonjour, j'ai trouvé sur ce site, un nouveau conio-bis.h que l'on pouvait utiliser avec dev c++ et qui reprenais certaine chose qui ne fonctionnait pa Listing repertoire recrusif [ par firemax ] Bonjour Mon but est d'ecrire un programme de listing qui list aussi les repertoire , les sous repertoire , les sous sous repertoire et ainsi de suit


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales