Tengo un error peculiar en el que, ocasionalmente, parece que algún proceso está utilizando el portapapeles cuando mi aplicación va a manejar operaciones de pegar copia &. Hay algunos intentos de reintentos, y tengo una solución aceptable, pero me gustaría ubicar qué proceso es si el error vuelve a ocurrir.Determine qué proceso está bloqueando el portapapeles
Respuesta
me he envuelto mi solución en un método fácil de usar (y algunas declaraciones):
[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);
}
Disfrute !
¿Hay alguna manera de bloquear el portapapeles a sabiendas para ver cómo funciona todo esto? – toong
Para diagnosticar algo como esto Yo sugeriría comenzando con el explorador de procesos, http://technet.microsoft.com/en-us/sysinternals/bb896653
Gracias, pero ni yo ni los usuarios tenemos tiempo para monitorear algo así. De todos modos, encontré lo que estaba buscando. –
@RichardPianka: si encontraste lo que estabas buscando, compártelo aquí. SO es una calle de dos vías. –
he aquí una solución similar, pero esto le da una cadena se puede mostrar al usuario:
[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();
}
Gracias, estaba buscando el nombre del proceso, pero eso es potencialmente más útil para los usuarios finales. –
Sobre la base de la respuesta de Jeff Roe, pero muestra cómo conseguir la longitud del texto, por lo que podría ser> 500. También maneja el caso donde no se encuentra la ventana.
[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. ¿Qué está bloqueando fsockopen?
- 2. Determine pid de proceso terminado
- 3. Determine la arquitectura de un proceso
- 4. Determine el archivo que está utilizando FileHandler
- 5. ¿Cómo saber qué hilo está bloqueando un archivo en Java?
- 6. ¿Cómo puedo determinar programáticamente qué aplicación está bloqueando un archivo?
- 7. php está bloqueando un archivo de sesión eliminado
- 8. Usando IsolationLevel.Snapshot pero DB todavía está bloqueando
- 9. glassPane no está bloqueando la entrada
- 10. ¿Cómo puedo saber qué proceso Linux está esperando?
- 11. Determine si el archivo copiado en el portapapeles es una imagen
- 12. cómo investigar qué está haciendo un proceso?
- 13. cómo encuentro qué proceso está perdiendo memoria
- 14. ¿Está documentado el formato del portapapeles de Excel?
- 15. NSTask bloqueando el hilo principal
- 16. python: determine si una clase está anidada
- 17. Determine qué versión de OpenCV
- 18. ¿Cómo puedo saber si un cliente web está bloqueando anuncios?
- 19. read() no está bloqueando en la programación de socket
- 20. ¿Cómo se interrumpe una BlockingQueue que está bloqueando en take()?
- 21. ¿Cuál es la mejor forma de encontrar el código que está bloqueando el hilo principal?
- 22. Determine qué punto final wcf se está utilizando en el servidor
- 23. secuencia de comandos PowerShell para comprobar una aplicación que está bloqueando un archivo?
- 24. ¿Qué está bloqueando "Seleccione top 1 * from TableName with (nolock)" para devolver un resultado?
- 25. iphone/ipad - padre UIView está bloqueando los toques para llegar a las subvistas - ¿por qué?
- 26. Necesito ayuda para entender por qué select {} no está bloqueando para siempre
- 27. bloqueando solo 1 operación?
- 28. ¿Por qué está bloqueando un std :: mutex dos veces 'Comportamiento no definido'?
- 29. no bloqueando toma, el error es siempre
- 30. ¿Python está mirando el inicio del proceso?
Aunque estoy de acuerdo con el sentimiento de esta pregunta, ¿qué harías exactamente con esta información? Incluso si esto fuera posible (y no estoy seguro), no hay mucho que puedas hacer con la respuesta. (¿Matar el proceso? ¡No es una oportunidad!) –
@mike ¿Podría poner un mensaje para avisarle al usuario? Podría ser un proceso bajo el control directo del usuario. – mickeyf
@mickeyf Incluso si haces eso, ¿qué soy yo, el usuario, se supone que debo hacer? _I_ no cerré el portapapeles, y no hay nada que pueda hacer para desbloquearlo, salvo cerrar cualquier programa que esté bloqueándolo (y, como estoy tratando de hacer mi trabajo, puedes olvidarte de eso). –