हुड के तहत, जब आप Process.Responding
संपत्ति की जांच करते हैं, तो विंडोज फ़ंक्शन SendMessageTimeout
कहा जाता है।
यह फ़ंक्शन मूल रूप से किसी अन्य प्रक्रिया की मुख्य विंडो पर एक संदेश भेजता है और यह जांचता है कि विंडो 5000 एमएस के टाइमआउट के भीतर संदेश स्वीकार कर रही है (इसलिए कंसोल एप्लिकेशन पर इस संपत्ति को जांचना कोई प्रभाव नहीं पड़ता है)।
आप एक कस्टम टाइमआउट उपयोग करना चाहते हैं तो आप सिर्फ रूप में अच्छी तरह SendMessageTimeout
समारोह अपने आप को कॉल कर सकते हैं: यह हमेशा उन गैर-उपयोगकर्ता के अनुकूल संदेश जो वास्तव में आता है से एक रहा है:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
HandleRef hWnd,
int msg,
IntPtr wParam,
IntPtr lParam,
int flags,
int timeout,
out IntPtr pdwResult);
const int SMTO_ABORTIFHUNG = 2;
public bool RespondingWithinMs(Process process, int timeoutMs)
{
IntPtr ptr2;
return SendMessageTimeout(
new HandleRef(process, process.MainWindowHandle),
0,
IntPtr.Zero,
IntPtr.Zero,
SMTO_ABORTIFHUNG,
timeoutMs,
out ptr2) != IntPtr.Zero;
}
स्रोत
2011-07-21 19:54:55
यह वास्तव में क्या कहते हैं तकनीकी कार्यान्वयन विवरण से: संदेश पाश प्रतिक्रिया नहीं दे रहा है। – sehe