Ho un errore particolare in cui alcuni processi sembrano utilizzare occasionalmente gli Appunti quando la mia applicazione va a gestire le operazioni di copia & incolla. Ci sono alcuni tentativi di lavoro in giro, e ho una soluzione accettabile, ma vorrei individuare quale processo è se l'errore si ripresenta.Determinare quale processo sta bloccando gli Appunti
risposta
ho avvolto la mia soluzione in un metodo facile da usare (e alcune dichiarazioni):
[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);
}
Godetevi !
C'è un modo per bloccare consapevolmente gli appunti per vedere come tutto questo funziona? – toong
Per diagnosticare qualcosa come questo vorrei suggerire di iniziare con Process Explorer, http://technet.microsoft.com/en-us/sysinternals/bb896653
Grazie, ma né io né gli utenti abbiamo il tempo di monitorare qualcosa del genere. Ad ogni modo, ho trovato quello che stavo cercando. –
@RichardPianka: Se hai trovato quello che stavi cercando, condividilo qui. SO è una strada a doppio senso. –
Ecco una soluzione simile, ma questo ti dà una stringa è possibile mostrare l'utente:
[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();
}
Grazie, stavo cercando il nome del processo, ma questo è potenzialmente più utile per gli utenti finali. –
in base alla risposta di Jeff Roe, ma mostra come ottenere la lunghezza del testo, così potrebbe essere> 500. Anche gestisce il caso in cui la finestra non viene trovata.
[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. Come posso determinare quale applicazione sta bloccando un file?
- 2. Come scoprire quale thread sta bloccando un file in java?
- 3. Che cosa sta bloccando fsockopen?
- 4. Come determinare il motivo per cui uno stream CUDA sta bloccando
- 5. Come determinare quale script viene eseguito nel processo PHP-FPM
- 6. read() non sta bloccando la programmazione socket
- 7. Iframe SandBox sta bloccando oggetto di incorporamento
- 8. Python Tornado - asincrona richiesta sta bloccando
- 9. Utilizzo di IsolationLevel.Snapshot ma DB sta ancora bloccando
- 10. Determinare quale processo w3wp.exe appartiene a quale pool di app in Windows 7/IIS7.5?
- 11. Uso di Tempdata sta bloccando la mia applicazione
- 12. Log4j sta bloccando la mia applicazione cosa sto facendo male?
- 13. - Gli appunti aperti non sono riusciti
- 14. Determinare il processo principale dell'app corrente
- 15. X11 Appunti Testo Appunti
- 16. Come determinare quale CRC utilizzare?
- 17. Determinare quale rubygem stai utilizzando
- 18. Come sincronizzare gli appunti di Intellij Idea con gli appunti della finestra?
- 19. quale browser sta document.layers sniffando?
- 20. Come copiare l'immagine senza usare gli appunti?
- 21. File bloccato da quale processo?
- 22. Determinare se esiste un processo dal suo ID processo
- 23. Come funzionano gli appunti in Windows?
- 24. Come posso determinare quale motore javascript, rhino o nashorn sta eseguendo il mio codice?
- 25. Come posso determinare quale certificato client SSL sta usando una connessione in mod_perl?
- 26. Determinare se STDERR sta per terminale
- 27. Determinare se il thread sta dormendo
- 28. Determinare quale core esegue il processo Node.js in fase di esecuzione
- 29. Determinare il pid del processo terminato
- 30. Firefox bloccando Facebook Js
Mentre sono d'accordo con il sentimento di questa domanda, cosa faresti esattamente con questa informazione? Anche se fosse possibile (e, non sono sicuro che lo sia), non c'è molto che potresti fare con la risposta. (Uccidi il processo? Non è una possibilità!) –
@ mike Potresti mettere un messaggio per far sapere all'utente? Potrebbe essere un processo sotto il controllo diretto dell'utente. – mickeyf
@mickeyf Anche se lo fai, cosa dovrei fare io, l'utente? _I_ non ha bloccato gli appunti, e non c'è niente che posso fare per sbloccarlo, a meno di chiudere qualsiasi programma lo blocchi (e, dato che sto cercando di completare il mio lavoro, puoi semplicemente dimenticarlo.) –