ฉันจะย้อนกลับการเคลื่อนไหวของเมาส์ (แกน X & Y) ได้ทั่วทั้งระบบได้อย่างไร (Win 7 x64)


26

เวอร์ชั่นสั้น

ฉันกำลังมองหาวิธีที่จะย้อนกลับการเคลื่อนไหวของแกน X และ Y ของเมาส์ คอมพิวเตอร์กำลังใช้งาน Windows 7, x64 และ Logitech SetPoint 6.32 ฉันต้องการการแก้ไขระดับระบบอย่างถาวร เช่นการดัดแปลงไดรเวอร์เมาส์หรือปรับแต่งรีจิสตรี ไม่มีใครรู้วิธีที่มั่นคงในการดำเนินการนี้หรือวิธีการค้นหาค่ารีจิสทรีเพื่อเปลี่ยนแปลงนี้ ฉันจะตัดสินอย่างมีความสุขสำหรับวิธีการเปิดใช้งานคุณลักษณะการวางแนวใน SetPoint 6.32 สำหรับหนูและแทร็กบอล

รุ่นยาว คนดูเหมือนจะไม่เข้าใจว่าทำไมฉันถึงต้องการสิ่งนี้และฉันมักได้ยิน "แค่ใช้เม้าส์ขวาขึ้น!" คำแนะนำ Dyslexia ไม่ใช่สิ่งที่สามารถรักษาให้หายขาดได้ด้วยการ "อ่านสิ่งที่ถูกต้อง" ในขณะที่ฉันชื่นชมความพยายามช่วยเหลือฉันหวังว่าเบื้องหลังบางอย่างอาจช่วยให้ผู้คนเข้าใจ

ฉันมีผู้ใช้ที่มีรูปแบบผิดปกติของดิสเล็กเซียซึ่งการเคลื่อนไหวของเมาส์นั้นล้าหลัง หากเธอต้องการเลื่อนเคอร์เซอร์ไปทางซ้ายเธอจะเลื่อนเมาส์ไปทางขวา หากเธอต้องการเคอร์เซอร์เลื่อนขึ้นเธอจะเลื่อนเมาส์ลง เธอเคยใช้เม้าส์คว่ำลงซึ่งทำให้การคลิกยากเป็นเรื่องที่ยากมากสำหรับการยศาสตร์และทำให้เมาส์ที่ใช้ปุ่มหลายปุ่มไร้ประโยชน์อย่างสมบูรณ์

ในสมัยก่อนไดรเวอร์ของเมาส์ได้รวมคุณสมบัติการวางแนว (โดยทั่วไปคือบอลลูนอากาศร้อนที่คุณลากขึ้นเพื่อกำหนดทิศทางการเคลื่อนไหวของเมาส์) ซึ่งสามารถใช้เพื่อกำหนดความสัมพันธ์ระหว่างการเคลื่อนไหวของเมาส์และการเคลื่อนไหวของเคอร์เซอร์ หลายปีที่ผ่านมาไดรเวอร์เมาส์ได้รับการ "ปรับปรุง" และคุณสมบัตินี้ได้ถูก จำกัด เฉพาะแทร็กบอล

หลังจากที่สูญเสียฟีเจอร์การวางแนวเธอกลับไปที่การเตือนแบบคว่ำลงเล็กน้อยจนกระทั่งพบUberOptionsซึ่งเป็นบิดสำหรับLogitech SetPointซึ่งจะเปิดใช้งานคุณลักษณะทั้งหมดสำหรับอุปกรณ์ชี้ตำแหน่งทั้งหมด รวมคุณลักษณะการวางแนว และมีความยินดีอย่างมาก

ตอนนี้เม้าส์ของเธอเสียชีวิตแล้วและหนู Logitech ปัจจุบันต้องการ SetPoint เวอร์ชันใหม่ซึ่ง UberOptions ไม่ได้รับการอัพเดต เรายังได้เห็นMAF-Mouse (ผู้พัฒนาระบุว่าเวอร์ชั่นสำหรับ Windows 64 บิตยังไม่รองรับหนู USB) และSakasa (ในขณะที่ใช้งานได้ความเห็นบนเว็บระบุว่ามีแนวโน้มที่จะทำลายแบบสุ่มและบ่อยครั้งมันเป็นเพียง โปรแกรมกำลังทำงานอยู่ดังนั้นไม่ควรใช้ทั้งระบบ)

ฉันได้เห็นการแฮ็กรีจิสทรีที่ซับซ้อนมาก ตัวอย่างเช่นฉันเคยใช้แฮ็คซึ่งจะเปลี่ยนรหัสที่สร้างขึ้นโดยปุ่ม F1-F12 เมื่อมีการคิดค้นคีย์ F-Lock และตั้งค่าเริ่มต้นให้ใช้แป้นกดขึ้น ฉันหวังว่าจะมีวิธีพลิก X และ Y ในรีจิสทรี; หรืออื่น ๆ ที่คล้ายกันปรับระดับระบบออกมี

โซลูชันอื่นอาจเปิดใช้งานคุณลักษณะการวางแนวใหม่สำหรับหนูเช่นเดียวกับแทร็กบอล มันน่าผิดหวังมากที่ไดรเวอร์อุปกรณ์อินพุตมีฟังก์ชั่นที่เราต้องการอย่างยิ่งสำหรับความกังวลเกี่ยวกับการเข้าถึง แต่มันถูกปิดการใช้งานในนามของการทำให้ไดรเวอร์นั้นงี่เง่ามากขึ้น


คำถามเกี่ยวกับอิเล็กทรอนิคส์ของฉันสำหรับโซลูชันที่คำนึงถึงฮาร์ดแวร์: electronics.stackexchange.com/questions/29014/…
JYelton

1
FYI ฉันกำลังใช้งาน SetPoint เวอร์ชันล่าสุด (แม้ว่าจะใช้เมาส์ตัวเก่าที่มาพร้อมกับ SetPoint ที่ UberOptions รองรับโดยค่าเริ่มต้น) และ UberOptions ก็ยังใช้งานได้ คุณต้องเปลี่ยนโฟลเดอร์ SetPoint ด้วยตนเองเป็นโฟลเดอร์ที่ใช้ใน SetPoint 6 ( setpointP) ดูที่นี่ โดยส่วนตัวฉันหวังว่า Logitech จะจ้างนักพัฒนา UberOptions อยู่แล้ว SetPoint นั้นโหดเหี้ยมและทำให้คีย์บอร์ด / เมาส์ของพวกเขาไม่สามารถใช้งานได้โดยไม่ต้องใช้ uberOptions
Lèsemajesté

1
@ Lèsemajestéฉันเห็นด้วยอย่างสมบูรณ์เกี่ยวกับความต้องการ Logitech จะจ้าง UberOptions dev (s) ในขณะที่เธอใช้เมาส์ตัวเดิมของเธอทำงานตามที่คุณอธิบาย UberOptions ไม่สนับสนุนเม้าส์ทดแทน เห็นได้ชัดว่ามี SetPoint ที่แตกต่างกันอย่างสิ้นเชิงสำหรับเม้าส์เกมและเธอก็ติดอยู่กับปุ่มพิเศษทั้งหมดตั้งแต่สามารถหมุนเมาส์ไปมาและไปถึงพวกมันได้
Scivitri

คำตอบ:


18

ไม่พบสิ่งใดทางออนไลน์และฉันคิดว่าสิ่งนี้ไม่ควรทำยากเกินไปดังนั้นฉันจึงไปข้างหน้าและสร้างด้วยตัวเอง ต้องใช้Microsoft .NET Framework 4.0เพื่อที่จะทำงาน

Mouse Inverter ของพหุนาม (ฟรีแวร์ภายใต้ใบอนุญาต CC-BY-NC-SA) - ( Alt Link )

แจ้งให้เราทราบว่ามันได้ผลสำหรับคุณ :)


ขออภัยสิ่งนี้ใช้เวลานานมาก แต่นี่คือรหัสที่ทำให้เกิดการผกผัน:

internal class Inverter
{
    private Point pos = Cursor.Position;

    private bool invertX;

    private bool invertY;

    private bool running;

    private bool exit;

    public bool InvertX
    {
        get
        {
            return this.invertX;
        }
        set
        {
            this.invertX = value;
            if (this.InvertSettingsChanged != null)
            {
                this.InvertSettingsChanged(this, new EventArgs());
            }
        }
    }

    public bool InvertY
    {
        get
        {
            return this.invertY;
        }
        set
        {
            this.invertY = value;
            if (this.InvertSettingsChanged != null)
            {
                this.InvertSettingsChanged(this, new EventArgs());
            }
        }
    }

    public bool Running
    {
        get
        {
            return this.running;
        }
    }

    public Inverter(bool x, bool y)
    {
        this.invertX = x;
        this.invertY = y;
        this.pos = Cursor.Position;
    }

    private void MouseLoop()
    {
        Thread.CurrentThread.IsBackground = true;
        Thread.CurrentThread.Priority = ThreadPriority.Highest;
        while (!this.exit)
        {
            Point position = Cursor.Position;
            int right = (this.invertX ? this.pos.X - (position.X - this.pos.X) : position.X);
            if (this.invertX)
            {
                if (right < 2)
                {
                    right = 2;
                }
                if (right > Screen.FromPoint(position).Bounds.Right - 2)
                {
                    Rectangle bounds = Screen.FromPoint(position).Bounds;
                    right = bounds.Right - 2;
                }
            }
            int bottom = (this.invertY ? this.pos.Y - (position.Y - this.pos.Y) : position.Y);
            if (this.invertY)
            {
                if (bottom < 2)
                {
                    bottom = 2;
                }
                if (bottom > Screen.FromPoint(position).Bounds.Bottom - 2)
                {
                    Rectangle rectangle = Screen.FromPoint(position).Bounds;
                    bottom = rectangle.Bottom - 2;
                }
            }
            Cursor.Position = new Point(right, bottom);
            this.pos = Cursor.Position;
            Thread.Sleep(1);
        }
        this.exit = false;
    }

    public void Start()
    {
        this.pos = Cursor.Position;
        this.running = true;
        (new Thread(new ThreadStart(this.MouseLoop))).Start();
    }

    public void Stop()
    {
        this.running = false;
        this.exit = true;
    }

    public event EventHandler InvertSettingsChanged;
}

ฉันเพิ่งดึงสิ่งนี้ออกจากการปฏิบัติการด้วย Telerik JustDecompile เพราะฉันไม่มีรหัสดั้งเดิม คุณสามารถแยกโครงการ VS ทั้งหมดด้วย JD ได้หากคุณต้องการรหัสแอปพลิเคชันแบบเต็ม


1
ขอบคุณ! นั่นคือความพยายามมากกว่าที่ฉันคาดไว้! เราจะทดสอบและดูว่ามันทำงานอย่างไรสำหรับเธอ
Scivitri

ไม่มีปัญหา. มันไม่ยากเลยที่จะสร้าง หลังจากที่ฉันทำความสะอาดเล็กน้อยและเพิ่มคุณสมบัติพิเศษบางอย่างฉันจะปล่อยมันเป็นโอเพ่นซอร์ส
พหุนาม

มีโอกาสที่คุณจะปล่อยรหัสเมื่อเร็ว ๆ นี้ไหม? หรือคุณสามารถส่งจดหมายถึงฉันได้ไหม :)
เดิร์ค

เพียงขุดผ่านฮาร์ดดิสก์เก่าของฉัน แต่ดูเหมือนว่ารหัสนี้จะหายไป :( ถ้าฉันมีเวลาฉันจะย้อนกลับ - มันจะกลับมาจากการปฏิบัติการ
Polynomial

1
เพิ่มรหัส @remyabel Core แล้ว สามารถดึงที่เหลือออกได้ด้วย JustDecompile หากคุณต้องการ
พหุนาม

10

มีโปรแกรมชื่อว่าSakasaMouseที่ย้อนกลับการเคลื่อนไหวของเมาส์:

SakasaMouse เป็นฟรีแวร์เพื่อย้อนกลับทิศทางการเคลื่อนที่ของเคอร์เซอร์เมาส์ในแกน x และ / หรือแกน y

หากคุณเลื่อนเมาส์ไปทางขวาตัวชี้เมาส์จะเลื่อนไปทางซ้าย

มันใช้งานได้กับเมาส์ทุกตัวรวมถึงไร้สายใหม่ที่เพิ่งซื้อมา ปัญหาเดียวของมันคือมันมีแนวโน้มที่จะเปลี่ยนกลับโดยไม่มีการเตือนล่วงหน้าซึ่งอาจทำให้สับสนได้


หลังจากกลับเข้าสู่คอมพิวเตอร์ที่ล็อคอยู่เคอร์เซอร์ของเมาส์จะมองไม่เห็น การไปที่ถาดงานทำได้ยากเล็กน้อยเพื่อปิดแอป Windows 8.1
3071284

5

ฉันเป็นผู้เขียน MAFMouse และเป็นความจริงที่รุ่น x64 ยังไม่สามารถใช้งานได้กับเมาส์ USB (รุ่น 32 บิตไม่ได้!) ขณะนี้ฉันไม่ว่างที่จะทำงานกับสิ่งนี้

ดังนั้นข้อเสนอแนะของฉันคือใช้เมาส์ PS2 - มันใช้งานได้ดีมากและใช้งานได้ทั่วทั้งระบบแม้กระทั่งสำหรับเกม

ฉันมีผู้ใช้หลายคนที่ต้องใช้เมาส์หมุน 180 องศาก่อน (ด้วยสายเคเบิลชี้ไปที่ผู้ใช้) และพวกเขามีความสุขมากกับไดรเวอร์นี้ ที่น่าสนใจทั้งหมด แต่มีผู้หญิง :)

การติดตั้งใน Windows 7 ค่อนข้างซับซ้อนโปรดติดต่อฉันเพื่อขอรายละเอียด ...


ถ้ามันไม่ได้เป็นปัญหามากเกินไปก็จะทำให้คำตอบนี้มีประโยชน์มากขึ้นสำหรับผู้ใช้อื่น ๆ หากคุณสามารถโพสต์คำแนะนำหรือการเชื่อมโยงไปยังพวกเขาสำหรับการติดตั้งบน Windows 7
หมิ่นพระบรมเดชานุภาพ

1
เนื่องจากฉันไม่ได้เสนอรุ่นเบต้าสำหรับการดาวน์โหลดสาธารณะคำแนะนำในการติดตั้งเพียงอย่างเดียวก็ไม่ได้ช่วย :) มันซับซ้อนดังนั้นการสร้างคำแนะนำเหล่านั้นจะใช้งานได้และฉันต้องการทำให้ไดรเวอร์เสร็จ หากคุณต้องการความช่วยเหลือด้วยคำแนะนำยินดีต้อนรับ!
Moritz

1
@Moritz ขอขอบคุณที่มาที่ SE และเข้าร่วมการสนทนา! น่าเสียดายที่ฉันไม่คิดว่าเมนบอร์ดของเธอจะมีพอร์ต PS2 อีกต่อไป พวกมันล้าสมัยแล้ว นอกจากนี้เธอยังติดอยู่กับเม้าส์ปุ่ม - ปุ่มซึ่งมีแนวโน้มว่าจะเป็น USB เท่านั้น
Scivitri

พวกเขาจะคลิกปุ่มที่ตำแหน่งนั้นได้อย่างไร
phuclv

การอัปเดตที่สำคัญ: ฉันเป็นผู้เขียน MAFMouse และข้อ จำกัด ที่ 32 บิตได้หายไปแล้ว รองรับ x64 และลงไดรเวอร์ตอนนี้ดังนั้นการติดตั้งจึงง่ายกว่ามาก สามารถดาวน์โหลดได้ตามคำขอ (ปัจจุบันไม่มีการดาวน์โหลด) และใช้งานได้ดีมากและใช้งานได้ทั้งระบบแม้สำหรับเกม (เช่นการกลับแกน Y ทั่วไป) -Moritz
maf-soft

3

มีเม้าส์ invert mouse AHK ที่น่าสนใจ:

BlockInput Mouse
SetMouseDelay -1

MouseGetPos x0, y0
SetTimer WatchMouse, 1
Return

WatchMouse:
   MouseGetPos x, y
   MouseMove 2*(x0-x), 2*(y0-y), 0, R
   MouseGetPos x0, y0
Return

!z::ExitApp

ฉันได้รับจากที่นี่: https://autohotkey.com/board/topic/17828-invert-mouse-axis/

ในกรณีของคุณฉันจะตรวจสอบความเป็นไปได้ที่จะทำการดัดแปลง HW อย่างรวดเร็วเพื่อสลับแกนภายในเมาส์


0

ฉันก็เช่นกันการวางแนวเมาส์ของฉันกลับด้านและฉันเคยทำบน XP ด้วย Intellipoint 4 และเมาส์ PS2

ตั้งแต่ซื้อพีซี Win 7 มา Intellipoint 4 จะไม่ทำงานดังนั้นตอนนี้ฉันจึงใช้ Setpoint 4.8 ด้วยเมาส์ Logitech USB บนเว็บเพจ uberoptions หน้าจอจะแสดงรายการอุปกรณ์ที่รองรับ ดูเหมือนว่าไม่มีการพัฒนาใด ๆ เกิดขึ้นตั้งแต่ปี 2009 สำหรับเม้าส์ใหม่ดังนั้นคุณต้องหาเม้าส์ตัวเก่า M500 mouse ยังคงสามารถใช้งานได้อย่างอิสระ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.