EnumChildWindows() + GetWindowLong(GWL_STYLE) & BS_TYPEMASK
Tester ci s'est l'une des valeurs suivantes: BS_CHECBOK, BS_AUTOCHECKBOX, BS_3STATE, BS_AUTO3STATE
Version imprimable
EnumChildWindows() + GetWindowLong(GWL_STYLE) & BS_TYPEMASK
Tester ci s'est l'une des valeurs suivantes: BS_CHECBOK, BS_AUTOCHECKBOX, BS_3STATE, BS_AUTO3STATE
Oula je crois que définitivement le C++ et moi on n'est pas ami... :mrgreen:
Alors j'ai essayé de coder ce que j'ai compris...Citation:
Envoyé par Médinoc
Résultat :Code:
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 { //blabla if (RememberHwnd == NULL) { theApp.Log(_T("RememberHwnd not found")); } else { //::SendMessage(RememberHwnd, BM_SETCHECK, BST_CHECKED, 0); //Sleep(1000); EnumChildWindows(DirectUIHWND,EnumWindowsProc, 0); } //blabla } BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { int winLong = ::GetWindowLongPtr(hwnd, GWL_STYLE); int typeMask = ::GetWindowLongPtr(hwnd, BS_TYPEMASK); if ((winLong == BS_CHECKBOX || winLong == BS_AUTOCHECKBOX || winLong == BS_3STATE || winLong == BS_AUTO3STATE) || (typeMask == BS_CHECKBOX || typeMask == BS_AUTOCHECKBOX || typeMask == BS_3STATE || typeMask == BS_AUTO3STATE)) { ::SendMessage(hwnd, BM_SETCHECK, BST_CHECKED, 0); } return TRUE; }
Et ça pointe sur l'appel...Citation:
Envoyé par Compilateur
Code non testé:
Code:
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 BOOL CALLBACK MyEnumWindowsProc(HWND hwndSink, LPARAM lParam) { HWND hwndButton = ::FindWindowEx(hwndSink, NULL, TEXT("Button"), NULL); if(hwndButton != NULL) { DWORD style = ::GetWindowLongPtr(hwndButton, GWL_STYLE); btnType = style & BS_TYPEMASK; if (btnType == BS_CHECKBOX || btnType == BS_AUTOCHECKBOX || btnType == BS_3STATE || btnType == BS_AUTO3STATE) { ::SendMessage(hwndButton , BM_SETCHECK, BST_CHECKED, 0); } } return TRUE; } void Blabla() { //blabla if (RememberHwnd == NULL) { theApp.Log(_T("RememberHwnd not found")); } else { //::SendMessage(RememberHwnd, BM_SETCHECK, BST_CHECKED, 0); //Sleep(1000); EnumChildWindows(DirectUIHWND,MyEnumWindowsProc, 0); } //blabla }
Ok on avance...
Je rentre bien dans le if mais il ne coche pas cette $*§@£% de checkbox.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 BOOL CALLBACK MyEnumWindowsProc(HWND hwndSink, LPARAM lParam) { HWND hwndButton = ::FindWindowEx(hwndSink, NULL, TEXT("Button"), NULL); if(hwndButton != NULL) { DWORD style = ::GetWindowLongPtr(hwndButton, GWL_STYLE); DWORD btnType = style & BS_TYPEMASK; if (btnType == BS_CHECKBOX || btnType == BS_AUTOCHECKBOX || btnType == BS_3STATE || btnType == BS_AUTO3STATE) { // The checkBox... ::SendMessage(hwndButton , BM_SETCHECK, BST_CHECKED, 0); // Its parent, we never know... ::SendMessage(hwndSink , BM_SETCHECK, BST_CHECKED, 0); } } return TRUE; }
As-tu testé avec l'UAC désactivé?
Non. Comment je fais ça ? Je ne sais même pas ce qu'est l'UAC...
http://en.wikipedia.org/wiki/User_Account_Control
Il y a une option dans Panneau de Configuration > Comptes d'Utilisateurs.
Sinon, tu peux essayer en lançant simplement ton programme en tant qu'Admin, et voir si ça marche mieux.