我所知道的唯一好的软件是恩厄斯MySpeed,它可以在任何浏览器中减速和加速YouTube视频的播放,而无需首先下载它(因为这会很麻烦)。
不幸的是,这个软件不是免费的,我的试用版也用完了。我在玩它的注册表设置,注意到有几个键:
ProgramsToHook: iexplore.exe;firefox.exe;plugin-container.exe;chrome.exe;safari.exe;opera.exe;maxthon.exe;feeddemon.exe;realplay.exe;flvplayer.exe;flv player.exe;flock.exe;adobe media player.exe
UseFlashAdapter: 1
LLModules: ole32.dll;nspr4.dll;chrome.exe;realplay.exe;objb3201.dll;oleaut32.dll;rpflashplayer.dll
ModulesToIntercept: flash10*;flash9*;npswf32.dll;gcswf32.dll;fldbg10*;flashplayer.3.1.1k.ocx;adobe media player.exe根据这些注册表项的名称和值,我猜MySpeed软件钩住了列出的模块中的某些函数(但是模块是否与DLL相同?)并对ProgramsToHook中列出的每个进程执行此操作。这就是我不明白的。MySpeed软件的概念是什么?很明显,它在勾搭什么东西,但我不太熟悉Windows钩子的错综复杂之处,所以我来请教您的专家。我在想,如果我能理解这个钩子过程是如何工作的,我可以使用EasyHook制作自己版本的软件,这是一个非常棒的.NET库,可以执行用户模式和内核模式挂钩。
我以为Windows用户模式挂钩是这样的。在一个DLL中选择一个函数,然后在所需的进程中拦截该函数(即钩子)。如果要将DLL挂接在多个进程中,则只需对每个进程重复该过程。
然后,内核模式挂钩就是在一个DLL中选择一个函数,并在调用它的每个进程(因此是内核模式)中拦截该函数。但是,当然有很多方法可以挂钩;我也不太确定这两个钩子和DLL注入之间有什么区别。
所以重点是,我想知道MySpeed是如何工作的。他们的挂钩概念是什么?如果我能知道这一点,那么我就可以在.NET中制作这样一个软件!
提前谢谢。
发布于 2011-02-04 10:33:46
我无法为您提供一个准确的解释,因为我不知道API调用或能力,但是它是这样的:您的应用程序查找iexplore.exe,它在其中拦截对某些模块的调用。该模块主要是flash播放器。Flash支持更慢地播放视频,所以您可以修改来自iexplore.exe (网页上的JavaScript播放按钮)的调用,或者进行额外的调用来设置播放速度。
你需要做的是:
关于钩子:http://msdn.microsoft.com/en-gb/library/ms644960.aspx
我不认为很多人在C#上做过这件事,所以它可以提供一个挑战。不过,如果你有一个博客或什么东西来分享血淋淋的细节,我会对进展(障碍)感兴趣。:)
编辑: Deviare API Hook软件似乎不仅监视电话,而且还允许您拦截它们。所以这是满足你需求的一个整体方案。:)
EDIT2:相关问题:如何拦截发送到窗口的邮件?
发布于 2012-06-13 20:35:20
加快或减慢视频速度的关键是让多媒体播放器相信你的计算机比它的实际速度更慢或更快。这可以通过挂钩timeGetTime()来完成。
这是一个非常容易实现的C#代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Nektra.Deviare2;
namespace DeviareTest
{
public partial class Form1 : Form
{
private int nSpeed;
private uint nTime;
private NktSpyMgr _spyMgr;
public Form1()
{
InitializeComponent();
_spyMgr = new NktSpyMgr();
_spyMgr.Initialize();
_spyMgr.OnFunctionCalled += new DNktSpyMgrEvents_OnFunctionCalledEventHandler(OnFunctionCalled);
}
private void Form1_Load(object sender, EventArgs e)
{
NktHook hook = _spyMgr.CreateHook("WINMM.dll!timeGetTime", (int)(eNktHookFlags.flgOnlyPostCall));
hook.Hook(true);
bool bProcessFound = false;
NktProcessesEnum enumProcess = _spyMgr.Processes();
NktProcess tempProcess = enumProcess.First();
while (tempProcess != null)
{
if (tempProcess.Name.Equals("iexplore.exe", StringComparison.InvariantCultureIgnoreCase) && tempProcess.PlatformBits == 32)
{
hook.Attach(tempProcess, true);
bProcessFound = true;
}
tempProcess = enumProcess.Next();
}
if(!bProcessFound)
{
MessageBox.Show("Please run \"iexplore.exe\" before!", "Error");
Environment.Exit(0);
}
}
private void OnFunctionCalled(NktHook hook, NktProcess process, NktHookCallInfo hookCallInfo)
{
nTime++;
if (nSpeed==-2)
hookCallInfo.Result().LongVal = hookCallInfo.Result().LongVal - (int)(nTime * 0.2);
else if(nSpeed==2)
hookCallInfo.Result().LongVal = hookCallInfo.Result().LongVal + (int)(nTime * 3);
}
private void SlowButton_CheckedChanged(object sender, EventArgs e)
{
nSpeed = -2;
}
private void FastButton_CheckedChanged(object sender, EventArgs e)
{
nSpeed = 2;
}
}
}我刚刚发表了一篇带有代码示例的文章,演示了如何使用Deviare挂钩引擎来实现这一点。示例代码仅适用于视频部分(而不是音频部分),并且它是可用的这里。
发布于 2011-02-12 01:49:53
Youtube现在有一个带有播放速度控制的html5播放器。
不过,您所要做的就是在这里启用html5,http://www.youtube.com/html5中只有一些视频支持html5播放器。
希望这能有所帮助。
https://stackoverflow.com/questions/4839940
复制相似问题