Position Changer Add-In updated for Windows XP Media Center Edition 2005 Update Rollup 2

Today, the Media Center team released Update Rollup 2 for Windows XP Media Center Edition 2005 (you may have heard of the update referred to previously as “Emerald”). Update Rollup 2 includes a plethora of modifications to improve the stability, reliability, and functionality of Windows XP Media Center Edition 2005.  A new SDK to match was also released, available at http://www.microsoft.com/downloads/details.aspx?FamilyId=1D836C29-ABD5-4FDD-90C5-5C5ABAE97DB4&displaylang=en.

One of the problems users of MCE 2005 experience is poorly written add-ins and HTML applications hosted by MCE. In MCE 2005, add-ins are hosted in-process in ehShell.exe (the main MCE application), so when something goes wrong in one of these add-ins, the entire MCE experience can be affected.

To address this reliability issue in Update Rollup 2, MCE has moved to an out-of-process hosting model. When an add-in is run, a new hosting application, ehExtHost.exe, loads the add-in rather than ehShell.exe loading it (take a look in task manager after an add-in loads and you’ll see an instance of the application listed). That way, if MCE detects that the add-in is being a bad citizen, it can tear down the whole hosting process. A named pipe remoting channel is used to provide communication between ehShell and the add-in loaded in ehExtHost. Since ehShell previously loaded add-ins into a separate application domain, remoting was already necessary for add-ins to communicate with the hosting code in the primary application domain, so this change for Update Rollup 2 shouldn’t affect the functionality of any existing add-ins. Or, at least not those that play by the rules…

As I mentioned in my article Time Travel with Windows XP Media Center, while developing the Position Changer Add-In, I made several assumptions about Media Center and the environment that would be hosting the add-in. Most of these assumptions are still valid for Update Rollup 2 (for example, I had assumed that, while watching a recorded video, the arrow keys served no purpose, and that remains the case in this update). However, if you recall from the article, my add-in uses a keyboard hook in order to intercept and handle certain remote control interactions. The keyboard hook requires that the add-in be running in the same process as the GUI thread handling the keyboard commands issued by the remote. But as I’ve just outlined, with Update Rollup 2, add-ins are no longer hosted in ehShell, and thus the version of the add-in I posted with my article no longer works once you upgrade to Update Rollup 2. It won’t cause anything to crash; rather, the add-in will just fail to load, a message will be written to the event log detailing that the keyboard hook couldn’t be installed, and the add-in will exit silently.

Have no fear, though. If you’ve come to rely on the add-in (as I have), you’ll be comforted to know that I’ve updated the code so that it is compatible with the new version. You can download the source code and installers for both versions here. Just uninstall the version you currently have installed, install the new version, and you should be good to go.

For those of you who are just interested in getting this functionality back, you can stop reading now. For those of you who are interested in the changes I had to make to get this to work, keep reading.

First and foremost, I had to abandon the type of keyboard hook I was using in the previous version. My add-in is now running in a separate process from the thread that I want to hook, and thus I would need to use a global hook. However, if you read Knowledge Base article 318804, you’ll discover that global hooks are not supported in the .NET Framework:

Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL
low-level hook, you cannot implement global hooks in the Microsoft
.NET Framework. To install a global hook, a hook must have a
native DLL export to inject itself in another process that requires
a valid, consistent function to call into. This behavior requires a
DLL export. The .NET Framework does not support DLL exports.
Managed code has no concept of a consistent value for a function
pointer because these function pointers are proxies that are
built dynamically.”

Ah, but there’s a glimmer of hope. The KB article mentions that WH_KEYBOARD_LL can be used to implement global hooks. What is WH_KEYBOARD_LL? From the documentation:

The LowLevelKeyboardProc hook procedure is an application-defined or
library-defined callback function used with the SetWindowsHookEx function.
The system calls this function every time a new keyboard input event is
about to be posted into a thread input queue. The keyboard input can come
from the local keyboard driver or from calls to the keybd_event function.
If the input comes from a call to keybd_event, the input was “injected”.
However, the WH_KEYBOARD_LL hook is not injected into another process.
Instead, the context switches back to the process that installed the hook
and it is called in its original context. Then the context switches back
to the application that generated the event.”

Perfect! This means that from the hosting process, I can use a low-level keyboard hook instead of a standard keyboard hook to intercept the remote control commands routed to ehShell. Doing so required only minor modifications to my KeyboardHook class, which you can examine by downloading the source code I’ve made available. There is a downside to this approach, of course. This is now a global hook, which means that every keystroke to be handled by any application on the machine will cause a context switch to the hosting process so that my add-in can determine whether it wants to handle it. To minimize this impact, when the add-in starts up, it retrieves the process ID of ehShell.exe and caches it away. When the hook callback executes to process keyboard input, the handler first checks to see if the process responsible for this input is ehShell (it make an educated guess about what process is responsible by retrieving the ID of the process that owns the current foreground window). If it’s not, it immediately returns in order to minimize the amount of time spent processing in the hook (of course, we also only want to handle ehShell input, so this is necessary anyway).

With that change in place, the new version of the add-in is almost fully functional. However, if you attempt to use the bookmarking functionality, you’ll find that it is partially broken as it’s unable to associate bookmarks with a particular DVR-MS file (if you read the article, you’ll remember that this was one of my goals, to be able to set a bookmark per file). The reason for this becomes clear if you look at the event log after attempting to set or jump to a bookmark, as you’ll see a message like the following in the log:

Unable to access filter graph for current show.
System.Runtime.InteropServices.COMException (0x8001010D):
An outgoing call cannot be made since the application is
dispatching an input-synchronous call.
at System.Runtime.InteropServices.UCOMIRunningObjectTable.GetObject(
UCOMIMoniker pmkObjectName, Object& ppunkObject)
at Toub.MediaCenter.AddIns.MceGraph.GetGraphForProcess(Int32 pid)
at Toub.MediaCenter.AddIns.MceGraph.GetCurrentMediaInfo(Int32 pid)

In order to figure out the current DVR-MS file, I access the running object table (ROT) in order to get at the current playback filter graph used by MCE. This allows me to iterate through the filters in the graph looking for the source filter that will reveal to me the path to the current DVR-MS. In order to retrieve a filter graph from the ROT, I need to make a call to the ROT’s GetObject method. However, this is a call on a COM component. A quick look at Knowledge Base article 131056 reveals the following:

A synchronous OLE call made by the recipient of an inter-process/
inter-thread SendMessage fails with RPC_E_CANTCALLOUT_ININPUTSYNCCALL(0x8001010D).

It explains why if you’re interested in the nitty gritty. A slightly more relevant explanation is available from Knowledge Base article 198996:

COM does not allow normal outgoing COM method calls
from a thread that is currently servicing a
SendMessage request.

And another look at the documentation for LowLevelKeyboardProc reveals this:

This hook is called in the context of the thread that installed it.
The call is made by sending a message to the thread that installed
the hook. Therefore, the thread that installed the hook must have a
message loop.

Aha. “The call is made by sending a message”. Thus, our hook callback is the result a message being sent. Our hook then attempts to make a normal outbound COM call from the same thread. And boom: RPC_E_CANTCALLOUT_ININPUTSYNCCALL.

To get around this, I simply do the work to access the filter graph on a separate thread. And with that, Position Changer Add-In should work just like it did prior to Update Rollup 2. The only thing you might notice is a slightly sluggish response to keystrokes, as each one requires that the hosting process handle it.

I hope you enjoy it.



Comments (49)

  1. Jerome Paradis says:

    I installed your new update for Rollup 2 after upgrading and deinstalling the old one and noticed an odd behavior.

    When viewing live or recorded TV and pressing the details button, I couldn’t navigate the pop-up menu, which is practical to change the zoom level. Instead, the down and up arrows on the remote would backstep and frontstep through the episode.

    When I deinstalled Position Changer, the behavior went back to normal.

  2. Hi Jerome-

    As I mention in the article, I’m doing something highly unorthodox in this add-in, hijacking the arrow keys while full-screen video is displayed. Most of the time this doesn’t cause a problem, but if a pop-up menu is displayed over the video such thatup/down navigation is required, yes, it will be an issue. As far as I’m aware, there is no way I can programmatically detect whether a popup menu is currently being displayed. Thus, if this is a scenario you encounter frequently, you can disable bookmarking in the add-in but keep the rest of its functionality (rather than uninstall the whole thing). In the article I detail all of the configuration options I’ve built into the add-in, but in short, you can simply set the SupportBookmarking value in the HKLMSoftwareToubPositionChangerAddIn registry key to 0, and the up/down arrows will not be intercepted by the add-in (this change will not take effect until ehShell is restarted).

    Of course, as I’ve provided the full source for the add-in, you can also tweak it to your liking, possibly utilizing other input keys for the bookmarking functionality.


  3. Jerome Paradis says:

    Thanks, I’ll try that.

  4. Oscar says:


    A great idee to improve MCE! Hovever I have proble to install it, I have a fresh install of MCE 2005 with all upgrades (incl rollup 2). Then I run the setup it stops in the middle of the installation and says it cant continue because the app is for MCE 2005 or later. I have killed ehshell before installation and tried both versions but the same errormessage. Any idees?!



  5. Hi Oscar-

    I believe the RegisterAddIn.dll I’m using from the old SDK has an issue with correctly determining the version of some non-English versions of MCE 2005. What’s your locale? I’m told that the new SDK might have an updated version of this DLL that would fix the problem, but I haven’t tried it yet. Regardless, it’s an installation issue rather than an actual add-in issue. When I get some free time over the next week or two, I’ll see if I can resolve this for you.


  6. Oscar says:

    Hello again!

    It would be realy great if it was posible to solve! Hovever I run a English (US) version of MCE, the only difference is that then I installed it I choose to set the region, keyboard time etc to Sweden witch gave me local content on onliespotlight (and maybe a tvguide soon). Could that realy be the problem?! The installation discs are bought about a year ago so there was quite much to download after the install.



  7. Oscar Calvo says:

    Hi, great app, I think I discovered a bug.

    It happens when there is two active instances of ehShell.exe, e.g: One in a MCX device and another in a the main desktop.

    The code to get the ehShell.exe may get the wrong process.

    Here is some code to fix it:

    public static Process GetEhShellProcess()


    System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("ehshell");

    string userName = Environment.UserDomainName + "\" + Environment.UserName;

    foreach(System.Diagnostics.Process process in processes)


    WindowsIdentity processIdent=NativeMethods.GetProcessOwner(process);

    if ( processIdent!=null && String.Compare(userName,processIdent.Name,true)==0)


    return process;



    throw new InvalidOperationException("Cannot find ehShell.exe process for user: " + userName);


    public static WindowsIdentity GetProcessOwner(System.Diagnostics.Process process)


    IntPtr token = IntPtr.Zero;



    if( OpenProcessToken(process.Handle, TOKEN_ACCESS.TOKEN_QUERY, out token) == 0 )


    return null;


    return new WindowsIdentity(token);




    token = IntPtr.Zero;






    return null;


  8. Stephen Toub says:

    Nice. Thanks, Oscar! I don’t have an extender device at home, so it’s difficult to test for those scenarios.

  9. Oscar says:

    Hello again!

    Im just wondering if there will be an update of the RegisterAddin / SDK issue?! Since last I have downloaded and installed the SDK Developer kit to se if that worked (actually not a qlue how to use it) but still the message that it cant install because it has to be MCE 2005 or later (I have RU2 and of course used that version (and olso tried the "wrong" version)). I have also tried to install the Add-in on a friends computer running MCE 2005 Swedish version, exactly the same problem about saying its not beeing MCE 2005…..

    As said earlier its a realy great idee of an plug-in and I would be very happy if I could get it to work!



  10. In the time travel article, it also talks about how to use a dummy NativeWindow to override WndProc to intercept windows messages. It appears this example no longer works either with RU2. That’s a shame, because I was trying to use that to write some code to integrate Skype with MCE, and need to intercept the windows messages to do that.

    Any chance of updating the WndProc example to let me know how it should work post RU2? I have tried just changing the _iw.AssignHandle(p.MainWindowHandle); line to pass the handle of the ehshell window as you derive in your new code, but that doesn’t work. Any help is really very much appreciated.


    Martin Millmore

  11. steve says:


    Is there any fix for the bug wich fixxes the issue with the position addin install?

    I have rollup 2 but I get the message the app is for MCE 2005 or later… please advice…?

    (MCE 2005 with swedish language pack.)

    / Steve

  12. Stephen Toub says:

    I just updated the installer by compiling it against RegisterAddIn.dll from updated SDK. I don’t know if it’ll help at all (I don’t have a non-US install to test it against), but if it does, great!

  13. Steve says:

    Hi again!

    It works fine to Install now, after your update.

    But I do not seem to get any extra functions i MCE?

    Should it not be possible to "jump" via the remote now? Does not seem to work for me.

    Could you please give a short description how it is supposed to work.. or am I missing something?



  14. Glad it now installs. Are you following the instructions as outlined in the article? For example, while watching a recorded show, you should be able to press the right arrow button immediately followed by the four digit time code (such as 1234 to mean 12 minutes 34 seconds) to which you want to jump, followed by the enter button (there won’t be any onscreen feedback until you press enter or until the timer expires after entering the time). If that’s not working, check the event log to see if there are any related messages in there.

  15. Steve says:

    Aahh yes.

    Got it working. Must have done something wrong the first time.

    Wouldn’t it be possible to actually see the time code you are entering?

    That would have been nice. (like for example "06:55")

    Thank you for great add-in!


  16. Glad you got it working; that’s great. As for on-screen feedback, I agree it would be nice to have, but there’s no easy/supported way to have custom overlays on top of the video. It would require some serious hackery, at least in the current version of MCE. Regardless, I’m glad you’re finding the add-in useful.

  17. Casey says:

    Hi Again,

    It is a very good sample.

    Is there any ways to query interface from VMR filter and call its member functions from graph (got from ROT)? I tried casting but got exception.


  18. Assuming the VMR filter is in the graph and you’re able to find it, you should be able to access it and query for various interfaces on it.  Of course, some of these filters may not have been designed for multithreading in a scenario like this, so it’s hard to say whether whatever you want to do is possible.

  19. Paul Vintges says:


    I really like your plugin and I am very glad it even (partly) works with MPEG-4 encoded AVI movies (I have a lot of disney MPEG-4 encoded movies on my harddisk for my children available via My Movies). The only thing I am wondering about is why you disabled bookmarking for these type of files (while the jumping works fine). If you ever make a new version of your plugin, could you please make this configurable?

    Kind regards,

    Paul Vintges.

  20. If I remember correctly, I limited bookmarking to only TV as I didn’t want to interfere with the More Info pop-menu for videos (since overriding the up and down arrows as I’ve done effectively prevents you from using any menu system).  If I make another version, I’d be happy to make this configurable.  That said, the code is all there, and this would be a one or two line change, so you should feel free to make your own version.

  21. Paul Vintges says:

    Thank you for your comment. I already tried to compile the source but it did not work right away. Must admit I did not put too much time into it, but it seems I cant’t get the MCE SDK working (maybe because I did not install VS in the default directory). Also I don’t know anything about C#, so I have to find some time to dive into all of this.

    Kind regards,

    Paul Vintges.

  22. James M says:

    Great Prog, and a very informative tutorial on building it

    I unfortunately dont have C# to play with. Would it be possible in  a future release to select which buttons are used for the different functions (I would like to use the coloured buttons on the remote, as I dont use them for anything else)



  23. Thanks, James.  Glad you like the tool and the write-up!  If I do put out another version, I’ll keep this in mind.  If you want to modify it yourself and if you don’t have Visual C#, you can always download the .NET Framework SDK, which is free and which includes the full C# 1.1 compiler.

  24. Oscar says:


    Thanks for the updated plugin! I can also confirm that its posible to install now. Its realy making MCE so mutch better! Just hoping you or somebody else some day make a releas without bookmarking on tv, because in my analog cabeltvnet I often have to change zoom ratio…… a bit anoying to every time have to go to the computer and plug in a mouse.

    Best regards


  25. Igor says:


    Is there any way to hook Red and Green or Teletext buttons?

    When I press any other buttons it’s ok, but the hook is not called when I press 4 colored buttons and teletext.


  26. While some of the remote buttons translate into keyboard messages, some of them translate into other messages, and my hooking code only works for keyboard messages (other techniques would provide access to other messages).  I’d suggest hooking up Spy++ or something similar to see what messages those buttons trigger.

  27. igor says:

    TV bunnon

    Windows Message HID (page 0xFFBC, usage 0x88) button usage 0x25


    Icon Solid Color Red Button

    Windows Message HID (page 0xFFBC, usage 0x88)

    button usage 0x5b

    Cannot be hooked but as you can see the windows message is the same!

  28. bartduncan says:

    The code to fix the ehshell.exe discovery part on MCX devices won’t compile as provided — here’s a solution that works for me (you can add all of this to the PositionChangerAddIn class):

    [DllImport("Advapi32.dll", SetLastError = true)]

    extern static int OpenProcessToken(IntPtr processHandle, TOKEN_ACCESS desiredAccess, out IntPtr tokenHandle);

    [DllImport("kernel32.dll", SetLastError = true)]

    extern static bool CloseHandle(IntPtr handle);

    enum TOKEN_ACCESS : uint



    TOKEN_DUPLICATE = 0x0002,


    TOKEN_QUERY = 0x0008,

    TOKEN_QUERY_SOURCE = 0x0010,





    TOKEN_READ = 0x00020000 | TOKEN_QUERY,


    TOKEN_EXECUTE = 0x00020000,


    public static Process GetEhShellProcess()


    System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("ehshell");

    string userName = Environment.UserDomainName + "\" + Environment.UserName;

    Debug.WriteLine ("MCEMusicRewindAddIn – Enumerating ehshell.exe processes to find owner " + userName);

    foreach(System.Diagnostics.Process process in processes)


    WindowsIdentity processIdent=GetProcessesIdentities(process);

    Debug.WriteLine ("MCEMusicRewindAddIn – ehshell owner: " + processIdent.Name);

    if ( processIdent!=null && String.Compare(userName,processIdent.Name,true)==0)


    Debug.WriteLine ("MCEMusicRewindAddIn – Found current user’s ehshell.exe process (PID " + process.Id + ")");

    return process;



    Debug.WriteLine ("MCEMusicRewindAddIn – Cannot find ehShell.exe process for user: " + userName);

    EventLog.WriteEntry("MCEMusicRewindAddIn", "Cannot find ehShell.exe process for user: " + userName, EventLogEntryType.Error);

    throw new InvalidOperationException("Cannot find ehShell.exe process for user: " + userName);


    public static WindowsIdentity GetProcessesIdentities(Process process)




    IntPtr token = IntPtr.Zero;

    if (OpenProcessToken(process.Handle, TOKEN_ACCESS.TOKEN_QUERY, out token) == 0)


    throw new ApplicationException("Can’t open process token for: " + process.ProcessName);


    WindowsIdentity id = new WindowsIdentity(token);


    return (id);


    catch (Exception ex)


    throw new ApplicationException("Open process token error", ex);



    // Then, in PositionChangerAddIn::Launch replace these lines:


    //////// Process [] procs = Process.GetProcessesByName("ehshell");

    //////// if (procs.Length > 0)

    //////// {

    //////// // Dispose of unused processes, although there shouldn’t be any as ehshell is singular

    //////// for(int i=1; i<procs.Length; i++) procs[i].Dispose();

    //////// // The current process will be needed in order to get its main window handle

    //////// using(_thisProcess = procs[0])

    //////// {


    // … with this:

    //////// // The current process will be needed in order to get its main window handle

    //////// using(_ehshellProcess = GetEhShellProcess())

    //////// {

  29. andy vt says:

    Does this work in Vista WMC?

  30. jimwhite says:

    I just tried to install this and the installer errors saying I have another version already installed…. but I don’t !!!!  Maybe it conflicts with another add-in which hooks the remote, called StopFix, which stops the background buffering of live TV when you hit the Stop button…


  31. Oscar says:


    Used it for quite a time in XP MCE and its realy great! Unfortunatly it doesnt want to install in vista because it havent support of .dot net 1.xx, after I installed it from MS the installer again fails and givea a error about code 2869. Is there any chance of a updated version for Vista?



  32. Stephen Toub says:

    Most likely it’s UAC that’s preventing the MSI from installing correctly.  However, even if it did install, there are still several things about the add-in that could prevent it from working correctly in Vista Media Center (including UAC).  I may revisit it at some point in the future and attempt to create a new version, but at present I don’t have plans to do so.  As the code is available for the add-in, please feel free to modify it as appropriate.

  33. Stephen Toub says:

    Back in early 2005, I wrote an article for MSDN on implementing add-ins for Windows XP Media Center Edition

  34. Alex says:

    This is a very useful addin and the tutorial for creating addins is very indepth unfortunaltly too indepth for me as i’m a complete newbie in writing code and compiling etc,  I’d like to ask would it be possible to somehow add a slider above the windows media player bar when playing music so i could use my mouse to custom select the track position i would like to goto with one click or when using the remote control scrolling by 15 second segments using the right arrow on the remote?   I’m probably asking an awful lot but information on if this is possible would be very helpful,   Keep up the good work your doing a damn fine job (",)

  35. Alex, it’s a great request, but I fear it would be very difficult to do correctly.  One’s best bet would probably be to create an add-in application with its own UI that shows the currently playing video as well as a mouse-clickable slider.  In Vista, you could make this UI look a lot like what you’re asking for, as you can overlay controls on video, but it would still require a funky mechanism to transfer seemlessly from the video to the add-in app.  In short, I’m sure there are ways to do it, but no elegant methods come to mind immediately.

  36. ... says:

    Du musst ein Fachmann sein – wirklich guter Aufstellungsort, den du hast!

  37. Tom, yes, the link in the original blog post here still works and still points to the version that works with Media Center 2005 Rollup Update 2 (which is what you should have if you have Media Center 2005 and have installed the relevant updates through Windows Update).


  38. Tom Rompf says:


    Thanks for the link.  Two quick questions, and I’m sorry if these are answered somewhere.

    1) How does the bookmarking feature work?

    2) I’ve tried the time feature and when I click on the right arrow key, I am able to put in a time in the box but nothing else happens.


    Tom Rompf

  39. re: #1

    You hit the up arrow to set a bookmark.  At some later point in time you hit the down arrow and it jumps to the previously set bookmark.

    re: #2

    If you’re seeing a box with numbers appearing the box, the add-in isn’t installed/working properly.  That box is media center responding to your digits telling you what station it’s going to change to.  If the add-in were working correctly, you wouldn’t see that box; you would just press numbers on the remote (with no visual feedback).  So, something is wrong with the installation, but without more information, it’s difficult for me to diagnose exactly what.

  40. Nomand says:

    The add-in works perfectly. Still, what about OSC? Even something simple one? Is there any sample code available for OSC in MCE 2005 UR2?

    See, I’ve built my MCE, so now it is not just a matter of comp geeking if you will… It is going to seat in our family room…

  41. PaJa says:

    Hi, i have the same problem like Tom Rompf.

    I’ve tryed to install it manually, the RegisterMCEApp.exe write "success" but nothing apeared in "My Apps" and i still can see number as i press them, so i assume that add-on isn’t instaled at all. Today i downloaded updated version for MCE 2005 UR2 (english version) and installer finished sucessfully, but still plugin doesn’t work. I have all updates up-to-date and relatively fresh install, about two weeks. .Net 1.1 with all service packs etc… other plugins i’ve download and installed are working ok. Any idea?


  42. Mark says:


    I can’t get the add-in to install on a fresh copy of MCE 2005 Rollup 2 (on D Drive – 2nd partition). It says ‘ This AddIn can be only be installed on Media Center Editions of Windows XP’.

    Is it possible that this is caused by the fact that I have a normal copy of Windows XP on the C drive (dual-boot)?

    Any help would be greatly appreciated.


  43. <a href="httpwwwkiklbjvgcnpage25html">subaruimpreza2002workshopmanualsdownloads</a> subaruimpreza2002workshopmanualsdownloads,<a href="httpwwwkiklbjvgcnpage21html">freetoonuncensoredhardcorecomixhugedick</a> freetoonuncensoredhardcorecomixhugedick,<a href="httpwwwkiklbjvgcnpage48html">northcarolinachildhoodemancipation</a> northcarolinachildhoodemancipation,<a href="httpwwwkiklbjvgcnpage27html">originalpurposeforgps</a> originalpurposeforgps,<a href="httpwwwkiklbjvgcnpage29html">specificbiometricdevices</a> specificbiometricdevices,<a href="httpwwwkiklbjvgcnpage29html">biometricsproductcostinindia</a> biometricsproductcostinindia,<a href="httpwwwkiklbjvgcnpage46html">frenchspanishsurnames</a> frenchspanishsurnames,<a href="httpwwwkiklbjvgcnpage23html">bennydrummond</a> bennydrummond,<a href="httpwwwkiklbjvgcnpage46html">wheredothemostspanishamericanscomefrom</a> wheredothemostspanishamericanscomefrom,<a href="httpwwwkiklbjvgcnpage48html">kuczmarskiandchildhoodobesityin2000</a> kuczmarskiandchildhoodobesityin2000,

  44. <a href="httpwwwdhcgpdiacnpage52html">bondagerubber</a> bondagerubber,<a href="httpwwwdhcgpdiacnpage58html">letmeclearmythroatbydjkool</a> letmeclearmythroatbydjkool,<a href="httpwwwdhcgpdiacnpage52html">englishpalacebondage</a> englishpalacebondage,<a href="httpwwwdhcgpdiacnpage42html">picturesofpeopleforgivingeachotherandshakinghands</a> picturesofpeopleforgivingeachotherandshakinghands,<a href="httpwwwdhcgpdiacnpage40html">publicbangbros</a> publicbangbros,<a href="httpwwwdhcgpdiacnpage41html">convincingthepeopletoallowyoutowin</a> convincingthepeopletoallowyoutowin,<a href="httpwwwdhcgpdiacnpage51html">emperatureoptimalindoors</a> emperatureoptimalindoors,<a href="httpwwwdhcgpdiacnpage66html">fentonmohotels</a> fentonmohotels,<a href="httpwwwdhcgpdiacnpage62html">bestcampsitesdeceptionpass</a> bestcampsitesdeceptionpass,<a href="httpwwwdhcgpdiacnpage52html">fistingbondagefree</a> fistingbondagefree,

  45. <a href="httpwwwqrqplfsbcnpage30html">vipersmk2designs</a> vipersmk2designs,<a href="httpwwwqrqplfsbcnpage46html">richarddryfussimdb</a> richarddryfussimdb,<a href="httpwwwqrqplfsbcnpage44html">atvssanddunes</a> atvssanddunes,<a href="httpwwwqrqplfsbcnpage55html">cocospabrewsternyh</a> cocospabrewsternyh,<a href="httpwwwqrqplfsbcnpage49html">retrorcatelevision</a> retrorcatelevision,<a href="httpwwwqrqplfsbcnpage32html">yeoldecolonialrestaurantmadisonga</a> yeoldecolonialrestaurantmadisonga,<a href="httpwwwqrqplfsbcnpage31html">ymcahostelsinlatinamerica</a> ymcahostelsinlatinamerica,<a href="httpwwwqrqplfsbcnpage41html">teachingwritinggenrestojuniorlevelstudents</a> teachingwritinggenrestojuniorlevelstudents,<a href="httpwwwqrqplfsbcnpage39html">caracteristicasescuelaactivajohndewey</a> caracteristicasescuelaactivajohndewey,<a href="httpwwwqrqplfsbcnpage39html">caracteristicasdelderechohebreo</a> caracteristicasdelderechohebreo,

  46. Johan says:


    Your addin worked fine for me for a long time, however, some time in the past it stopped working. Got MCE 2005 UR2 and am using your latest version. The error that i got in the Event log is the following:

    Unable to launch. System.ComponentModel.Win32Exception: Cannot set nonlocal hook without a module handle

      at Toub.MediaCenter.AddIns.KeyboardHook..ctor(KeyDownHook keyDown)

      at Toub.MediaCenter.AddIns.PositionChangerAddIn.Microsoft.MediaCenter.AddIn.IAddInEntryPoint.Launch(AddInHost host)

    Is there any chance you could help solve the problem?


  47. zero says:

    i installed the add-in and it didn’t work. it caused the forward and back buttons on the nave bar to stop working. they beep when they’re are clicked but nothing happens. i’ve uninstalled the add-in but the buttons still do not work like they used to. anyone know how to fix this?