Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I have a laptop with a USB to VGA adapter which allows me to add a third monitor to my laptop (the second monitor uses the onboard slot).

It worked fine on Windows Vista - you could go into Windows' display settings and Windows would recognize the third monitor and let you drag it around accordingly. With Windows 7, the third monitor literally is not there in Windows' display settings. The driver allows you to display to the third monitor, but you can't move where it is. The display settings are misplaced relative to my other two (if you drag windows over to it, they end up on the bottom when it should be aligned).

I called tech support and they said that there isn't a driver with this functionality for Windows 7 yet. But here's my hunch. The monitor placement is still somewhat similar to where I had it on Vista, it's just off about 500 pixels or so. I think there is either a registry key or driver file somewhere that is telling this monitor where to exist. If I could just modify the number and move it up 500 pixels, it would be in the right place and I don't have to wait 6 months for the company to come out with a new driver.

Any ideas?

share|improve this question

5 Answers 5

up vote 4 down vote accepted

Check out the various keys and folders in

HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\Video

Specifically in the innermost MonXXXXXXX sub-folders should be Attach.RelativeX and Attach.RelativeY values which are the monitors' location in relation to pixel 0,0.

Strangely when I check a Windows 7 machine here with two monitors, it doesn't seem to show the second monitor. But my XP machine shows all three of mine, so your mileage may vary.

If nothing else it's a place to start!

share|improve this answer
    
Great find! This is exactly they keys I was looking for. Modifying the relativeY value in two places and then restarting the extended desktop usb driver causes it to shift. Now here's the remaining problem: Because of the way the monitors are configured, I need to put in a NEGATIVE value. How would I do that? Putting in a positive value only puts the monitor I need even lower. Here is my setup: 2 3 1 Those are the monitor numbers (1 and 2 are touching and three is off to the side). Changing the attach.relativeY value makes 3 appear to go even lower, I want to raise it. –  dfree Feb 9 '10 at 21:45
    
looks like the formatting didn't keep there but hopefully you get the gist - 2 is above 1 and three is on the right of both of them, centered in between the two. Digitally, windows is placing it next to monitor 1. –  dfree Feb 9 '10 at 21:47
    
Waht happens when you try entering a negative value? In the end, you may have to rig a startup script to make the adjustment when you log in (if it's not going to stick on it's own). –  Ƭᴇcʜιᴇ007 Feb 10 '10 at 4:56
    
You can't enter a negative value, windows won't let you. In the hexidecimal part of the registry you can put numbers and letters and in the decimal portion you can only put numerical values. That 4 billion number I posted definitely works and sticks, I'm just not sure why. Maybe there is some sort of code in windows that means that the 429496xxxx denotes a negative number. The last 4 numbers correlate to the amount of pixel deslpacement beyond the negative. –  dfree Feb 11 '10 at 2:57
    
Sweeeeeeeet. ;) –  Ƭᴇcʜιᴇ007 Feb 11 '10 at 3:07

Instead of calculating negative values it may be easier to understand if you keep all values positive by making a logical 0,0 at the physical top left of a virtual box you would draw if you tried to surround all the monitors. Think like when you move a monitor up and left, that you are really pushing the others away to the right and down.

For example, I had 1280x1024 and 1920x1200 monitor with the first smaller one defaulting to the top right side of the second, not the bottom left of the first where it is physically positioned (left) and aligns-with (bottom edge is at same height, the top is lower of course because it's not as high).

So to start with the second 1920x1080 monitor was at position 0,0 and the first at 1920,0. Instead of trying to calculate negative -(1920 + 1280), (1200 - 1024) for the first monitor I just put the first monitor at all positive values 0,(1200 -1024) and the second at 1280, 0.

Logging off Windows then logging back on applied the settings for me. It's also useful to know that this works on Windows Hyper-V Server (I just did this on 2012 R2 which means these settings still work in Windows 8 and 8.1). That's really useful for people locked out of the screen resolution settings but trying to achieve a "bare metal" style host PC (you hardly ever have to update or reboot) and work purely with virtual machines inside via Remote Desktop (copy that from another machine).

Thanks to techie007 for the original answer, that was the key to work all this out. If you mark this variant useful don't forget to "up" his answer and the question too.

share|improve this answer

Subtract the amount you wish to make negative from 4294967296 to get the number you need for the registry. I.e., for 4294967296 - 250 = 4294967046.

For you geeks...

The annoyance here is due to the fact that the registry editor doesn't interpret the 32 bits as anything other than an unsigned decimal integer or a hexadecimal representation of binary data. However, when Windows retrieves that binary data when positioning your displays, it interprets it as a signed integer. In order for Windows to know that a 32-bit signed integer is negative, it sets the last bit to 1 (leftmost) and the rest of the bits are inverted. So -1 will have a binary value of 11111111 11111111 11111111 11111111 (hex: FF FF FF FF). If you translate that into an unsigned decimal integer (like the registry editor does), you get 4,294,967,295. So, for our purposes, 0 equates to 4,294,967,296 which you can simply add your negative number to in order to get the unsigned decimal integer you need that the registry editor saves in binary form and that the system will later interpret as a negatively-signed integer.

share|improve this answer

For anyone that is looking for the key in Windows 7 it is in one of the folders in:

HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\

Look for Position.cx and Position.cy in each of the subfolders; you have to edit the hex string.

Binary / decimal / hexadecimal converter:

http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html

share|improve this answer
1  
How do you tell which configuration is the active one? –  Adisak Jul 23 '12 at 16:09

I wish I knew why this worked but I know it does:

To get the monitor to go UP (because negatives aren't allowed by the registry), you have to use values for attach.relativeY like this: 4294967040

Thanks to this forum for helping figure out that part - http://www.ureader.com/msg/164488.aspx

If you change the last 4 digits of that number down, the monitor goes down and vice-versa. This will also work for attach.relativeX. A little tweaking and my setup was back to normal.

Who needs functional drivers pshh

share|improve this answer
    
and thanks to techie007 for getting me on the right path –  dfree Feb 10 '10 at 7:07
    
Sweet, do I get the 'correct answer' mark for pointing out the key? :) –  Ƭᴇcʜιᴇ007 Feb 10 '10 at 16:35
    
Can you do half a correct answer? lol –  dfree Feb 11 '10 at 2:54
    
Only if I can give you half a point for your open ended question. :) To me it seems you asked for "any ideas" on how you could fix it by using "a registry key or driver file somewhere" - I pointed out a registry key that you then used to set it. What more do you want? Blood? :) I guess I'll have to include negating 32-bit word hexadecimal number lessons in my next answer. ;) –  Ƭᴇcʜιᴇ007 Feb 11 '10 at 3:07

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.