Vous pouvez le faire simplement avec des appels API et un temporisateur. Ajoutez cette ligne aux déclarations à l'aide de votre formulaire:
using System.Runtime.InteropServices;
Ensuite, ajoutez ces déclarations à votre formulaire:
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
Enfin, mettre une minuterie sur votre formulaire et définissez sa propriété Activé pour true
. Dans son événement Tick, mettez ce code:
IntPtr hWndNotepad = FindWindow(null, "Whatever.txt - Notepad");
IntPtr hWndForegroundWindow = GetForegroundWindow();
if (this.Handle != hWndForegroundWindow)
{
this.Visible = (hWndNotepad == hWndForegroundWindow);
}
Je n'ai pas testé ce code, mais cela devrait fonctionner. Le code recherche un fichier spécifique à ouvrir dans le Bloc-notes; un fichier différent entraînerait un texte différent dans la barre de titre, ce code ne fonctionnerait donc pas. Je pense que si vous modifiez l'appel FindWindow à FindWindow("notepad", null)
cela fonctionnerait avec n'importe quelle instance ouverte de Bloc-notes (il peut être "notepad.exe" - pas sûr).
Mise à jour: si vous voulez que votre forme soit visible si une instance du Bloc-notes est ouvert, vous pouvez mettre à la place ce code dans votre événement Tick compteur d'émission:
IntPtr hWndForegroundWindow = GetForegroundWindow();
bool NotepadIsForeground = false;
Process[] procs = Process.GetProcessesByName("notepad");
foreach (Process proc in procs)
{
if (proc.MainWindowHandle == hWndForegroundWindow)
{
NotepadIsForeground = true;
break;
}
}
if (this.Handle != hWndForegroundWindow)
{
this.Visible = NotepadIsForeground;
}
Et vous aurez besoin ceci dans vos directives d'utilisation:
using System.Diagnostics;
Également pas testé, mais je me débrouille si bien aujourd'hui, alors pourquoi s'embêter?
Cela a fonctionné! C'est la direction dans laquelle je veux aller. Merci Encore une question? Si je clique sur mon formulaire, il clignote continuellement au lieu de rester concentré (alterne entre celui-ci et le bloc-notes). Comment je le répare. –
@zion: oups, vous a dit que je ne l'ai pas testé. Ce qui se passait était que dès que vous avez cliqué sur votre formulaire, * il * est devenu la fenêtre de premier plan, donc la prochaine fois que le minuteur s'est déclenché, votre formulaire s'est rendu invisible à nouveau. J'ai corrigé l'exemple de code. – MusiGenesis
Erp, ne fonctionne toujours pas bien. Donnez-moi une seconde ... – MusiGenesis