Bonjour,
J'aurais pu intituler ça: SHBrowseForFolder appelle hpgs2wnf.exe !!!!!
Depuis quelques temps j'observais (Windows XP version familiale) un autre phénomène bizarre.
1.- j'avais des programmes qui après avoir cliqué sur EXIT ou sur la croix ne s'arrêtaient plus (la fenêtre disparaissait normalement mais l'appli restait à ne rien faire dans le gestionnaire)
2.- En y regardant de plus près je m'aperçois qu'en fait le phénomène se produit chaque fois que, avant de terminer l'appli, j'ai cliqué sur un bouton PARCOURIR pour chercher un répertoire (appel à SHBrowseForFolder)
3.- Dans un deuxième temps je m'aperçois que lorsque mon appli se termine (sortie de l'appli sur le dernier return) ça n'est pas mon appli qui disparaît du gestionnaire mais un processus qui n'a rien à voir: hpgs2wnf.exe !!!
4.- J'investigue de plus près et je m'aperçois que si avant de sortir de mon appli, je tue manuellement le processus hpgs2wnf.exe dans le gestionnaire, alors mon appli se termine normalement (quand je clique sur la croix, elle disparaît du gestionnaire)
5.- Je regarde encore d'un peu plus près comment se comporte ce processus hpgs2wnf.exe que je ne connais pas, mais qui, a priori, vient de chez HP et je constate:
- que ce processus est actif dans le gestionnaire dès le lancement de l'ordi
- que si je le tue dans le gestionnaire, il réapparaît chaque fois que dans mes applis je passe sur la fonction SHBrowseForFolder (fonction Parcourir)
- que si je ne le re-tue pas après être passé sur SHBrowseForFolder, mon appli reste dans le gestionnaire lorsque je la termine (clic sur la croix) bien que sa fenêtre disparaisse normalement.
- et que évidemment si je le tue, avant de cliquer sur la croix de mon appli, mon appli se termine normalement et sort du gestionnaire.
- Et tout ceci de manière systématique
Avant de désinstaller hpgs2wnf.exe de mon ordi je ne sais pas trop encore comment, j'aurais voulu savoir si quelqu'un a déjà observé ce type de phénomène et aurait une explication rationnelle.
hpgs2wnf.exe se trouve sous c:\Program Files\Helwet-Packard\HP Share-to-Web\
et évidemment j'ai des imprimantes HP ainsi qu'un scanner HP.
Toujours pour les sceptiques, voici ci-dessous un programme de test réduit à sa plus simple expression qui permet de s'en rendre compte (à condition évidemment d'avoir sur son micro le fameux hpgs2wnf.exe à l'adresse que je viens d'indiquer)
Le test est facile à faire après avoir compilé le programme, vérifier si hpgs2wnf.exe se trouve déjà dans le gestionnaire, si oui le tuer.
Lancer le programme de test, cliquer sur le bouton : "choisir un répertoire", des messages vont s'afficher et vous allez vous apercevoir que hpgs2wnf.exe réapparaît dans le gestionnaire entre les messages 1 et 2, c'est à dire sur la fonction: SHBrowseForFolder.
Aller jusqu'au bout (clic sur le message 3), ensuite deux solutions:
- soit vous cliquez tout de suite sur la croix pour fermer le programme de test et vous allez vous apercevoir que la fenêtre disparaît mais que le programme de test reste dans le gestionnaire, par contre c'est hpgs2wnf.exe qui disparaît du gestionnaire.
- soit vous tuez tout de suite hpgs2wnf.exe du gestionnaire et dans ce cas le programme de test se terminera normalement en cliquant sur la croix (il disparaît du gestionnaire).
Programme de test:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 #include <windows.h> #include <shlobj.h> LRESULT CALLBACK processmainmess( HWND, UINT, WPARAM, LPARAM); HINSTANCE n0instance; MSG message; BROWSEINFO browse; LPITEMIDLIST preponse; CHAR repertory[MAX_PATH]; LPTSTR pchoix="Choisir le répertoire de sortie"; int APIENTRY WinMain( HINSTANCE W_n0inst, HINSTANCE W_n0precinst, LPTSTR W_CmdLine, int W_cdeaffich) // entier signé (32 bits) { n0instance = W_n0inst; WNDCLASS winclassmain; winclassmain.hInstance = n0instance; winclassmain.lpszMenuName = NULL; winclassmain.lpszClassName = "Essai"; winclassmain.hIcon = NULL; winclassmain.hCursor = LoadCursor(NULL,IDC_ARROW); winclassmain.hbrBackground =(HBRUSH)(COLOR_WINDOW+1); winclassmain.style = CS_VREDRAW | CS_HREDRAW; winclassmain.lpfnWndProc = (WNDPROC)processmainmess; winclassmain.cbWndExtra = 0; winclassmain.cbClsExtra = 0; if ( !RegisterClass( &winclassmain ) ) return( FALSE ); // HWND Hdlgmain = CreateWindow("Essai", "test", WS_CAPTION | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 250, 100, NULL, NULL, n0instance, NULL); if ( !Hdlgmain ) return( FALSE ); ShowWindow( Hdlgmain, W_cdeaffich ); // lancement manuel UpdateWindow( Hdlgmain ); // while(GetMessage( &message, NULL, 0, 0)) { TranslateMessage( &message ); DispatchMessage( &message ); } return message.wParam; } LRESULT CALLBACK processmainmess( HWND winmainkey, UINT IDMsg, WPARAM wParam, LPARAM lParam ) { switch(IDMsg) { case WM_CREATE : CreateWindow("BUTTON", "Choisir un répertoire", WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 0, 220, 35, winmainkey, (HMENU)1000, n0instance, NULL); break; case WM_COMMAND: switch(LOWORD(wParam)) { case 1000: // clic sur le bouton choisir un fichier browse.hwndOwner=winmainkey; browse.ulFlags=BIF_NEWDIALOGSTYLE; //browse.pszDisplayName=lastrepertory; browse.lpszTitle=pchoix; browse.lpfn=NULL; browse.iImage=NULL; // MessageBox(winmainkey, "1", "je passe", MB_OK); // ************************************************ piège message 1 preponse=SHBrowseForFolder(&browse); if(preponse==0) break; // MessageBox(winmainkey, "2", "je passe", MB_OK); // ************************************************ piège message 2 if(!SHGetPathFromIDList(preponse, repertory)) break; // récupère le chemin du répertoire choisi MessageBox(winmainkey, "3", "je passe", MB_OK); // ************************************************ piège message 3 // break; } break; case WM_CLOSE : MessageBox(winmainkey, "close", "Assistant", MB_OK); DestroyWindow( winmainkey ); break; case WM_DESTROY : MessageBox(winmainkey, "destroy", "Assistant", MB_OK); PostQuitMessage(0); break; case WM_QUERYENDSESSION : MessageBox(winmainkey, "query", "Assistant", MB_OK); DestroyWindow( winmainkey ); break; default : return DefWindowProc( winmainkey, IDMsg, wParam, lParam ); }; return 0; }
Partager