Je ne peux pas obtenir la poignée de champ "Modifier" lorsque vous sélectionnez une photo dans une application tierce.
Spy ++ montre tout correctement, mais Findwindow code> échoue. Je peux avoir la poignée de la fenêtre elle-même, le parent. Je suppose que je dois chercher des fenêtres enfants. Je peux obtenir des poignées avec getwindow code> mais mais ce n'est pas clair ce qu'ils sont. Le titre de la fenêtre est vide. FindWindowex Code> ne fonctionne pas du tout, retourne 0. J'indiquez comme suit: P>
3 Réponses :
Comme quelqu'un déjà supposé. Essayez la méthode EnumChildWindow. Voici un échantillon complet déjà sur Stackoverflow P>
Basé sur la capture d'écran que vous avez fournie et en utilisant uniquement les fonctions FINDWINDOW / EX (EX () CODE>, vous pouvez obtenir le HWND du contrôle d'édition comme ceci: const int CBEM_GETEDITCONTROL = 1031;
IntPtr hwndDlg = FindWindow(null, "Choose an image");
IntPtr hwndCBEx = FindWindowEx(hwndDlg, IntPtr.Zero, "ComboBoxEx32", null);
IntPtr hwndEdit = SendMessage(hwndCBEx, CBEM_GETEDITCONTROL, 0, 0);
Merci, la meilleure solution simple
Si vous recherchez une fenêtre enfant d'un parent, vous devez utiliser EnumChildWindows. Ce qui suit est le code C ++ mais pourrait être facilement avoué: vous pouvez les déléguements de maréchal en tant que pointeurs de fonction pour le rappel.
std::vector<HWND> FindChildrenByClass(HWND parent, const std::string& target_class)
{
struct EnumWndParam {
std::vector<HWND> output;
std::string target;
} enum_param;
enum_param.target = target_class;
EnumChildWindows(
parent,
[](HWND wnd, LPARAM lparam) -> BOOL {
auto param = reinterpret_cast<EnumWndParam*>(lparam);
char class_name[512];
GetClassName(wnd, class_name, 512);
if (param->target == class_name)
param->output.push_back(wnd);
return TRUE;
},
reinterpret_cast<LPARAM>(&enum_param)
);
return enum_param.output;
}
int main()
{
auto windows = FindChildrenByClass( reinterpret_cast<HWND>(0x0061024A), "Edit");
for (auto wnd : windows) {
std::cout << std::hex << wnd << std::endl;
}
}
Vous recherchez probablement EnumchildWindows .
Si cette ligne non valide du code C # est censée représenter les paramètres à
FINDWindowex CODE>, la classe est le troisième paramètre, pas le quatrième.Findwindow - Récurs Une poignée à la fenêtre haut niveau B> i> .. Vous devez énumérer les enfants pour obtenir une fenêtre de niveau inférieure comme sur la capture d'écran.
@ 500-internalserverserror Ok, je sais, mais comment obtenir la poignée de l'enfant par classe?
Appelez GetClassName pour chaque manche renvoyée et comparez avec ce que vous recherchez. Notez qu'il y aura généralement plusieurs fenêtres enfants de la même classe.