J'ai une erreur particulière où certains processus semblent parfois utiliser le presse-papiers lorsque mon application va gérer les opérations de copie de copie &. Il y a quelques tentatives de travail, et j'ai une solution acceptable en place, mais je voudrais localiser le processus si l'erreur se reproduit.Déterminez quel processus verrouille le presse-papiers
Répondre
J'ai enveloppé ma solution dans une méthode facile à utiliser (et quelques déclarations):
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetOpenClipboardWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
private static Process GetProcessLockingClipboard()
{
int processId;
GetWindowThreadProcessId(GetOpenClipboardWindow(), out processId);
return Process.GetProcessById(processId);
}
Profitez !
Y at-il un moyen de bloquer le presse-papiers en connaissance de cause pour voir comment tout cela fonctionne? – toong
Pour diagnostiquer quelque chose comme cela, je suggère de commencer avec Process Explorer, http://technet.microsoft.com/en-us/sysinternals/bb896653
Merci, mais ni moi ni les utilisateurs ont le temps de surveiller quelque chose comme ça. De toute façon, j'ai trouvé ce que je cherchais. –
@RichardPianka: Si vous avez trouvé ce que vous cherchiez, partagez-le ici. SO est une rue à double sens. –
est ici une solution similaire, mais cela vous donne une chaîne que vous pouvez montrer à l'utilisateur:
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetOpenClipboardWindow();
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int GetWindowText(int hwnd, StringBuilder text, int count);
private string getOpenClipboardWindowText()
{
IntPtr hwnd = GetOpenClipboardWindow();
StringBuilder sb = new StringBuilder(501);
GetWindowText(hwnd.ToInt32(), sb, 500);
return sb.ToString();
}
Merci, je cherchais le nom du processus, mais c'est potentiellement plus utile pour les utilisateurs finaux. –
Sur la base de la réponse de Jeff Roe, mais montre comment obtenir la longueur du texte, donc pourrait être> 500. Aussi gère le cas où la fenêtre n'est pas trouvée.
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetOpenClipboardWindow();
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int GetWindowText(int hwnd, StringBuilder text, int count);
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetWindowTextLength(int hwnd);
private static string GetOpenClipboardWindowText()
{
var hwnd = GetOpenClipboardWindow();
if (hwnd == IntPtr.Zero)
{
return "Unknown";
}
var int32Handle = hwnd.ToInt32();
var len = GetWindowTextLength(int32Handle);
var sb = new StringBuilder(len);
GetWindowText(int32Handle, sb, len);
return sb.ToString();
}
- 1. Quel processus verrouille un fichier?
- 2. Processus verrouille un dossier
- 3. Déterminez le tueur de processus
- 4. Déterminez quel contrôle a le focus
- 5. Déterminez quel poste appartient à
- 6. Le processus sass --watch verrouille ma fenêtre de terminal
- 7. Est-il possible de rechercher par programme quel processus verrouille un fichier sur un réseau
- 8. Déterminez si le processus est en cours d'exécution
- 9. Déterminez quel bouton radio l'utilisateur a sélectionné
- 10. Déterminez quel script a terminé en dernier
- 11. Déterminez quel textview doit être coupé
- 12. Bibliothèque Android - déterminez quel paquet est utilisé
- 13. Déterminez quel bouton a déclenché la soumission
- 14. Comment déterminez-vous quel adaptateur est utilisé?
- 15. Déterminez à partir du code quel utilisateur mon processus exécute comme
- 16. Déterminez quel contrôle a été ouvert sur le menu contextuel
- 17. Comment savoir quel thread verrouille un fichier dans Java?
- 18. Comment vérifier qui exécute/active le processus qui verrouille le port spécifique avant?
- 19. Pourquoi mon processus de génération PDF verrouille-t-il d'autres processus ajax sur mon site?
- 20. Déterminez le jour suivant 6PM
- 21. Quel processus récupère le fichier xap Slightlight?
- 22. Quel est le processus majeur des délégués?
- 23. Comment obtenir le nom du processus qui verrouille un fichier spécifique?
- 24. Déterminez quel segment l'image se trouve dans l'objectif c
- 25. Déterminez quel système d'exploitation à partir de Javascript
- 26. Comment déterminez-vous quel fuseau horaire est à 12h maintenant?
- 27. mongo sharding: déterminez quel fragment/hôte une clé va résoudre
- 28. Déterminez sur quel disque dur physique est situé un fichier?
- 29. Déterminez quel cadre (nom) a appelé une fonction en JavaScript
- 30. JQuery: Déterminez quel SELECT parmi les enfants a changé
Bien que je suis d'accord avec le sentiment de cette question, que feriez-vous exactement avec cette information? Même si cela était possible (et je ne suis pas sûr que ce soit le cas), il n'y a pas grand chose à faire avec la réponse. (Tuer le processus? Pas une chance!) –
@mike Pouvez-vous mettre en place un message pour laisser l'utilisateur savoir? Cela pourrait être un processus sous le contrôle direct de l'utilisateur. – mickeyf
@mickeyf Même si vous faites cela, que suis-je, l'utilisateur, supposé faire? _I_ n'a pas verrouillé le presse-papiers, et il n'y a rien que je puisse faire pour le déverrouiller, à moins de fermer le programme qui le verrouille (et, puisque j'essaie de faire mon travail, vous pouvez juste oublier ça). –