Mouse position: Difference between revisions

m
m (→‎{{header|Rust}}: Update to current Rust 0.9-pre syntax)
 
(92 intermediate revisions by 48 users not shown)
Line 1:
{{task|GUI}}
{{task|GUI}}[[Category:Testing]]Get the current location of the mouse cursor relative to the active window. Please specify if the window may be externally created.
[[Category:Testing]]
[[Category:Hardware]]
[[Category:Pointing devices]]
{{omit from|ACL2}}
{{omit from|AWK|Does not have an active window concept}}
{{omit from|Befunge|No mouse support}}
{{omit from|Brainf***}}
{{omit from|GolfScript}}
{{omit from|GUISS}}
{{omit from|Logtalk}}
{{omit from|Lotus 123 Macro Scripting}}
{{omit from|Maxima}}
{{omit from|ML/I}}
{{omit from|PARI/GP}}
{{omit from|PHP}}
{{omit from|PostScript}}
{{omit from|R}}
{{omit from|SQL PL|It does not handle GUI}}
{{omit from|TI-83 BASIC|Does not have a pointing device.}}
{{omit from|TI-89 BASIC|Does not have a pointing device.}}
{{omit from|UNIX Shell}}
{{omit from|ZX Spectrum Basic|Does not have a pointing device interface or windowing engine}}
 
;Task:
Get the current location of the mouse cursor relative to the active window.
 
Please specify if the window may be externally created.
<br><br>
 
=={{header|8086 Assembly}}==
This returns the mouse's horizontal position in CX and its vertical position in DX, assuming the mouse has been enabled first.
<syntaxhighlight lang="asm">mov ax,3
int 33h</syntaxhighlight>
 
=={{header|ActionScript}}==
This shows the mouse position in a text field at the bottom-right corner
and updates when the mouse is moved.
<syntaxhighlight lang="actionscript3">
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
public class MousePosition extends Sprite {
private var _textField:TextField = new TextField();
public function MousePosition() {
if ( stage ) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
_textField.autoSize = TextFieldAutoSize.RIGHT;
_textField.x = stage.stageWidth - 10;
_textField.defaultTextFormat = new TextFormat(null, 15);
_textField.text = "Mouse position: X = 0, Y = 0";
_textField.y = stage.stageHeight - _textField.textHeight - 14;
addChild(_textField);
addEventListener(Event.ENTER_FRAME, _onEnterFrame);
}
private function _onEnterFrame(e:Event):void {
_textField.text = "Mouse position: X = " + stage.mouseX + ", Y = " + stage.mouseY;
}
}
 
}
</syntaxhighlight>
 
=={{header|Ada}}==
{{libheader|GTK|GtkAda}}
Line 7 ⟶ 84:
{{libheader|GLib}}
 
The [[GTK]] procedure is Get_Pointer.
The [[GTK]] procedure is Get_Pointer. It returns mouse coordinates relatively to a window (internally created). The following program shows a button, which when pressed indicates coordinates of the mouse pointer relatively to the main window:
It returns mouse coordinates relatively to a window (internally created).
<lang Ada>with GLib; use GLib;
The following program shows a button, which when pressed indicates coordinates of the mouse pointer relatively to the main window:
<syntaxhighlight lang="ada">with GLib; use GLib;
with Gtk.Button; use Gtk.Button;
with Gtk.Label; use Gtk.Label;
Line 74 ⟶ 153:
Gtk.Main.Main;
end Tell_Mouse;</langsyntaxhighlight>
 
=={{header|AmigaBASIC}}==
 
<syntaxhighlight lang="amigabasic">MOUSE ON
 
WHILE 1
m=MOUSE(0)
PRINT MOUSE(1),MOUSE(2)
WEND</syntaxhighlight>
 
=={{header|AppleScript}}==
System Events can report the position of the currently active window. The mouse's location is retrieved with help from AppleScriptObjC. This will be relative to the bottom-left corner of the screen. Therefore, we also retrieve the screen's height.
 
<syntaxhighlight lang="applescript">use framework "AppKit"
 
tell application id "com.apple.SystemEvents" to tell ¬
(the first process where it is frontmost) to ¬
set {x, y} to the front window's position
 
tell the current application
set H to NSHeight(its NSScreen's mainScreen's frame)
tell [] & its NSEvent's mouseLocation
set item 1 to (item 1) - x
set item 2 to H - (item 2) - y
set coords to it as point
end tell
end tell
 
log coords</syntaxhighlight>
 
{{out}}
{187, 171}
 
=={{header|AutoHotkey}}==
WindowThe window may be an externally created window.
<langsyntaxhighlight AutoHotkeylang="autohotkey">#i:: ; (Optional) Assigns a hotkey to display window info, Windows+i
MouseGetPos, x, y ; Gets x/y pos relative to active window
WinGetActiveTitle, WinTitle ; Gets active window title
Traytip, Mouse position, x: %x%`ny: %y%`rWindow: %WinTitle%, 4 ; Displays the info as a Traytip for 4 seconds
return</langsyntaxhighlight>
 
===with DllCall===
Source: [https://github.com/jNizM/AHK_DllCall_WinAPI/ GetCursorPos @github] by jNizM
<syntaxhighlight lang="autohotkey">GetCursorPos()
{
static POINT, init := VarSetCapacity(POINT, 8, 0) && NumPut(8, POINT, "Int")
if (DllCall("User32.dll\GetCursorPos", "Ptr", &POINT))
{
return, { 0 : NumGet(POINT, 0, "Int"), 1 : NumGet(POINT, 4, "Int") }
}
}
GetCursorPos := GetCursorPos()
 
MsgBox, % "GetCursorPos function`n"
. "POINT structure`n`n"
. "x-coordinate:`t`t" GetCursorPos[0] "`n"
. "y-coordinate:`t`t" GetCursorPos[1]</syntaxhighlight>
Source: [https://github.com/jNizM/AHK_DllCall_WinAPI/ GetPhysicalCursorPos @github] by jNizM
<syntaxhighlight lang="autohotkey">GetPhysicalCursorPos()
{
static POINT, init := VarSetCapacity(POINT, 8, 0) && NumPut(8, POINT, "Int")
if (DllCall("User32.dll\GetPhysicalCursorPos", "Ptr", &POINT))
{
return, { 0 : NumGet(POINT, 0, "Int"), 1 : NumGet(POINT, 4, "Int") }
}
}
GetPhysicalCursorPos := GetPhysicalCursorPos()
 
MsgBox, % "GetPhysicalCursorPos function`n"
. "POINT structure`n`n"
. "x-coordinate:`t`t" GetPhysicalCursorPos[0] "`n"
. "y-coordinate:`t`t" GetPhysicalCursorPos[1]</syntaxhighlight>
 
=={{header|BBC BASIC}}==
The mouse coordinates are relative to the bottom-left corner of the BBC BASIC main output window:
of the BBC BASIC main output window:
<lang bbcbasic> MOUSE xmouse%, ymouse%, buttons%
<syntaxhighlight lang="bbcbasic"> PRINT MOUSE xmouse%, ymouse%</lang>, buttons%
PRINT xmouse%, ymouse%</syntaxhighlight>
 
=={{header|C}}==
{{libheader|Xlib}}
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <X11/Xlib.h>
 
Line 127 ⟶ 271:
(void)XCloseDisplay(d); /* and close the display */
return 0;
}</langsyntaxhighlight>
 
=={{header|C++}}==
Mouse pointers are part of the window manager system, and are therefore highly platform dependent.
 
This example works under a Windows operating system.
<syntaxhighlight lang="c++">
#include <iostream>
 
#include <windows.h>
 
int main() {
POINT MousePoint;
if ( GetCursorPos(&MousePoint) ) {
std::cout << MousePoint.x << ", " << MousePoint.y << std::endl;
}
}
</syntaxhighlight>
{{ out }}
<pre>
726, 506
</pre>
 
=={{header|c_sharp|C#}}==
Writes the absolute Mouse Position of the Screen into the Console
<langsyntaxhighlight lang="csharp">
using System;
using System.Windows.Forms;
Line 142 ⟶ 308:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="lisp">(let [point (.. java.awt.MouseInfo getPointerInfo getLocation)] [(.getX point) (.getY point)])</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
 
With the ltk library.
 
<syntaxhighlight lang="lisp">
(ql:quickload "ltk")
(in-package :ltk-user)
(defun motion (event)
(format t "~a x position is ~a~&" event (event-x event)))
 
(with-ltk ()
;; create a small window. Enter the mouse to see lots of events.
(bind *tk* "<Motion>" #'motion))
</syntaxhighlight>
This prints a lot of events of the form
 
 
#S(EVENT
:X 0
:Y 85
:KEYCODE ??
:CHAR ??
:WIDTH ??
:HEIGHT ??
:ROOT-X 700
:ROOT-Y 433
:MOUSE-BUTTON ??)
 
The <code>#S</code> indicates we get a structure, so we can access the x position with <code>(event-x event)</code>.
 
=={{header|Delphi}}==
Shows Mouse Positionmouse-position on a label on the form.
 
<langsyntaxhighlight Delphilang="delphi">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
lblMousePosition.Caption := ('X:' + IntToStr(X) + ', Y:' + IntToStr(Y));
end;</langsyntaxhighlight>
 
 
 
'''Delphi Console Program'''
 
The following program will help capture the mouse position with the help of Windows and classes units.
with the help of Windows and classes units.
 
<langsyntaxhighlight Delphilang="delphi">program Project1;
{$APPTYPE CONSOLE}
uses
Line 174 ⟶ 372:
sleep(300);
end
end.</langsyntaxhighlight>
 
=={{header|EasyLang}}==
 
[https://easylang.dev/show/#cod=y80vS1UwNFCwMODKz1PIzS8tTo3PBYpxKSgoJOekJhaBGClFieXpRZkpIHZJakUJVF2FgpqCEhCqQfmVXHpcXAA= Run it]
 
<syntaxhighlight>
move 10 80
on mouse_move
clear
drawgrid
text mouse_x & " " & mouse_y
.
</syntaxhighlight>
 
=={{header|EchoLisp}}==
When the '''plot''' library is loaded, the mouse position - relative to the plotting area coordinates, is displayed inside the info panel.
<syntaxhighlight lang="lisp">
(lib 'plot)
(plot-x-minmax 10) ; set logical dimensions of plotting area
(plot-y-minmax 100)
→ (("x" 0 10) ("y" 0 100))
;; press ESC to see the canvas
;; the mouse position is displayed as , for example, [ x: 5.6 y : 88.7]
;; 0 <= x <= 10, 0 <= y <= 100
</syntaxhighlight>
 
--[[User:Neo.abhinav|Neo.abhinav]] 17:00, 6 May 2011 (UTC)
 
=={{header|Elm}}==
<syntaxhighlight lang="elm">import Graphics.Element exposing (Element, show)
import Mouse
 
 
main : Signal Element
main =
Signal.map show Mouse.position</syntaxhighlight>
 
=={{header|Emacs Lisp}}==
For Emacs' own frames (which is what Emacs calls its window system windows), the frame the mouse is over and where the mouse is within that frame can be obtained with
the frame the mouse is over and where the mouse is within that frame can be obtained with
 
<langsyntaxhighlight Lisplang="lisp">(mouse-pixel-position)
;; => (FRAME . (X . Y))</syntaxhighlight>
=>
(FRAME . (X . Y))</lang>
 
Or <code>mouse-position</code> for characters instead of pixels. Works when the mouse is over any Emacs frame, not just when that frame is the active focused window.
Works when the mouse is over any Emacs frame, not just when that frame is the active focused window.
 
There's no particularly easy way to inquire about a non-Emacs focused window, only generic X11 or similar approaches run externally.
only generic X11 or similar approaches run externally.
 
=={{header|FactorERRE}}==
WorksThis onlyexample inprogram, thetaken graphicalfrom listener.distribution Replacesdisk, shows the textmouse position in thea buttontext field withat the relativebottom-right corner and absoluteupdates coordinates ofwhen the mouse is moved.
<syntaxhighlight lang="erre">
<lang factor>: replace-text ( button text -- )
!
[ drop children>> pop drop ] [ >label add-gadget drop ] 2bi;
! MOUSE WITH 'MOUSE.LIB' LIBRARY
: present-locations ( loc1 loc2 -- string )
!
[
 
first2 [ number>string ] bi@ "," glue
PROGRAM MOUSE
] bi@ ";" glue ;
 
: example ( -- ) "click me"
!$KEY
[
 
dup hand-rel ! location relative to the button
!$INCLUDE="PC.LIB"
hand-loc get ! location relative to the window
 
present-locations replace-text
!$INCLUDE="MOUSE.LIB"
]
 
<border-button> gadget. ;
PROCEDURE GETMONITORTYPE(->MONITOR$)
</lang>
!$RCODE="DEF SEG=0"
STATUS=PEEK($463)
!$RCODE="DEF SEG"
MONITOR$=""
IF STATUS=$B4 THEN
!$RCODE="STATUS=(INP(&H3BA) AND &H80)"
FOR DELAYLOOP=1 TO 30000 DO
!$RCODE="XX=((INP(&H3BA) AND &H80)<>STATUS)"
IF XX THEN MONITOR$="HERC" END IF
END FOR
IF MONITOR$="" THEN MONITOR$="MONO" END IF
ELSE
REGAX%=$1A00
EXECUTEASM($10)
IF (REGAX% AND $FF)=$1A THEN
MONITOR$="VGA"
ELSE
REGAX%=$1200 REGBX%=$10
EXECUTEASM($10)
IF (REGBX% AND $FF)=$10 THEN
MONITOR$="CGA"
ELSE
MONITOR$="EGA"
END IF
END IF
END IF
END PROCEDURE
 
BEGIN
INITASM
GETMONITORTYPE(->MONITOR$)
COLOR(7,0)
CLS
LOCATE(1,50) PRINT("MONITOR TYPE ";MONITOR$)
MOUSE_RESETANDSTATUS(->STATUS,BUTTONS)
IF STATUS<>-1 THEN
BEEP
CLS
PRINT("MOUSE DRIVER NOT INSTALLED OR MOUSE NOT FOUND")
REPEAT
GET(IN$)
UNTIL IN$<>""
ELSE
MOUSE_SETEXTCURSOR
MOUSE_SETCURSORLIMITS(8,199,0,639)
MOUSE_SETSENSITIVITY(30,30,50)
MOUSE_SHOWCURSOR
REPEAT
OLDX=X OLDY=Y
MOUSE_GETCURSORPOSITION(->X,Y,LEFT%,RIGHT%,BOTH%,MIDDLE%)
GET(IN$)
COLOR(15,0)
LOCATE(1,2)
PRINT("X =";INT(X/8)+1;" Y =";INT(Y/8)+1;" ";)
IF LEFT% THEN LOCATE(1,37) COLOR(10,0) PRINT("LEFT";) END IF
IF RIGHT% THEN LOCATE(1,37) COLOR(12,0) PRINT("RIGHT";) END IF
IF MIDDLE% THEN LOCATE(1,37) COLOR(14,0) PRINT("MIDDLE";) END IF
IF NOT RIGHT% AND NOT LEFT% AND NOT MIDDLE% THEN
LOCATE(1,37) PRINT(" ";)
END IF
IF NOT (X=OLDX AND Y=OLDY) THEN MOUSE_SHOWCURSOR END IF
UNTIL IN$=CHR$(27)
END IF
MOUSE_HIDECURSOR
CLS
END PROGRAM
</syntaxhighlight>
 
=={{header|F_Sharp|F#}}==
Have to do a lot of interop here.
Have to do a lot of interop here. Primarily because the active window may not be a .NET form/control. If the question was for the point relative to the current window, life would be much simpler.
Primarily because the active window may not be a .NET form/control.
<lang fsharp>open System.Windows.Forms
If the question was for the point relative to the current window,
life would be much simpler.
<syntaxhighlight lang="fsharp">open System.Windows.Forms
open System.Runtime.InteropServices
 
Line 229 ⟶ 533:
ScreenToClient(hwnd, &ptFs) |> ignore
ptFs
</syntaxhighlight>
</lang>
 
=={{header|Factor}}==
Works only in the graphical listener.
Replaces the text in the button with the relative and absolute coordinates of the mouse
<syntaxhighlight lang="factor">: replace-text ( button text -- )
[ drop children>> pop drop ] [ >label add-gadget drop ] 2bi ;
: present-locations ( loc1 loc2 -- string )
[
first2 [ number>string ] bi@ "," glue
] bi@ ";" glue ;
: example ( -- ) "click me"
[
dup hand-rel ! location relative to the button
hand-loc get ! location relative to the window
present-locations replace-text
]
<border-button> gadget. ;
</syntaxhighlight>
 
=={{header|FreeBASIC}}==
Also includes the state of the mouse wheel and mouse buttons, since these are provided by the same subroutine that provides the cursor position.
 
<syntaxhighlight lang="freebasic">
type MOUSE
'mouse position, button state, wheel state
x as integer
y as integer
buttons as integer
wheel as integer
end type
 
screen 12
 
dim as MOUSE mouse
 
while inkey=""
locate 1,1
getmouse(mouse.x, mouse.y, mouse.wheel, mouse.buttons)
if mouse.x < 0 then
print "Mouse out of window. "
print " "
print " "
else
print "Mouse position : ", mouse.x, mouse.y, " "
print "Buttons clicked: ";
print Iif( mouse.buttons and 1, "Left ", " " );
print Iif( mouse.buttons and 2, "Right ", " " );
print Iif( mouse.buttons and 4, "Middle ", " " )
print "Wheel scrolls: ", mouse.wheel," "
end if
wend</syntaxhighlight>
 
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
 
subclass window 1, @"Click somewhere in the window"
 
void local fn DoDialog( ev as long )
select ( ev )
case _windowMouseDown
CGPoint pt = fn EventLocationInWindow
cls : printf @"%.0fx, %.0fy",pt.x,pt.y
end select
end fn
 
on dialog fn DoDialog
 
HandleEvents
</syntaxhighlight>
 
=={{header|Gambas}}==
 
In gambas, the position of the pointer can only be determined when the click button is held down. A window with a drawing area is required, because this is the only widget that can track pointer movement within gambas.
when the click button is held down.
A window with a drawing area is required, because
this is the only widget that can track pointer movement within gambas.
 
<langsyntaxhighlight lang="gambas">
PUBLIC SUB Form1_MouseMove()
PRINT mouse.X
PRINT Mouse.Y
END
</syntaxhighlight>
</lang>
 
=={{header|Go}}==
{{libheader|RobotGo}}
<br>
The active window may be externally created.
<syntaxhighlight lang="go">package main
 
import (
"fmt"
"github.com/go-vgo/robotgo"
)
 
func isInside(x, y, w, h, mx, my int) bool {
rx := x + w - 1
ry := y + h - 1
return mx >= x && mx <= rx && my >= y && my <= ry
}
 
func main() {
name := "gedit" // say
fpid, err := robotgo.FindIds(name)
if err == nil && len(fpid) > 0 {
pid := fpid[0]
robotgo.ActivePID(pid) // make gedit active window
x, y, w, h := robotgo.GetBounds(pid)
fmt.Printf("The active window's top left corner is at (%d, %d)\n", x, y)
fmt.Printf("Its width is %d and its height is %d\n", w, h)
mx, my := robotgo.GetMousePos()
fmt.Printf("The screen location of the mouse cursor is (%d, %d)\n", mx, my)
if !isInside(x, y, w, h, mx, my) {
fmt.Println("The mouse cursor is outside the active window")
} else {
wx := mx - x
wy := my - y
fmt.Printf("The window location of the mouse cursor is (%d, %d)\n", wx, wy)
}
} else {
fmt.Println("Problem when finding PID(s) of", name)
}
}</syntaxhighlight>
 
{{out}}
A first run after placing mouse cursor inside active window:
<pre>
The active window's top left corner is at (547, 167)
Its width is 792 and its height is 506
The screen location of the mouse cursor is (949, 446)
The window location of the mouse cursor is (402, 279)
</pre>
A second run after moving mouse cursor outside active window:
<pre>
The active window's top left corner is at (547, 167)
Its width is 792 and its height is 506
The screen location of the mouse cursor is (334, 639)
The mouse cursor is outside the active window
</pre>
 
=={{header|Groovy}}==
Based on Java solution:
<langsyntaxhighlight lang="groovy">1.upto(5) {
Thread.sleep(1000)
def p = java.awt.MouseInfo.pointerInfo.location
println "${it}: x=${p.@x} y=${p.@y}"
}</langsyntaxhighlight>
 
Sample output:
Line 258 ⟶ 691:
 
=={{header|HicEst}}==
Mouse click positions for windows created internally. X and Y are in units of current xy axes (optional: invisible).
X and Y are in units of current xy axes (optional: invisible).
<lang hicest> WINDOW(WINdowhandle=handle)
<syntaxhighlight lang="hicest"> WINDOW(WINdowhandle=handle)
AXIS(WINdowhandle=handle, MouSeCall=Mouse_Callback, MouSeX=X, MouSeY=Y)
END
Line 265 ⟶ 699:
SUBROUTINE Mouse_Callback()
WRITE(Messagebox, Name) X, Y
END</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
In Icon/Unicon the mouse position may be tracked between button presses for any window created by the program. The following code snippet taken from the Icon Graphics Book on page 197-198 shows how to track the mouse.
The following code snippet taken from the Icon Graphics Book on page 197-198 shows how to track the mouse.
<lang Icon>until *Pending() > 0 & Event() == "q" do { # loop until there is something to do
<syntaxhighlight lang="icon">until *Pending() > 0 & Event() == "q" do { # loop until there is something to do
px := WAttrib("pointerx")
py := WAttrib("pointery")
Line 275 ⟶ 710:
WDelay(5) # wait and share processor
}
</syntaxhighlight>
</lang>
 
=={{header|Java}}==
{{works with|Java|1.5+}}
The mouse position can be checked at any time by calling
<langsyntaxhighlight lang="java5">Point mouseLocation = MouseInfo.getPointerInfo().getLocation();</langsyntaxhighlight>
This returns a point on the entire screen, rather than relative to a particular window. This call can be combined with <code>getLocation()</code> from any <code>Component</code> (including a <code>Frame</code>, which is a window) to get the location relative to that <code>Component</code>.
 
=={{header|JavaScript}}==
 
In a browser environment, it's impossible to actually get the cursor position at the specific moment. You must wait for user input (movement, click, etc). One of many ways to add an event listener:
at the specific moment.
You must wait for user input (movement, click, etc).
One of many ways to add an event listener:
 
<langsyntaxhighlight lang="javascript">document.addEventListener('mousemove', function(e){
var position = { x: e.clientX, y: e.clientY }
}</langsyntaxhighlight>
 
In the above example, the window may not be external. It must in fact be a web browser window, which runs the script.
It must in fact be a web browser window, which runs the script.
 
=={{header|Julia}}==
<syntaxhighlight lang="julia">using Gtk
 
const win = GtkWindow("Get Mouse Position", 600, 800)
const butn = GtkButton("Click Me Somewhere")
push!(win, butn)
 
callback(b, evt) = set_gtk_property!(win, :title, "Mouse Position: X is $(evt.x), Y is $(evt.y)")
signal_connect(callback, butn, "button-press-event")
 
showall(win)
 
c = Condition()
endit(w) = notify(c)
signal_connect(endit, win, :destroy)
wait(c)
</syntaxhighlight>
 
=={{header|Kotlin}}==
{{trans|Groovy}}
<syntaxhighlight lang="scala">// version 1.1.2
 
import java.awt.MouseInfo
 
fun main(args: Array<String>) {
(1..5).forEach {
Thread.sleep(1000)
val p = MouseInfo.getPointerInfo().location // gets screen coordinates
println("${it}: x = ${"%-4d".format(p.x)} y = ${"%-4d".format(p.y)}")
}
}</syntaxhighlight>
Sample output:
{{out}}
<pre>
1: x = 752 y = 483
2: x = 1112 y = 478
3: x = 1331 y = 511
4: x = 269 y = 562
5: x = 247 y = 505
</pre>
 
=={{header|Liberty BASIC}}==
This example gets the mouse position based on the active window. Click on other windows to get relative mouse position based on those windows.
Click on other windows to get relative mouse position based on those windows.
<lang lb> nomainwin
<syntaxhighlight lang="lb"> nomainwin
 
UpperLeftX = DisplayWidth-WindowWidth
Line 332 ⟶ 813:
y = point.y.struct
CursorPos$=x; ",";y
end function</langsyntaxhighlight>
 
=={{header|Lingo}}==
<syntaxhighlight lang="lingo">put _mouse.mouseLoc
-- point(310, 199)</syntaxhighlight>
 
=={{header|xTalk}}==
{{works with|HyperCard}} {{works with|LiveCode}}
<syntaxhighlight lang="livecode">
-- Method 1:
-- this script in either the stack script or the card script to get position relative to the current stack window
on mouseMove pMouseH,pMouseV
put pMouseH,pMouse
end mouseMove
 
-- Method 2:
-- this script can go anywhere to get current position relative to the current stack window
put mouseLoc()
 
-- Method 3:
-- this script can go anywhere to get current position relative to the current stack window
put the mouseLoc
 
-- Method 4:
-- this script can go anywhere to get current position relative to the current window
put the mouseH &","& the mouseV
 
To get the mousePosition relative to the current screen instead of relative to the current stack window use the screenMouseLoc keyword
example results:
117,394 -- relative to current window
117,394 -- relative to current window
117,394 -- relative to current window
148,521 -- relative to current screen
 
</syntaxhighlight>
 
=={{header|LiveCode Builder}}==
<syntaxhighlight lang="livecode builder">
LiveCode Builder (LCB) is a slightly lower level, strictly typed variant of LiveCode Script (LCS) used for making add-on extensions to LiveCode Script
 
-- results will be a point array struct like [117.0000,394.0000] relative to the current widget's view port
use com.livecode.widget -- include the required module
--- in your handler:
variable tPosition as Point -- type declaration, tPosition is a point array struct
put the mouse position into tPosition
variable tRect as Rectangle -- type declaration, tRect is a rect array struct, something like [0,1024,0,768]
put my bounds into tRect
if tPosition is within tRect then
log "mouse position is within the widget bounds"
end if
</syntaxhighlight>
 
=={{header|Logo}}==
<langsyntaxhighlight lang="logo">show mousepos ; [-250 250]</langsyntaxhighlight>
 
=={{header|MathematicaM2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
<lang Mathematica>MousePosition["WindowAbsolute"]</lang>
Module Checkit {
\\ works when console is the active window
\\ pressing right mouse button exit the loop
While mouse<>2
Print mouse.x, mouse.y
End While
\\ end of part one, now we make a form with title Form1 (same name as the variable name)
Declare Form1 Form
Layer Form1 {
window 16, 10000,8000 ' 16pt font at maximum 10000 twips x 8000 twips
cls #335522, 1 \\ from 2nd line start the split screen (for form's layer)
pen 15 ' white
}
Function Form1.MouseMove {
Read new button, shift, x, y ' we use new because call is local, same scope as Checkit.
Layer Form1 {
print x, y, button
refresh
}
}
Function Form1.MouseDown {
Read new button, shift, x, y
\\ when we press mouse button we print in console
\\ but only the first time
print x, y, button
refresh
}
\\ open Form1 as modal window above console
Method Form1, "Show", 1
Declare Form1 Nothing
}
CheckIt
</syntaxhighlight>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">MousePosition["WindowAbsolute"]</syntaxhighlight>
 
=={{header|MATLAB}}==
<syntaxhighlight lang MATLAB="matlab">get(0,'PointerLocation')</langsyntaxhighlight>
 
=={{header|MAXScript}}==
Creates a window on the screen and shows mouse position as it moves.
 
<syntaxhighlight lang="maxscript">
try destroydialog mousePos catch ()
 
rollout mousePos "Mouse position" width:200
(
label mousePosText "Current mouse position:" pos:[0,0]
label mousePosX "" pos:[130,0]
label mousePosSep "x" pos:[143,0]
label mousePosY "" pos:[160,0]
timer updateTimer interval:50 active:true
on updateTimer tick do
(
mousePosX.text = (mouse.screenpos.x as integer) as string
mousePosY.text = (mouse.screenpos.y as integer) as string
)
)
 
createdialog mousepos
</syntaxhighlight>
 
=={{header|MiniScript}}==
{{works with|Mini Micro}}
<syntaxhighlight lang="miniscript">print mouse.x, mouse.y</syntaxhighlight>
 
=={{header|Nanoquery}}==
<syntaxhighlight lang="nanoquery">import Nanoquery.Util.Windows
 
// a function to handle the mouse moved event
def mouse_moved($caller, $e)
println "(" + $e.getX() + ", " + $e.getY() + ")"
end
 
// create a window, set the handler for mouse moved, and show it
w = new("Window")
w.setSize(500, 500)
w.setHandler(w.mouseMoved, mouse_moved)
w.show()</syntaxhighlight>
 
=={{header|Nim}}==
{{libheader|gintro}}
<syntaxhighlight lang="nim">import gintro/[glib, gobject, gtk, gio]
import gintro/gdk except Window
 
#---------------------------------------------------------------------------------------------------
 
proc onButtonPress(window: ApplicationWindow; event: Event; data: pointer): bool =
echo event.getCoords()
result = true
 
#---------------------------------------------------------------------------------------------------
 
proc activate(app: Application) =
## Activate the application.
 
let window = app.newApplicationWindow()
window.setTitle("Mouse position")
window.setSizeRequest(640, 480)
 
discard window.connect("button-press-event", onButtonPress, pointer(nil))
 
window.showAll()
 
#———————————————————————————————————————————————————————————————————————————————————————————————————
 
let app = newApplication(Application, "Rosetta.MousePosition")
discard app.connect("activate", activate)
discard app.run()</syntaxhighlight>
 
{{out}}
Sample output:
<pre>(136.631591796875, 91.27691650390625)
(308.6276245117188, 148.8543090820312)
(387.9143676757812, 332.2145385742188)
(191.778076171875, 368.4205932617188)
(76.43170166015625, 418.7800903320312)
(298.4449462890625, 451.6014404296875)
(9.709716796875, 11.10366821289062)
(636.892333984375, 476.888671875)
(4.505615234375, 4.832611083984375)
(631.4815673828125, 5.864105224609375)
(6.33782958984375, 475.9739379882812)</pre>
 
=={{header|OCaml}}==
equivalent to the C example, uses the Xlib binding [http://wwwdecapode314.linux-nantesfree.orgfr/~fmonnier/OCamlocaml/Xlib/ ocaml-xlib]
<langsyntaxhighlight OCamllang="ocaml">open Xlib
 
let () =
Line 368 ⟶ 1,023:
 
xCloseDisplay d;
;;</langsyntaxhighlight>
 
 
=={{header|Octave}}==
To get the X,Y coordinates of N mouse clicks in the current figure, one can use this:
one can use this:
<lang Octave>[X, Y, BUTTONS] = ginput(N);</lang>
<syntaxhighlight lang="octave">[X, Y, BUTTONS] = ginput(N);</syntaxhighlight>
Example:
<pre>>> [X, Y, BUTTONS] = ginput(4)
Line 397 ⟶ 1,052:
2
</pre>
 
=={{header|Odin}}==
 
<syntaxhighlight lang="odin">package main
 
import "core:fmt"
import "vendor:sdl2"
 
main :: proc() {
using sdl2
 
window: ^Window = ---
renderer: ^Renderer = ---
event: Event = ---
 
Init(INIT_VIDEO)
CreateWindowAndRenderer(
640, 480,
WINDOW_SHOWN,
&window, &renderer
)
 
SetWindowTitle(window, "Empty window")
RenderPresent(renderer)
 
for event.type != .QUIT {
if event.type == .MOUSEMOTION {
using event.motion
fmt.printf("x=%d y=%d\n", x, y)
}
Delay(10)
PollEvent(&event)
}
 
DestroyRenderer(renderer)
DestroyWindow(window)
Quit()
}</syntaxhighlight>
 
=={{header|Oz}}==
Repeatedly shows the mouse coordinates relative to the foremost window of the application.
<langsyntaxhighlight lang="oz">declare
[QTk] = {Module.link ['x-oz://system/wp/QTk.ozf']}
WindowClosed = {NewCell false}
Line 420 ⟶ 1,113:
#", y: "#(Winfo.pointery - Winfo.rooty))}
{Delay 250}
end</langsyntaxhighlight>
 
=={{header|Pebble}}==
<syntaxhighlight lang="pebble">;mouse demonstration
;compile with Pebble
;for textmode x86 DOS
;requires mouse driver
 
program examples\mouse
 
use mouse.inc
 
data
 
int mousex[0]
int mousey[0]
int mouseb[0]
int speed[0]
int i[0]
 
begin
 
echo "Enter 1-200 for slow/DOS/emulated machines."
echo "Enter 500-20000 for faster/Windows machines."
input [speed]
 
cls
 
call showmouse
 
label mainloop
 
;clear mouse coordinates
 
cursor 0, 0
echo " "
echo " "
 
;get and display mouse coordinates
 
call readmouse
 
cursor 0, 0
echo [mousey]
crlf
echo [mousex]
 
;display exit button
 
cursor 76, 0
echo "[X]"
 
;check if exit button has been clicked
 
if [mouseb] = 1 & [mousex] >= 76 & [mousex] <= 79 & [mousey] = 0 then
 
kill
 
endif
 
;loop 100 times since some machines do not support the WAIT command
 
[i] = 0
 
label delay
 
+1 [i]
wait 1
 
if [i] < [speed] then delay
 
goto mainloop
 
end</syntaxhighlight>
 
=={{header|Perl}}==
==={{libheader|Perl/SDL}}===
The following code will use the SDL module, a wrapper for the libSDL C-library. When you move the mouse over the created window, the mouse position get printed and the program terminates.
The following code will use the SDL module, a wrapper for the libSDL C-library.
<lang Perl>use SDL;
When you move the mouse over the created window,
the mouse position get printed and the program terminates.
<syntaxhighlight lang="perl">use SDL;
use SDL::Events;
use SDLx::App;
Line 437 ⟶ 1,206:
} );
$app->run;
</syntaxhighlight>
</lang>
{{out}}
Output:
<pre>x=15 y=304</pre>
 
=={{header|Phix}}==
The following example shows three labels being updated with the mouse position.<br>
The globalmotion label is updated whenever the mouse moves anywhere within the window, but not outside it.<br>
The canvasmotion label is updated whenever the mouse moves within the canvas, but not elsewhere in the window (or beyond).<br>
The timer label is updated every three seconds and gets mouse positions anywhere on the whole screen, whether it moves or not.<br>
Note that canvasmotion coordinates are relative to the top left of the canvas, whereas the other two are absolute.
{{libheader|Phix/pGUI}}
<syntaxhighlight lang="phix">-- demo\rosetta\Mouse_position.exw
include pGUI.e
 
Ihandle global_lbl, canvas_lbl, timer_lbl
 
function globalmotion_cb(integer x, integer y, atom /*pStatus*/)
IupSetStrAttribute(global_lbl,"TITLE","globalmotion_cb %d, %d",{x,y})
return IUP_DEFAULT
end function
 
function canvas_motion_cb(Ihandle /*canvas*/, integer x, integer y, atom pStatus)
IupSetStrAttribute(canvas_lbl,"TITLE","canvasmotion_cb %d, %d",{x,y})
return IUP_DEFAULT;
end function
 
function OnTimer(Ihandle /*ih*/)
integer {x,y} = IupGetIntInt(NULL,"CURSORPOS")
IupSetStrAttribute(timer_lbl,"TITLE","timer %d, %d",{x,y})
return IUP_IGNORE
end function
 
procedure main()
Ihandle separator1, separator2,
canvas, frame_1, frame_2,
dialog
 
IupOpen()
 
global_lbl = IupLabel("Move the mouse anywhere on the window","EXPAND=HORIZONTAL")
separator1 = IupLabel(NULL,"SEPARATOR=HORIZONTAL")
canvas_lbl = IupLabel("Move the mouse anywhere on the canvas","EXPAND=HORIZONTAL")
separator2 = IupLabel(NULL,"SEPARATOR=HORIZONTAL")
timer_lbl = IupLabel("This one runs on a three second timer","EXPAND=HORIZONTAL")
 
frame_1 = IupFrame(IupVbox({global_lbl,
separator1,
canvas_lbl,
separator2,
timer_lbl}),
"TITLE=IupLabel, SIZE=200x")
 
canvas = IupCanvas("MOTION_CB", Icallback("canvas_motion_cb"),
"EXPAND=HORIZONTAL, RASTERSIZE=200x200")
frame_2 = IupFrame(canvas, "TITLE=IupCanvas")
 
dialog = IupDialog(IupHbox({frame_1,frame_2}, "MARGIN=5x5, GAP=5"))
IupSetAttribute(dialog,"TITLE","Mouse motion");
 
IupSetGlobal("INPUTCALLBACKS", "Yes");
IupSetGlobalFunction("GLOBALMOTION_CB", Icallback("globalmotion_cb"));
 
Ihandle hTimer = IupTimer(Icallback("OnTimer"), 3000)
 
IupShow(dialog)
 
IupMainLoop()
IupClose()
end procedure
main()</syntaxhighlight>
 
=={{header|PicoLisp}}==
The following works in an XTerm window. After calling (mousePosition), click
After calling (mousePosition), click
into the current terminal window. The returned value is (X . Y), where X is the
into the current terminal window.
The returned value is (X . Y), where X is the
column and Y the line number.
<langsyntaxhighlight PicoLisplang="picolisp">(de mousePosition ()
(prog2
(prin "^[[?9h") # Mouse reporting on
Line 456 ⟶ 1,294:
(- (char (key)) 32)
(- (char (key)) 32) ) )
(prin "^[[?9l") ) ) # Mouse reporting off</langsyntaxhighlight>
{{out}}
Output:
<pre>: (mousePosition)
-> (7 . 3)</pre>
 
=={{header|PureBasic}}==
The mouse position can be obtained by these two commands.:
<langsyntaxhighlight PureBasiclang="purebasic">x = WindowMouseX(#MyWindow)
y = WindowMouseY(#MyWindow)</langsyntaxhighlight>
This example repeatedly shows the mouse coordinates relative to the window created in the application.
relative to the window created in the application.
<lang PureBasic>#MyWindow = 0
<syntaxhighlight lang="purebasic">#MyWindow = 0
#Label_txt = 0
#MousePos_txt = 1
Line 485 ⟶ 1,324:
SetGadgetText(#MousePos_txt,"(" + Str(x) + "," + Str(y) + ")")
ForEver
EndIf</langsyntaxhighlight>
 
=={{header|Processing}}==
<syntaxhighlight lang="java">void setup(){
size(640, 480);
}
 
void draw(){
// mouseX and mouseY provide the current mouse position
ellipse(mouseX, mouseY, 5, 5); // graphic output example
println("x:" + mouseX + " y:" + mouseY);
}</syntaxhighlight>
 
==={{header|Processing Python mode}}===
<syntaxhighlight lang="python">def setup():
size(640, 480)
 
def draw():
# mouseX and mouseY provide the current mouse position
ellipse(mouseX, mouseY, 5, 5) # graphic output example
println("x:{} y:{}".format(mouseX, mouseY))</syntaxhighlight>
 
=={{header|Python}}==
 
{{libheader|Python Tkinter module (Tk 8.5)}}
 
Mouse position using Tkinter graphics library nearly universally included in installations of Python. There is other alternatives but they are platform specific. Shows position of mouse while it is over the program windows and changes color of window when mouse is near (<10) hot spot 100,100.
There are other alternatives but they are platform specific. <br>
Shows position of mouse while it is over the program windows and
changes color of window when mouse is near (<10) hot spot 100,100.
 
Code is based on post in Daniweb: http://www.daniweb.com/forums/post616327.html#post616327 by ZZucker
<langsyntaxhighlight lang="python">
import Tkinter as tk
 
Line 513 ⟶ 1,376:
 
root.mainloop()
</syntaxhighlight>
</lang>
----------------
***********************************************************************************
<langsyntaxhighlight lang="python">
#simple way of ,get cursor xy data
 
#niwantha33@gmail.com
from Tkinter import *
win=Tk()
Line 529 ⟶ 1,392:
win.bind("<Motion>",xy)
mainloop()
</syntaxhighlight>
</lang>
 
=={{header|Scala}}==
[[Category:Scala Implementations]]
{{libheader|Scala}}
<lang scala>import java.awt.MouseInfo
 
object MousePosition extends App {
val mouseLocation = MouseInfo.getPointerInfo().getLocation()
println (mouseLocation)
}</lang>
=={{header|Racket}}==
 
The mouse position can be queried at any time with a function in a GUI context.
 
<langsyntaxhighlight lang="racket">
#lang racket/gui
(define-values [point _] (get-current-mouse-state))
(send point get-x)
(send point get-y)
</syntaxhighlight>
</lang>
 
=={{header|RetroRaku}}==
(formerly Perl 6)
This requires running Retro on a VM with support for the ''canvas'' device.
{{works with|rakudo/jvm|2013-12-03}}
<syntaxhighlight lang="raku" line>use java::awt::MouseInfo:from<java>;
 
given MouseInfo.getPointerInfo.getLocation {
<lang Retro>needs canvas'
say .getX, 'x', .getY;
^canvas'mouse</lang>
}</syntaxhighlight>
 
An implementation that will work on any X11 windowing system. Reports mouse position, window ID# and window name for whichever window the mouse pointer is over. Automatically moves mouse for hands-off testing purposes.
 
{{works with|Rakudo|2018.11}}
<syntaxhighlight lang="raku" line>use X11::libxdo;
my $xdo = Xdo.new;
 
my ($dw, $dh) = $xdo.get-desktop-dimensions( 0 );
 
sleep .25;
 
for ^$dw -> $mx {
my $my = (($mx / $dh * τ).sin * 500).abs.Int + 200;
$xdo.move-mouse( $mx, $my, 0 );
my ($x, $y, $window-id, $screen) = $xdo.get-mouse-info;
my $name = (try $xdo.get-window-name($window-id) if $window-id)
// 'No name set';
 
my $line = "Mouse location: x=$x : y=$y\nWindow under mouse:\nWindow ID: " ~
$window-id ~ "\nWindow name: " ~ $name ~ "\nScreen #: $screen";
 
print "\e[H\e[J", $line;
sleep .001;
}
 
say '';</syntaxhighlight>
 
=={{header|Ring}}==
 
In the next example the user can move a label using the mouse
The movement procedure uses the mouse position information
 
<syntaxhighlight lang="ring">
Load "guilib.ring"
 
lPress = false
nX = 0
nY = 0
 
new qApp {
 
win1 = new qWidget()
{
 
setWindowTitle("Move this label!")
setGeometry(100,100,400,400)
setstylesheet("background-color:white;")
 
Label1 = new qLabel(Win1){
setGeometry(100,100,200,50)
setText("Welcome")
setstylesheet("font-size: 30pt")
myfilter = new qallevents(label1)
myfilter.setEnterevent("pEnter()")
myfilter.setLeaveevent("pLeave()")
myfilter.setMouseButtonPressEvent("pPress()")
myfilter.setMouseButtonReleaseEvent("pRelease()") myfilter.setMouseMoveEvent("pMove()")
installeventfilter(myfilter)
}
 
show()
}
 
exec()
}
 
Func pEnter
Label1.setStyleSheet("background-color: purple; color:white;font-size: 30pt;")
 
Func pLeave
Label1.setStyleSheet("background-color: white; color:black;font-size: 30pt;")
 
Func pPress
lPress = True
nX = myfilter.getglobalx()
ny = myfilter.getglobaly()
 
Func pRelease
lPress = False
pEnter()
 
Func pMove
nX2 = myfilter.getglobalx()
ny2 = myfilter.getglobaly()
ndiffx = nX2 - nX
ndiffy = nY2 - nY
if lPress
Label1 {
move(x()+ndiffx,y()+ndiffy)
setStyleSheet("background-color: Green;
color:white;font-size: 30pt;")
nX = nX2
ny = nY2
}
ok
</syntaxhighlight>
 
=={{header|Ruby}}==
Line 561 ⟶ 1,514:
{{libheader|Shoes}}
 
<langsyntaxhighlight Rubylang="ruby">Shoes.app(:title => "Mouse Position", :width => 400, :height => 400) do
@position = para "Position : ?, ?", :size => 12, :margin => 10
Line 567 ⟶ 1,520:
@position.text = "Position : #{x}, #{y}"
end
end</langsyntaxhighlight>
 
=={{header|Rust}}==
Prints current location of the mouse cursor relative to any active window.
This example relies on the Windows API.
<syntaxhighlight lang="rust">// rustc 0.9 (7613b15 2014-01-08 18:04:43 -0800)
<lang Rust>// rust 0.9-pre
 
use std::libc::types::os::arch::extra::{BOOL, HANDLE, LONG};
use std::ptr::mut_null;
 
type LONG = i32;
type HWND = HANDLE;
 
Line 588 ⟶ 1,540:
#[link_name = "user32"]
extern "system" {
pub fn GetCursorPos(lpPoint:&mut POINT) -> BOOL;
pub fn GetForegroundWindow() -> HWND;
pub fn ScreenToClient(hWnd:HWND, lpPoint:&mut POINT);
}
 
Line 609 ⟶ 1,561:
}
}
}</langsyntaxhighlight>
{{out}}
Sample output:
<pre>x: 550, y: 614
x: 650, y: 248
Line 618 ⟶ 1,570:
x: 0, y: 0
^C</pre>
 
=={{header|Scala}}==
 
{{libheader|Scala}}<syntaxhighlight lang="scala">import java.awt.MouseInfo
object MousePosition extends App {
val mouseLocation = MouseInfo.getPointerInfo.getLocation
println (mouseLocation)
}</syntaxhighlight>
 
=={{header|Seed7}}==
The functions [http://seed7.sourceforge.net/libraries/graph.htm#pointerXPos%28in_PRIMITIVE_WINDOW%29 pointerXPos]
and [http://seed7.sourceforge.net/libraries/graph.htm#pointerYPos%28in_PRIMITIVE_WINDOW%29 pointerYPos] from the
[http://seed7.sourceforge.net/libraries/graph.htm graph.s7i] library determine the actual X and Y position of the mouse pointer, relative to the given window:
<syntaxhighlight lang="seed7">xPos := pointerXPos(curr_win);
the mouse pointer, relative to the given window:
<lang seed7>xPosyPos := pointerXPospointerYPos(curr_win);</syntaxhighlight>
 
yPos := pointerYPos(curr_win);</lang>
=={{header|Smalltalk}}==
Sending the message <tt>position</tt> to the <tt>activeHand</tt> of the <tt>World</tt> returns a <tt>Point</tt> object:
 
<syntaxhighlight lang="smalltalk">
World activeHand position. " (394@649.0)"
</syntaxhighlight>
 
=={{header|Standard ML}}==
Works with PolyML
<syntaxhighlight lang="standard ml">open XWindows ;
val dp = XOpenDisplay "" ;
val w = XCreateSimpleWindow (RootWindow dp) origin (Area {x=0,y=0,w=400,h=300}) 3 0 0xffffff ;
XMapWindow w;
val (focus,_)=( Posix.Process.sleep (Time.fromReal 2.0); (* time to move from interpreter + activate arbitrary window *)
XGetInputFocus dp
) ;
XQueryPointer focus ;
XQueryPointer w;</syntaxhighlight>
result: position wrt root window and active window, resp wrt root window and window w
val it =
(true, Drawable, Drawable, XPoint {x = 1259, y = 979},
XPoint {x = 236, y = 105}, []):
bool * Drawable * Drawable * XPoint * XPoint * Modifier list
val it =
(true, Drawable, Drawable, XPoint {x = 1259, y = 979},
XPoint {x = 1056, y = 817}, []):
bool * Drawable * Drawable * XPoint * XPoint * Modifier list
 
=={{header|Tcl}}==
{{libheader|Tk}}
<langsyntaxhighlight lang="tcl">package require Tk 8.5
set curWindow [lindex [wm stackorder .] end]
# Everything below will work with anything from Tk 8.0 onwards
set x [expr {[winfo pointerx .] - [winfo rootx $curWindow]}]
set y [expr {[winfo pointery .] - [winfo rooty $curWindow]}]
tk_messageBox -message "the mouse is at ($x,$y) in window $curWindow"</langsyntaxhighlight>
 
 
screen coordinates
<syntaxhighlight lang="tcl">package require Tk
puts "monitor/display coordinate x = [winfo pointerx .]"</syntaxhighlight>
 
=={{header|Uxntal}}==
<syntaxhighlight lang="Uxntal">|00 @System &vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1
|10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &scrollx $2 &scrolly $2
 
|0100
;on-mouse .Mouse/vector DEO2
BRK
 
@on-mouse
.Mouse/x DEI2 print-hex2
#20 .Console/write DEO
.Mouse/y DEI2 print-hex2
#0a .Console/write DEO
BRK
 
@print-hex
DUP #04 SFT print-digit #0f AND print-digit
JMP2r
 
@print-hex2
SWP print-hex print-hex
JMP2r
 
@print-digit
DUP #09 GTH #27 MUL ADD #30 ADD .Console/write DEO
JMP2r</syntaxhighlight>
 
=={{header|Vala}}==
<syntaxhighlight lang="vala">// GTK 4
public class Example : Gtk.Application {
public Example() {
Object(application_id: "my.application",
flags: ApplicationFlags.FLAGS_NONE);
activate.connect(() => {
var window = new Gtk.ApplicationWindow(this);
var box = new Gtk.Box(Gtk.Orientation.VERTICAL, 20);
var button = new Gtk.Button.with_label("Get Cursor Position");
button.clicked.connect((a) => {
double x, y;
var device_pointer= window.get_display().get_default_seat().get_pointer();
window.get_surface().get_device_position(device_pointer, out x, out y, null);
label.set_text(x.to_string() + "," + y.to_string());
});
box.append(label);
box.append(button);
window.set_child(box);
window.present();
});
}
public static int main(string[] argv) {
return new Example().run(argv);
}
}</syntaxhighlight>
 
=={{header|Visual Basic}}==
There are two methods for determining where the mouse pointer is.
There are two methods for determining where the mouse pointer is. The first only works when the pointer is actually over the window containing the code. This actually works for any control that has a MouseMove event, but it doesn't work if the pointer is over ''anything else'', including controls on the form (so if the pointer is over a button on the current form, the event will only fire for the button, ''not'' the form).
The first only works when the pointer is actually over the window containing the code.
<lang vb>Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
This actually works for any control that has a MouseMove event,
but it doesn't work if the pointer is over ''anything else'',
including controls on the form
(so if the pointer is over a button on the current form,
the event will only fire for the button, ''not'' the form).
<syntaxhighlight lang="vb">Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'X and Y are in "twips" -- 15 twips per pixel
Me.Print "X:" & X
Me.Print "Y:" & Y
End Sub</langsyntaxhighlight>
 
The second method uses the [[wp:Windows API|Windows API]], and can be easily translated to any language that can make API calls. This example uses a <code>Timer</code> control to check the mouse position.
and can be easily translated to any language that can make API calls.
<lang vb>Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
This example uses a <code>Timer</code> control to check the mouse position.
<syntaxhighlight lang="vb">Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
 
Private Type POINTAPI
Line 660 ⟶ 1,716:
Me.Print "X:" & Pt.X
Me.Print "Y:" & Pt.Y
End Sub</langsyntaxhighlight>
 
=={{header|Wren}}==
{{libheader|DOME}}
<syntaxhighlight lang="wren">import "dome" for Window
import "graphics" for Canvas
import "input" for Mouse
 
class Game {
static init() {
Window.title = "Mouse position"
Canvas.resize(400, 400)
Window.resize(400, 400)
// get initial mouse coordinates
__px = Mouse.x
__py = Mouse.y
__ticks = 0
System.print("The coordinates of the mouse relative to the canvas are:")
}
 
static update() {
__ticks = __ticks + 1
if (__ticks%60 == 0) {
// get current mouse coordinates
var cx = Mouse.x
var cy = Mouse.y
// if it's moved in the last second, report new position
if (cx != __px || cy != __py) {
System.print([cx, cy])
__px = cx
__py = cy
}
}
}
 
static draw(alpha) {}
}</syntaxhighlight>
 
{{out}}
Sample output:
<pre>
The coordinates of the mouse relative to the canvas are:
[134, 197]
[229, 29]
[250, 62]
[266, 286]
[101, 319]
[45, 314]
[6, 173]
[269, 0]
</pre>
 
=={{header|XPL0}}==
GetMousePosition(0) = X coordinate; 1 = Y coordinate. For video modes
For video modes $0..$E and $13 the maximum coordinates are 639x199, minus the size of the
minus the size of the pointer.
pointer. For modes $F..$12 the coordinates are the same as the pixels.
For modes $F..$12 the coordinates are the same as the pixels.
VESA graphic modes are (usually) 639x479 regardless of the resolution.
For 80-column text modes divide the mouse coordinates by 8 to get the
character cursor position.
 
The mouse cursor location is always relative to the upper-left corner of the screen.
the screen. A window may be externally created ... using a fair amount of
code because the version of XPL0 used with these Rosetta Code examples
does not make Windows applications (however see "Simple windowed application").
 
<langsyntaxhighlight XPL0lang="xpl0">include c:\cxpl\stdlib;
if not OpenMouse then Text(0, "A mouse is required")
else [ShowMouse(true);
IntOut(0, GetMousePosition(0)); ChOut(0, ^,);
IntOut(0, GetMousePosition(1)); CrLf(0);
]</langsyntaxhighlight>
 
{{out|Example output:}}
<pre>
320,96
</pre>
 
 
{{omit from|ACL2}}
{{omit from|AWK|Does not have an active window concept}}
{{omit from|Befunge|No mouse support}}
{{omit from|Brainf***}}
{{omit from|GolfScript}}
{{omit from|GUISS}}
{{omit from|Logtalk}}
{{omit from|Lotus 123 Macro Scripting}}
{{omit from|Maxima}}
{{omit from|ML/I}}
{{omit from|PARI/GP}}
{{omit from|PHP}}
{{omit from|PostScript}}
{{omit from|R}}
{{omit from|TI-83 BASIC|Does not have a pointing device.}}
{{omit from|TI-89 BASIC|Does not have a pointing device.}}
{{omit from|UNIX Shell}}
{{omit from|ZX Spectrum Basic|Does not have a pointing device interface or windowing engine}}
 
[[Category:Pointing devices]]
2,069

edits