C# - Comment puis-je renommer un processus de fenêtre que j'ai commencé?
Est-il possible que je peux renommer la fenêtre de la barre de titre d'une application que j'ai lancé? I. e. si j'ai lancé Notepad.exe je pourrais renommer sa barre de titre de "sans titre - bloc-notes" à "Nouveau bloc-notes Nom".
- Voulez-vous dire alors qu'il est en cours d'exécution?
- Yep... mais si je pouvais préciser la barre de titre avant de me lancer le processus, qui serait également acceptable.
- Généralement, à moins que l'application prend en charge que. Beaucoup ne le font pas. Le bloc-notes comprend le nom du fichier actuellement ouvert dans sa barre de titre, par exemple, et ne supporte pas d'autres changements dans le titre. D'autre part, CMD.EXE a la commande intégrée TITRE qui permet le titre de la fenêtre de la console pour être contrôlé.
- Sauf si l'application prend en charge que RBerteig mentionne, je ne peux pas penser à une façon de le faire.
InformationsquelleAutor djdd87 | 2009-06-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire à l'aide de P/Invoke:
Le fond de la laide hack dans l'exemple de code, c'est qu'il semble que si vous l'appelez SetWindowText immédiatement après le début du processus, le titre ne sera pas modifiée. Peut-être que le message se termine trop tôt dans la file d'attente de messages de bloc-notes, de sorte que le bloc-notes va définir le titre de nouveau par la suite.
Notez également que ce n'est qu'un bref changement; si l'utilisateur sélectionne le Fichier -> Nouveau (ou n'importe quoi d'autre qui va provoquer le bloc-notes de mise à jour du titre de la fenêtre), le titre original sera de retour...
En fait, j'ai trié moi-même et il fonctionne parfaitement. Merci quand même.
Vous ne pouvez pas le faire en C#, mais vous pouvez le faire à l'aide de faible niveau de l'API.
Injecter un thread dans le processus d'appel SetWindowText() de il
Comme @Fredrik Mörk pense, le problème est qu'il est nécessaire d'attendre que la fenêtre peut recevoir des messages à l'ensemble de son titre. En attente de 100 millisecondes peut briser le message interne de l'arpenteuse de la programme et il est juste une solution de contournement.
Pour recevoir un message, la fenêtre doit avoir une poignée qui est utilisé pour faire référence à cette fenêtre, donc vous pouvez simplement attendre le handle de la fenêtre, qui, au démarrage doit être
IntPtr.Zero
(une poignée vides).Voici un exemple de cette approche:
À l'aide de
Application.DoEvents()
le programme continuera de recevoir et de traiter les messages du système, de sorte qu'il ne bloque pas (ni crash), mais elle n'est pas asynchrone.Vous pouvez aussi penser à éviter la charge du PROCESSEUR en remplacement de la
while
déclaration avec unSpinWait.SpinUntil
appel (ainsi, vous aurez besoin d'importerSystem.Threading
):Pas.
Cela nécessiterait que l'application cible permettre le titre de la fenêtre d'être modifiés à tout. Beaucoup de programmes utilisent leurs titres pour afficher les informations utiles (telles que le nom du fichier ouvert dans le bloc-notes, ou le
<TITLE>
du code HTML de document ouvert dans Firefox).Le premier cas, je suis conscient de ce que permet à un utilisateur de définir le titre du texte avec quelques restrictions CMD.EXE s'exécutant dans une fenêtre de console. CMD prend en charge la
TITLE
intégré dans la commande qui définit le titre de la fenêtre basée sur ses arguments. Mais cela ne peut pas être fait par un deuxième fenêtre sans injection de frappes de touche de la fenêtre de la console, qui n'est généralement pas recommandé.Edit:
Puisque l'idée est flottant qui
SetWindowText()
va le faire pour vous, permettez-moi de préciser.Que la fonction de l'API, en effet, modifier la barre de titre d'une fenêtre de premier niveau. Il est, en fait, l'appel à une application comme le bloc-notes est probable que l'aide à définir son propre titre tout moment, il pense que le titre a changé.
La raison pour laquelle je demande que ce n'est pas une solution, c'est que le bloc-notes, en effet, modifier le titre quand il veut. Une application qui a soutenu changements arbitraires de son titre aurait un mécanisme de quelque sorte de se rappeler que le titre a été changé, et pas arbitrairement restaurer son titre préféré de chaîne.