mediacapture.cs
来自「自己做的一个浏览器~~大家请看看~如果合意给个彩头」· CS 代码 · 共 232 行
CS
232 行
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using APLib.Native.WMP;
using APLib.Native.Real;
using APLib.Native.ShockwaveFlash;
namespace WebPort.Tools
{
/// <summary>
/// MediaCapture窗体类
/// 获取网页上的播放器控件正在播放的媒体文件地址
/// </summary>
public partial class MediaCapture : Form
{
/// <summary>
/// 网页对象
/// </summary>
public HtmlDocument Document;
/// <summary>
/// 停止搜索线程标志
/// </summary>
private bool stop;
/// <summary>
/// 搜索线程
/// </summary>
private Thread captureTh;
/// <summary>
/// 构造函数
/// </summary>
public MediaCapture()
{
InitializeComponent();
}
private void MediaCapture_Load(object sender, EventArgs e)
{
StartCapture();
}
private void MediaCapture_FormClosing(object sender, FormClosingEventArgs e)
{
StopCapture();
}
#region 控件事件
private void btnCapture_Click(object sender, EventArgs e)
{
StartCapture();
}
private void btnStop_Click(object sender, EventArgs e)
{
StopCapture();
}
private void btnCopy_Click(object sender, EventArgs e)
{
string text = string.Empty;
foreach (ListViewItem item in list.SelectedItems)
{
text += item.SubItems["URL"].Text + "\n";
}
if ((text != null) && (text.Length > 0))
{
Clipboard.Clear();
Clipboard.SetText(text);
}
}
private void btnClose_Click(object sender, EventArgs e)
{
if (!stop)
StopCapture();
this.Close();
}
private void list_DoubleClick(object sender, EventArgs e)
{
if (list.SelectedItems.Count == 1)
{
string url = list.SelectedItems[0].SubItems["URL"].Text;
try
{
if (url != null)
{
Uri uri;
if (!Uri.TryCreate(url, UriKind.Absolute, out uri))
{
if (Document.Url.IsAbsoluteUri)
{
string baseUrl = Document.Url.AbsoluteUri;
baseUrl = baseUrl.Substring(0, baseUrl.LastIndexOf('/') + 1);
url = baseUrl + url;
}
}
else
url = uri.ToString();
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = url;
p.UseShellExecute = true;
Process.Start(p);
}
}
catch
{
}
}
}
#endregion
/// <summary>
/// 开始搜索线程
/// </summary>
private void StartCapture()
{
if (Document != null)
{
if (captureTh != null)
StopCapture();
stop = false;
captureTh = new Thread(new ThreadStart(CaptureThread));
captureTh.Start();
UpdateButton(true);
}
}
/// <summary>
/// 停止搜索线程
/// </summary>
private void StopCapture()
{
stop = true;
try
{
if (captureTh != null)
if (!captureTh.Join(5000))
captureTh.Abort();
captureTh = null;
UpdateButton(false);
}
catch
{
MessageBox.Show("Can't stop capture thread");
}
}
/// <summary>
/// 更新按钮状态
/// </summary>
/// <param name="running">搜索标志</param>
private void UpdateButton(bool running)
{
if (running)
{
btnCapture.Enabled = false;
btnStop.Enabled = true;
}
else
{
btnCapture.Enabled = true;
btnStop.Enabled = false;
}
}
/// <summary>
/// 搜索线程
/// </summary>
private void CaptureThread()
{
int i = 0;
while ((!stop) && (i < Document.All.Count))
{
HtmlElement element = Document.All[i];
if (element.TagName.ToLower() == "object")
{
object obj = element.DomElement.GetType().GetProperty("object").GetValue(element.DomElement, null);
switch (element.GetAttribute("classid").ToUpper())
{
case "CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6": //wmp
IWMPPlayer wmp = obj as IWMPPlayer;
if (wmp != null)
AddToList("WMP", wmp.URL);
break;
case "CLSID:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA": //real
IRealAudio ra = obj as IRealAudio;
if (ra != null)
AddToList("Real", ra.Source);
break;
case "CLSID:D27CDB6E-AE6D-11CF-96B8-444553540000": //flash
IShockwaveFlash flash = obj as IShockwaveFlash;
if (flash != null)
AddToList("Flash", flash.Movie);
break;
}
}
i++;
}
this.Invoke(new MethodInvoker(delegate
{
UpdateButton(false);
}));
stop = true;
}
/// <summary>
/// 添加源文件地址到列表
/// </summary>
/// <param name="type">媒体控件类型</param>
/// <param name="url">媒体文件地址</param>
private void AddToList(string type, string url)
{
this.Invoke(new MethodInvoker(delegate
{
ListViewItem item = new ListViewItem();
item.Name = "Type";
item.Text = type;
ListViewItem.ListViewSubItem subitem = new ListViewItem.ListViewSubItem();
subitem.Name = "URL";
subitem.Text = url;
item.SubItems.Add(subitem);
list.Items.Add(item);
list.Update();
}));
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?