Η καλύτερη πηγή σας πληροφοριών και ειδήσεων περίπου υλικό, Vista υλικό και vista παραθύρων στο διαδίκτυο

Vista ΑΡΘΡΑ ΚΟΡΥΦΗ 50 Vista ΒΙΝΤΕΟ Vista SOFT Vista ΒΟΗΘΕΙΑ

Χάος περιοχών αποκομμάτων!


Σημείωση: αυτό το περιεχόμενο αρχικά από http://mygreenpaste.blogspot.com. Εάν τον διαβάζετε από κάποια άλλη περιοχή, παρακαλώ πάρτε το χρόνο να επισκεφτεί Η πράσινη κόλλα μου, INC. Σας ευχαριστούμε.

ΕΝΤΑΞΕΙ, έτσι ίσως το χάος είναι λίγο μια σκληρή λέξη εδώ. Αλλά η περιοχή αποκομμάτων με οδηγούσε πρόσφατα καρύδια! Όλος προσπαθούσα να κάνω ήμουν αντίγραφο κάποιο κείμενο σε το, και η λειτουργία απετύγχανε. Φυσικά, δεδομένου ότι ήταν ειδικό app, δεν είχα οποιοδήποτε είδος χειρισμού λάθους. App ελειτούργησε ακριβώς λεπτό σε ένα σύστημα, αλλά το τρέξιμο app σε ένα άλλο σύστημα (μια εικονική μηχανή) με συνέπεια οδήγησε στην αποτυχία να αντιγραφεί το κείμενο στην περιοχή αποκομμάτων.

Τελικά, ήμουν σε θέση να καθορίσω ποια διαδικασία απέτρεπε app μου από την τοποθέτηση των στοιχείων στην περιοχή αποκομμάτων, αλλά δεν έχω βρεί ακόμα κόσμιο workaround για όταν συμβαίνει το πρόβλημα. Δεν είναι κρίσιμο για με, ως πράξη της αντιγραφής του κειμένου στην περιοχή αποκομμάτων είναι περισσότερος μιας ακρίβειας από μια απαίτηση.

Εν πάση περιπτώσει, χρησιμοποιώντας P/Invoke και System.Diagnostics, διαπίστωσα ότι vmusrvc.exe - το εικονικό PC «εικονικές υπηρεσίες χρηστών μηχανών» - είχε την περιοχή αποκομμάτων ανοικτή. Χρησιμοποίηση timestamps από Όργανο ελέγχου διαδικασίας«s που σχεδιάζουν περίγραμμα τα γεγονότα (που παράγονται σε 100 διαστήματα κας), και timestamp της αποτυχημένης λειτουργίας από app μου, ήμουν σε θέση να καθορίσω το σωρό vmusrvc.exe:

ntdll.dllKiFastSystemCallRet
vmusrvc.exevmusrvc.exe + 0x9a17
vmusrvc.exevmusrvc.exe + 0x9c24
vmusrvc.exevmusrvc.exe + 0x91f8
vmusrvc.exevmusrvc.exe + 0x907f
USER32.dllInternalCallWinProc + 0x28
USER32.dllUserCallWinProcCheckWow + 0x150
USER32.dllDispatchClientMessage + 0xa3
USER32.dll__fnDWORD + 0x24
ntdll.dllKiUserCallbackDispatcher + 0x13
vmusrvc.exevmusrvc.exe + 0x2d29
vmusrvc.exevmusrvc.exe + 0xdba6
kernel32.dllBaseProcessStart + 0x23

Καμία παράμετρος, φυσικά, και οι πληροφορίες συμβόλων για vmusrvc.exe δεν εμφανίζονται να είναι διαθέσιμες, αλλά προφανώς user32.dll επεξεργάζεται κάποιο μήνυμα. Μπορώ να εξετάσω αυτού του περισσότερου σε ένα πιό πρόσφατο σημείο.

Για να βρώ τη διαδικασία που παρεμπόδιζε την εργασία περιοχών αποκομμάτων μου, χρησιμοποίησα P/Invoke για να καλέσω GetOpenClipboardWindow() και έπειτα GetWindowThreadProcessId(), περνώντας στη λαβή που επιστρέφεται από GetOpenClipboardWindow (). Κατόπιν, η εύρεση του εκτελέσιμου ονόματος των διαδικασιών ήταν ακριβώς ένα θέμα Ενότητες συλλογή Διαδικασία περίπτωση που επιστρέφεται με τη διάβαση στην ταυτότητα διαδικασίας που ανακτάται από GetWindowThreadProcessId () System.Diagnostics.Process.GetProcessById().

Ο ακόλουθος κώδικας:

χρησιμοποίηση System.Runtime.InteropServices 
χρησιμοποίηση System.Diagnostics
...
στοιχεία σειράς = «aasdlkjasdlk alkjsdl kajsdlkj Al»
προσπαθήστε
{
Clipboard.SetData (System.Windows.Forms.DataFormats.Text, στοιχεία)
}
σύλληψη (ExternalException EE)
{
Λογικό (ee.ToString ())
IntPtr hWnd = GetOpenClipboardWindow ()
εάν (IntPtr.Zero! = hWnd)
{
uint PID = 0
uint tid = GetWindowThreadProcessId (hWnd, έξω PID)
Λογικό («διαδικασία με το hWnd {0}, PID {1} ({1: Χ}), TID {2} ({2: Χ}),» +
"name {3} has the clipboard", hWnd, pid, tid,
Process.GetProcessById( (int)pid ).Modules[0].FileName );
}
}

Resulted in the following output:


2008-03-25 00:54:45.4938864--> System.Runtime.InteropServices.ExternalException: Requested Clipboard operation did not succeed.
at System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)
at System.Windows.Forms.Clipboard.SetData(String format, Object data)
at Clippy.Form1.button1_Click(Object sender, EventArgs e)
2008-03-25 00:54:45.5339440--> Process with hWnd 65716 (65716), PID 1492 (5d4), TID 1496 (5d8), name C:\Program Files\Virtual Machine Additions\vmusrvc.exe has the clipboard

Interestingly, trying an alternative method of the Clipboard to set the content also failed. The Clipboard.SetDataObject() overload that takes a retryTimes and retryDelay parameter failed in the same fashion after roughly ten seconds when invoked as follows:


Clipboard.SetDataObject( data, false, 100, 100 );

I tried variations on retryTimes and retryDelay, to no avail.

Not sure what vmusrvc.exe is doing with the clipboard (probably has to do with monitoring it for host / guest VM interaction), but the act of setting the contents of the clipboard didn't fail 100% of the time in the VM. Often enough to make it extremely unreliable, though. During "normal" system usage, I was not able to cause a failure when running the app on a non-virtual (actual?) system.

Popularity: 2%


Written by «/\/\Ø|ö±ò\/»®©. Read more great feeds at is source WEBSITE
no comments.
Read more articles on P/Invoke and GetOpenClipboardWindow and System.Diagnostics and Clipboard and GetWindowThreadProcessId and Process Monitor and c# and processes and Virtual Machine and otherSoftware and Virtual PC.

No comments

There are still no comments on this article.

Leave your comment...

If you want to leave your comment on this article, simply fill out the next form:




You can use these XHTML tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> .