Option Explicit'API Constants
Const SMTO_BLOCK = &H1
Const SMTO_ABORTIFHUNG = &H2
Const WM_NULL = &H0
Const WM_CLOSE = &H10
Const PROCESS_ALL_ACCESS = &H1F0FFF
'API functions
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, _
lpdwProcessId As Long) As LongPrivate Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPrivate Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" _
(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As _
Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As LongPrivate Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, _
ByVal uExitCode As Long) As LongPrivate modObjIE As Object
Private modlngWndIE As LongPrivate Sub cmdCheck_Click()
Dim lngResult As Long
Dim lngReturnValue As Long
lngReturnValue = SendMessageTimeout(modlngWndIE, WM_NULL, 0&,
0&, SMTO_ABORTIFHUNG And SMTO_BLOCK, 1000, lngResult)
If lngReturnValue Then
MsgBox "Responding"
Else
MsgBox "Not Responding","Block tester"
End If
End SubPrivate Sub cmdLaunch_Click()
Set modObjIE = Nothing
Set modObjIE = CreateObject("InternetExplorer.Application")
modObjIE.Visible = True
modObjIE.Navigate2 "http://www.microsoft.com"
modlngWndIE = modObjIE.hwnd
End SubPrivate Sub cmdKill_Click()
Dim lngProcessID As Long
Dim lngReturnValue As Long
Dim lngProcess As Long
lngReturnValue = GetWindowThreadProcessId(modlngWndIE, lngProcessID)
lngProcess = OpenProcess(PROCESS_ALL_ACCESS, 0&, lngProcessID)
lngReturnValue = TerminateProcess(lngProcess, 0&)
End Sub
翻译好的可以加分
下面是源代码地址:http://support.microsoft.com/kb/231844
Const SMTO_BLOCK = &H1
Const SMTO_ABORTIFHUNG = &H2
Const WM_NULL = &H0
Const WM_CLOSE = &H10
Const PROCESS_ALL_ACCESS = &H1F0FFF
'API functions
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, _
lpdwProcessId As Long) As LongPrivate Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPrivate Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" _
(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As _
Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As LongPrivate Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, _
ByVal uExitCode As Long) As LongPrivate modObjIE As Object
Private modlngWndIE As LongPrivate Sub cmdCheck_Click()
Dim lngResult As Long
Dim lngReturnValue As Long
lngReturnValue = SendMessageTimeout(modlngWndIE, WM_NULL, 0&,
0&, SMTO_ABORTIFHUNG And SMTO_BLOCK, 1000, lngResult)
If lngReturnValue Then
MsgBox "Responding"
Else
MsgBox "Not Responding","Block tester"
End If
End SubPrivate Sub cmdLaunch_Click()
Set modObjIE = Nothing
Set modObjIE = CreateObject("InternetExplorer.Application")
modObjIE.Visible = True
modObjIE.Navigate2 "http://www.microsoft.com"
modlngWndIE = modObjIE.hwnd
End SubPrivate Sub cmdKill_Click()
Dim lngProcessID As Long
Dim lngReturnValue As Long
Dim lngProcess As Long
lngReturnValue = GetWindowThreadProcessId(modlngWndIE, lngProcessID)
lngProcess = OpenProcess(PROCESS_ALL_ACCESS, 0&, lngProcessID)
lngReturnValue = TerminateProcess(lngProcess, 0&)
End Sub
翻译好的可以加分
下面是源代码地址:http://support.microsoft.com/kb/231844
引用Microsoft Internet Controlsusing System;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private IntPtr modlngWndIE = IntPtr.Zero; private uint WM_NULL = 0x0; [DllImport("user32.dll", SetLastError = true)]
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); [DllImport("kernel32.dll")]
private static extern IntPtr OpenProcess(ProcessAccessTypes dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId); [DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr SendMessageTimeout(
IntPtr hWnd,
uint Msg,
UIntPtr wParam,
IntPtr lParam,
SendMessageTimeoutFlags fuFlags,
uint uTimeout,
out UIntPtr lpdwResult); private enum ProcessAccessTypes
{
PROCESS_TERMINATE = 0x00000001,
PROCESS_CREATE_THREAD = 0x00000002,
PROCESS_SET_SESSIONID = 0x00000004,
PROCESS_VM_OPERATION = 0x00000008,
PROCESS_VM_READ = 0x00000010,
PROCESS_VM_WRITE = 0x00000020,
PROCESS_DUP_HANDLE = 0x00000040,
PROCESS_CREATE_PROCESS = 0x00000080,
PROCESS_SET_QUOTA = 0x00000100,
PROCESS_SET_INFORMATION = 0x00000200,
PROCESS_QUERY_INFORMATION = 0x00000400,
STANDARD_RIGHTS_REQUIRED = 0x000F0000,
SYNCHRONIZE = 0x00100000,
PROCESS_ALL_ACCESS = PROCESS_TERMINATE | PROCESS_CREATE_THREAD | PROCESS_SET_SESSIONID | PROCESS_VM_OPERATION |
PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_DUP_HANDLE | PROCESS_CREATE_PROCESS | PROCESS_SET_QUOTA |
PROCESS_SET_INFORMATION | PROCESS_QUERY_INFORMATION | STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE
} [Flags]
enum SendMessageTimeoutFlags : uint
{
SMTO_NORMAL = 0x0,
SMTO_BLOCK = 0x1,
SMTO_ABORTIFHUNG = 0x2,
SMTO_NOTIMEOUTIFNOTHUNG = 0x8
} private void button1_Click(object sender, EventArgs e)
{
//InternetExplorer.Application"
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
ie.Navigate2("http://www.microsoft.com");
ie.Visible = true;
modlngWndIE = (IntPtr)ie.HWND;
} private void button2_Click(object sender, EventArgs e)
{
uint lngProcessID = 0;
uint lngReturnValue = 0;
IntPtr lngProcess = IntPtr.Zero; lngReturnValue = GetWindowThreadProcessId(modlngWndIE, out lngProcessID);
lngProcess = OpenProcess(ProcessAccessTypes.PROCESS_ALL_ACCESS, false, lngProcessID);
TerminateProcess(lngProcess, 0);
} private void button3_Click(object sender, EventArgs e)
{
UIntPtr lngResult = UIntPtr.Zero;
IntPtr lngReturnValue = IntPtr.Zero;
lngReturnValue = SendMessageTimeout(modlngWndIE, WM_NULL, UIntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.SMTO_ABORTIFHUNG | SendMessageTimeoutFlags.SMTO_BLOCK, 1000, out lngResult);
if (lngReturnValue != IntPtr.Zero)
{
MessageBox.Show("Responding");
}
else
{
MessageBox.Show("Not Responding");
}
}
}
}