UltraNav Middle Click Button & Scroll

Discussion in 'Lenovo' started by MidnightSun, Oct 6, 2009.

Thread Status:
Not open for further replies.
  1. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,668
    Messages:
    8,236
    Likes Received:
    230
    Trophy Points:
    231
    So up until now, I've been using my UltraNav middle-click button with "advanced features" disabled, meaning no magnification or scrolling use - this is because I always use the middle-click button to open a link in a new tab, navigate around Google Sketchup, and it's a handy button in general.

    However, I have recently tried out the TrackPoint scrolling along with the middle-click button's scrolling feature, and it's very useful. When I enable the feature, however, it uses clicks of the middle button as a toggle to turn the scrolling on or off, and does not allow middle-clicking of links anymore.

    I was wondering whether it is possible at all to use the TrackPoint scrolling along with the middle-click button?
     
  2. jaredy

    jaredy Notebook Virtuoso

    Reputations:
    793
    Messages:
    2,878
    Likes Received:
    1
    Trophy Points:
    56
    Smooth scrolling needs to be set. I use the middle button to scroll and to open and close tabs.
     
  3. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,668
    Messages:
    8,236
    Likes Received:
    230
    Trophy Points:
    231
    Ah, well smooth scrolling is just the conventional press-in-middle-button-on-mouse scroller thing. I prefer the standard scroller, the one with the small gray vertical bar with the mouse pointer. Any way to still use that along with the middle click function?

    Thanks for the answer though.
     
  4. godbreath

    godbreath Notebook Consultant

    Reputations:
    78
    Messages:
    143
    Likes Received:
    0
    Trophy Points:
    30
    what i did was, i set the the trackpoint middle button to the default scrolling
    then, i set a tap zone on the top left corner of the touchpad to act as the conventional middle click button. i then just have to move my right thumb 1 cm to tap the button to open links, and still have the trackpoint middle button scrolling
     
  5. MidnightSun

    MidnightSun Emodicon Super Moderator

    Reputations:
    6,668
    Messages:
    8,236
    Likes Received:
    230
    Trophy Points:
    231
  6. aznguyphan

    aznguyphan Notebook Evangelist

    Reputations:
    207
    Messages:
    517
    Likes Received:
    0
    Trophy Points:
    30
    Note sure if anyone still cares about this, but I wanted to do exactly what MidnightSun does and I have a sort of a working solution. It's a bit long winded and...improvised but it works.

    Basically I found a script on the Autohotkey forum that emulates a scroll wheel when you hold down a button and move in the x or y direction. The result was good, but it made the cursor jittery because the script tries to keep your cursor in its original place but it still allows for movement. So I solved this by hiding the cursor while scrolling (a work around to the work around...).

    If you just want to run a script exe then download the attachment, unzip it to a place of your preference and add a shortcut to it in your Startup folder.

    Install Steps (If you want to be able to edit the script):

    You need Autohotkey installed.

    Copy/paste code into .ahk file with Notepad.

    Code:
    $*MButton::
    
    Hotkey, $*MButton Up, MButtonup, off
    KeyWait, MButton, T0.2
    If ErrorLevel = 1
    {
    	Hotkey, $*MButton Up, MButtonup, on
    	MouseGetPos, ox, oy
     	SetTimer, WatchTheMouse, 1
    	SystemCursor("Toggle")
    }
    Else
    	Send {MButton}
    return
    
    MButtonup:
    Hotkey, $*MButton Up, MButtonup, off
    SetTimer, WatchTheMouse, off
    SystemCursor("Toggle")
    return
    
    WatchTheMouse:
    MouseGetPos, nx, ny
    dy := ny-oy
    dx := nx-ox
    If (dx**2 > 0 and dx**2>dy**2) ;edit 4 for sensitivity (changes sensitivity to movement)
    {
    	times := Abs(dy)/1 ;edit 1 for sensitivity (changes frequency of scroll signal)
    	Loop, %times%
    	{
    		If (dx > 0)
    			Click WheelRight
    		Else
    			Click WheelLeft
       	}
    }
    If (dy**2 > 0 and dy**2>dx**2) ;edit 0 for sensitivity (changes sensitivity to movement)
    {
    	times := Abs(dy)/1 ;edit 1 for sensitivity (changes frequency of scroll signal)
    	Loop, %times% 
    	{
    		If (dy > 0)
    			Click WheelDown
    		Else
    			Click WheelUp
    	}   
    }
    MouseMove ox, oy
    return
    
    SystemCursor(OnOff=1)   ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
    {
        static AndMask, XorMask, $, h_cursor
            ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors
            , b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13   ; blank cursors
            , h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13   ; handles of default cursors
        if (OnOff = "Init" or OnOff = "I" or $ = "")       ; init when requested or at first call
        {
            $ = h                                          ; active default cursors
            VarSetCapacity( h_cursor,4444, 1 )
            VarSetCapacity( AndMask, 32*4, 0xFF )
            VarSetCapacity( XorMask, 32*4, 0 )
            system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
            StringSplit c, system_cursors, `,
            Loop %c0%
            {
                h_cursor   := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% )
                h%A_Index% := DllCall( "CopyImage",  "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 )
                b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0
                    , "int",32, "int",32, "uint",&AndMask, "uint",&XorMask )
            }
        }
        if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
            $ = b  ; use blank cursors
        else
            $ = h  ; use the saved cursors
    
        Loop %c0%
        {
            h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 )
            DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% )
        }
    }
    Double click the file to run it, place it Startup folder so it runs all the time (works after standby/resume).

    Scrolling with the script is very sensitive, you can adjust it to your own preferences. I also opened Regedit, went to HKEY_CURRENT_USER\Control Panel\Desktop and changed WheelScrollLines to 1 (default is 3)

    Now you have the best of both worlds, middle clicking in any program, as well as scrolling in most places (I would say everywhere but I haven't tested enough).

    Sources:
    http://www.autohotkey.com/docs/commands/DllCall.htm#HideCursor
    http://www.autohotkey.com/forum/topic33712.html

    Edit: This is all with the middle button set to neither btw. Actually, if you have only a trackpoint and no touchpad (or no use for the touchpad), you can uninstall Lenovo's drivers and use the generic Windows Driver + Autohotkey to eliminate the extra process. Although Autohotkey is like 4 times the size of Daemon, still only 2mb.

    Further testing shows horizontal scrolling doesn't really work at all xD. Worked in notepad, presumably some other stuff...Not gonna worry about it, it was a perk anyway. Also hiding the cursor only seems to work on windows cursors, stuff like Foxit's hand and Firefox's magnifying class stay on the screen.
     

    Attached Files:

  7. elixiash

    elixiash Notebook Consultant

    Reputations:
    26
    Messages:
    144
    Likes Received:
    1
    Trophy Points:
    31
    Autohotkey huh? What a great find! Ive been trying to look for a Setpoint alternative and I think this may be it! :)
     
  8. aznguyphan

    aznguyphan Notebook Evangelist

    Reputations:
    207
    Messages:
    517
    Likes Received:
    0
    Trophy Points:
    30
    Never heard of Setpoint before. Did it serve the same purpose as this script? I imagine a driver from a large corporation would be a better solution than a random script off the internet xD. Why are you looking for a replacement?
     
  9. elixiash

    elixiash Notebook Consultant

    Reputations:
    26
    Messages:
    144
    Likes Received:
    1
    Trophy Points:
    31
    Setpoint (from Logitech if you really dont know:rolleyes:) is getting very bloated nowadays and I only need the functions of the extra buttons of my vx revolution mouse! Besides, Logitech dont listens anymore of complaints that their software messes a lot of stuffs!
     
  10. aznguyphan

    aznguyphan Notebook Evangelist

    Reputations:
    207
    Messages:
    517
    Likes Received:
    0
    Trophy Points:
    30
    Uploaded a Autohotkey compiled script in previous post, you no longer have to have Autohotkey installed unless you want to adjust the script for your own preference
    Updated the code so that horizontal scrolling works better...Did I say I wasn't going to worry about it? Well it was actually simple and with that attitude I wouldn't of had this script in the first place =D.

    Also made it so that it only either scrolls horizontally or vertically and not both at once, felt this was needed for control since my settings have it so sensitive to movement.

    Code:
    $*MButton::
    
    Hotkey, $*MButton Up, MButtonup, off
    KeyWait, MButton, T0.2
    If ErrorLevel = 1
    {
    	Hotkey, $*MButton Up, MButtonup, on
    	MouseGetPos, ox, oy
     	SetTimer, WatchTheMouse, 5
    	SystemCursor("Toggle")
    }
    Else
    	Send {MButton}
    return
    
    MButtonup:
    Hotkey, $*MButton Up, MButtonup, off
    SetTimer, WatchTheMouse, off
    SystemCursor("Toggle")
    return
    
    WatchTheMouse:
    MouseGetPos, nx, ny
    dy := ny-oy
    dx := nx-ox
    If (dx**2 > 0 and dx**2>dy**2) ;edit 4 for sensitivity (changes sensitivity to movement)
    {
    	times := Abs(dy)/1 ;edit 1 for sensitivity (changes frequency of scroll signal)
    	Loop, %times%
    	{
    		If (dx > 0)
    			Click WheelRight
    		Else
    			Click WheelLeft
       	}
    }
    If (dy**2 > 0 and dy**2>dx**2) ;edit 0 for sensitivity (changes sensitivity to movement)
    {
    	times := Abs(dy)/1 ;edit 1 for sensitivity (changes frequency of scroll signal)
    	Loop, %times% 
    	{
    		If (dy > 0)
    			Click WheelDown
    		Else
    			Click WheelUp
    	}   
    }
    MouseMove ox, oy
    return
    
    SystemCursor(OnOff=1)   ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
    {
        static AndMask, XorMask, $, h_cursor
            ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors
            , b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13   ; blank cursors
            , h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13   ; handles of default cursors
        if (OnOff = "Init" or OnOff = "I" or $ = "")       ; init when requested or at first call
        {
            $ = h                                          ; active default cursors
            VarSetCapacity( h_cursor,4444, 1 )
            VarSetCapacity( AndMask, 32*4, 0xFF )
            VarSetCapacity( XorMask, 32*4, 0 )
            system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
            StringSplit c, system_cursors, `,
            Loop %c0%
            {
                h_cursor   := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% )
                h%A_Index% := DllCall( "CopyImage",  "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 )
                b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0
                    , "int",32, "int",32, "uint",&AndMask, "uint",&XorMask )
            }
        }
        if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
            $ = b  ; use blank cursors
        else
            $ = h  ; use the saved cursors
    
        Loop %c0%
        {
            h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 )
            DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% )
        }
    }
    
     
Loading...
Similar Threads - UltraNav Middle Click
  1. ace111
    Replies:
    0
    Views:
    248
Thread Status:
Not open for further replies.

Share This Page