111,129
社区成员
发帖
与我相关
我的任务
分享
引用Microsoft Internet Controls
using 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");
}
}
}
}