Le titre est partiellement statique avec un suffixe variable. Par exemple "Titre de la fenêtre {- user_id}".Obtenez le handle d'une fenêtre avec le titre pas entièrement connu. (C#)
Comment puis-je obtenir le handle sans connaître le titre exact?
Le titre est partiellement statique avec un suffixe variable. Par exemple "Titre de la fenêtre {- user_id}".Obtenez le handle d'une fenêtre avec le titre pas entièrement connu. (C#)
Comment puis-je obtenir le handle sans connaître le titre exact?
Examinez tous les processus et vérifiez le MainWindowTitle. (Vous pouvez utiliser des expressions rationnelles ou StartsWith
, etc.)
foreach(Process proc in Process.GetProcesses())
{
if(proc.MainWindowTitle.StartsWith("Some String"))
{
IntPtr handle = proc.MainWindowHandle;
// ...
}
}
Intéressant. Devrait fonctionner dans la plupart des cas. Mais que se passe-t-il si un processus a plus d'une fenêtre de niveau supérieur? –
@Serge: Pas exactement sûr ... –
Merci! Wow, je n'ai jamais su que vous pouviez contourner cela et éviter les kludges Win32 API. – Jonas
This CodeProject article décrit comment énumérer les fenêtres de niveau supérieur (basé sur l'API Win32 EnumWindows). Vous pouvez facilement le modifier pour filtrer sur un titre de fenêtre partielle: Modifier EnumWindowsCallBack.
HTH.
Get par nom de classe et poignée de fenêtre parent. Par exemple: obtenez le bouton de démarrage en utilisant win32api. D'abord, vous connaissez le nom de classe de la fenêtre parent en utilisant l'outil spyxx.
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr handleParent, IntPtr handleChild, string className, string WindowName);
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string className, string windowTitle);
Utilisation:
IntPtr handle = FindWindowEx(FindWindow("Shell_TrayWnd",null), new IntPtr(0), "Button", null);
Annexe? Je pense que vous voulez dire le suffixe. Je vais le réparer pour vous. – Ray