cs_Celestus
Messages postés15Date d'inscriptionjeudi 31 janvier 2008StatutMembreDernière intervention10 juin 2008
-
7 mai 2008 à 17:07
cs_Celestus
Messages postés15Date d'inscriptionjeudi 31 janvier 2008StatutMembreDernière intervention10 juin 2008
-
19 mai 2008 à 21:26
Bonjour à tous. Je suis un petit newbie qui parcours humblement ce forum à l'aide d'un problème si simple pour vous que vous en rirez...
Je ne suis pas programmeur, donc je n'y comprends pas grand chose.
Je fais essentiellement des scripts en batch windows, ça m'aide à installer mes programmes plus facilement et plus clairement.
Mais le batch windows est assez pauvre. Pour créer des raccourcis, j'utilise un programme qui s'appelle shortcut.exe.
Mon problème, c'est que j'ai besoin d'actualiser le bureau via une commande batch.
- J'ai cherché dans les commandes => Rien
- J'ai cherché dans les arguments d'explorer.exe => Rien
- J'ai pas trouvé de dll qui fasse ça non plus, il en existe peut-être une, si quelqu'un la connait, merci de me répondre, ce serait super sympa.
Bref, j'ai entendu parler d'un petit programme nommé refresh.exe qui permettait de rafraichir le bureau tout simplement, et qu'on pouvait trouver sur ce site.
Quelqu'un sait-il où se trouve ce programme ?
Sinon, quelqu'un pourrait-il me le coder svp ?
Si ça ne vous prend pas trop de temps bien entendu...
cs_Celestus
Messages postés15Date d'inscriptionjeudi 31 janvier 2008StatutMembreDernière intervention10 juin 2008 9 mai 2008 à 18:15
J'ai compilé et essayé tes programmes, ça ne marche pas.
Ton programme mime la touche F5 qui actualise uniquement le bureau, c'est à dire le wallpaper uniquement.
Il y a 36 moyens de faire ça, en vbs, en batch avec la fonction de user32.dll UpdatePerUserSystemParameters, j'ai déjà essayé.
Actualiser l'explorer.exe est bien différent.
Pour m'entraîner en batch, je m'amuse à faire des scripts. Le problème se pose ici avec un script pour actualiser directement les fichiers cachés.
En voici le code (désolé c'est en chantier mais ça marche).
J'ai bien peur qu'il n'existe aucune méthode, car il existait avant la fonction repaintscreen de user.dll sur les anciennes version de Windows.
Mais depuis Windows NT4, Microsoft a supprimé cette fonction et a verrouillé son explorer.exe. Par sécurité ?
Bref, ma dernière piste actuelle est de trouver les fonctions d'une dll qui aurait celle-ci, seulement il faut être inscrit à la MSDN en tant que développeur pour avoir accès à ces données.
Si quelqu'un peut m'aider... Son aide sera plus que bienvenue.
@echo off
cls
REM Script standard de paramètrage du registre de Windows
REM Non compatible pour les versions plus anciennes que Windows XP
REM Ce script est fait pour être évolutif sans avoir à en modifier le corps
REM Vous pouvez rajouter autant de données que vous le voulez à la suite
REM en ajoutant un autre groupe : key_1 key_2 key_2 etc.
REM mais attention, la comparaison se fera toujours sur key_1
REM ________________________________________________________________
REM Description du script :
REM Sert à masquer ou démasquer les
REM fichiers cachés de Windows
REM ________________________________________________________________
REM Tête du script (Head) : Seule cette partie doit être changée
REM ******************************************
set add_registry_loop=0
: head_1
REM Boucle d'exécution du script pour que toutes
REM les valeurs successives soient prises en compte
set /a add_registry_loop=%add_registry_loop% + 1
REM Ajoutez ici le nombre de clés à modifier en rajoutant des lignes
REM (Il doit y avoir autant de lignes que de "key_?")
if "%add_registry_loop%" EQU "1" goto key_1
if "%add_registry_loop%" EQU "2" goto key_2
if "%add_registry_loop%" EQU "3" goto exit
cls
echo.
echo.
echo.
echo Erreur de ce script dans la boucle de redondance.
echo.
echo Par s‚curit‚, il va donc s'arrˆter.
echo.
echo.
echo.
echo Appuyez sur une touche pour fermer ce script...
pause>nul
exit
REM ******************************************
REM Données utiles à l'exécution du script
REM Clé(s), valeur(s), type(s) et donnée(s) du registre à créer, modifier
REM On mettra la description en dessous de la donnée
REM Attention, la syntaxe de la donnée doit correspondre au type
REM (On mettra toujours les DWORD en hexadécimal avec 0x devant)
: key_1
set add_registry_key=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
set add_registry_value=Hidden
set add_registry_type=REG_DWORD
set add_registry_data_1=0x00000000
REM Donnée à 0 = Fichiers cachés invisibles
set add_registry_data_2=0x00000001
REM Donnée à 1 = Fichiers cachés visibles
goto head_2
: key_2
set add_registry_key=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
set add_registry_value=SuperHidden
set add_registry_type=REG_DWORD
set add_registry_data_1=0x00000000
REM Donnée à 0 = Fichiers super-cachés invisibles
set add_registry_data_2=0x00000001
REM Donnée à 1 = Fichiers super-cachés visibles
goto head_2
REM Rien à faire ici ce bloc ! Penser à le virer
REM Clé(s) et valeur(s) du registre à supprimer
REM : key_del_1
REM del_registry_key=
REM On met "REM" car il n'y en a aucune
REM ******************************************
: head_2
REM Switchs, aiguillages du reste du script
REM Rajouter un "faut-il détécter la version de Windows"
REM Faut-il détécter la donnée d'une clé de registre ?REM (0 Non) (1 ou + Oui)
set registry_match=1
REM Faut-il supprimer des clés de registre ?REM (0 Non) (1 ou + Oui)
set registry_delete=0
REM ________________________________________________________________
REM Corps du script
REM ******************************************
REM Détection de la version de Windows
REM On détecte la version de Windows à la nature du dossier de tous les utilisateurs
REM Ce sera "Documents and Settings" pour XP et "ProgramData" pour Vista
REM Cette donnée est contenue dans la variable d'environnement "ALLUSERSPROFILE"
if "%ALLUSERSPROFILE%"=="C:\Documents and Settings\All Users" goto windows_xp
if "%ALLUSERSPROFILE%"=="C:\ProgramData" goto windows_vista
goto windows_error
: windows_xp
set os_version=xp
goto body_1
: windows_vista
set os_version=vista
goto body_1
: windows_error
cls
echo.
echo.
echo.
echo Ce script n'a pas r‚ussi … d‚tecter votre version de Windows.
echo.
echo Par s‚curit‚, il va donc s'arrˆter.
echo.
echo.
echo.
echo Appuyez sur une touche pour fermer ce script...
pause>nul
exit
REM ******************************************
: body_1
REM Détection de l'existence des éléments du script
REM if exist, si clé registre n'existe pas, proposer de les créer
REM à continuer
REM ******************************************
REM Accomplissement des tâches
REM ---------------------------
REM Aiguillage vers la détection d'une donnée du registre
REM Si le switch de comparaison de valeurs de registre est
REM activé (supérieur ou égal (GEQ) à 1), aller à l'indicateur
REM nommé "body_2", sinon, aller directement à
REM l'indicateur nommé "body_3"
if "%registry_match%" GEQ "1" goto body_2
goto body_3
REM ---------------------------
: body_2
REM Détection d'une donnée du registre :
REM Ajout d'une clé de registre temporaire avec une donnée connue
reg add "%add_registry_key%_temp" /v "%add_registry_value%" /t "%add_registry_type%" /d "%add_registry_data_1%" /f >nul
REM Comparaison de la donnée d'une même valeur
REM pour la clé existante avec la clé temporaire
REM Le résultat est automatiquement stocké dans la variable "ERRORLEVEL"REM %ERRORLEVEL% 0> Résultats identiques, la donnée est la mêmeREM %ERRORLEVEL% 2> Résultats différents, les données sont différentesREM %ERRORLEVEL% 1> Echec de la comparaison, une des données n'existe pas
reg compare "%add_registry_key%" "%add_registry_key%_temp" /v "%add_registry_value%" >nul
REM On sauve le résultat dans une variable car ERRORLEVEL
REM est remise à 0 à chaque commande
set error_level=%ERRORLEVEL%
REM On efface la clé temporaire
reg delete "%add_registry_key%_temp" /f >nul
REM On définit l'aiguillage pour l'alternance des différents choix
if "%error_level%"=="0" goto add_registry_data_1
if "%error_level%"=="2" goto add_registry_data_2
if "%error_level%"=="1" goto add_registry_data_2
cls
echo.
echo.
echo.
echo Ce script n'a pas r‚ussi … d‚tecter la cl‚ de registre
echo n‚cessaire … son ex‚cution
echo.
echo Par s‚curit‚, il va donc s'arrˆter.
echo.
echo.
echo.
echo Appuyez sur une touche pour fermer ce script...
pause>nul
exit
REM ---------------------------
REM Alternance de changement des clés de registre
REM ________________________________________________________________
REM Queue du script
goto head_1
: exit
REM "%WINDIR%\system32\rundll32.exe" user32.dll,RepaintScreen ne marche pas.
REM trouver un autre moyen...
REM Création d'un fichier .vbs
REM Ne pas oublier de mettre des ^devant des caractères comme & ou |
rem echo Set WSHShell = CreateObject("WScript.Shell") >refresh.vbs
rem echo WshShell.SendKeys "{F5}" >>refresh.vbs
REM seul moyen actuellement
rem taskkill /f /IM explorer.exe
rem start %WinDir%\explorer.exe
REM essayer de trouver des points d'entrée dans user32.dll avec dumpbin du compilateur visual C
REM en tapant dumpbin /exports user32.dll ou link /dump /exports user32.dll pour obtenir des noms de fonctions
basted
Messages postés55Date d'inscriptionlundi 15 septembre 2003StatutMembreDernière intervention11 mai 2008 11 mai 2008 à 22:23
Bonjour,
dans le cas general voici comment faire:
- recherhcer le PID de l'explorer.exe (enumeration des fenetre et filtrage par type)
=> HWND
- emuler l'envoi de la touche F5:
INPUT *input = new INPUT;
ZeroMemory(input,sizeof(INPUT));
input->type = INPUT_KEYBOARD;
input->ki.wVk = VK_F5;
input->ki.dwFlags = 0;
int res = SendInput(1, input,sizeof(INPUT));
delete input;
dans ton cas, je crois qu'en fait c'est plus simple
HWND hWnd = GetDesktopWindow();
InvalidateRect(hWnd,NULL,NULL);
voici le code complet que j'utilisais a l'epoque:
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
cs_Celestus
Messages postés15Date d'inscriptionjeudi 31 janvier 2008StatutMembreDernière intervention10 juin 2008 19 mai 2008 à 21:26
D'après la MSDN, il existe la fonction SHChangeNotify de Shell32.dll
(à
appeller avec les flags corrects), qui permet de rafraîchir un dossier
spécifié (ici le bureau, si on l'utilise dans un vbs ou vb, il faut utiliser SHGetSpecialFolderLocationD)
A essayer.
Si quelqu'un lit ce forum, peut-il essayer sur son PC ?
Peut-être que c mon OS qui déconne après tout...