Mouse position: Difference between revisions

m
(Lingo added)
 
(70 intermediate revisions by 32 users not shown)
Line 1:
{{task|GUI}}
{{task|GUI}} [[Category:Testing]] [[Category:Hardware]] [[Category:Pointing devices]]
[[Category:Testing]]
[[Category:Hardware]]
[[Category:Pointing devices]]
{{omit from|ACL2}}
{{omit from|AWK|Does not have an active window concept}}
Line 14 ⟶ 17:
{{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.}}
Line 19 ⟶ 23:
{{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">
<lang ActionScript3>
package {
Line 63 ⟶ 75:
 
}
</syntaxhighlight>
</lang>
 
=={{header|Ada}}==
Line 75 ⟶ 87:
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:
<langsyntaxhighlight Adalang="ada">with GLib; use GLib;
with Gtk.Button; use Gtk.Button;
with Gtk.Label; use Gtk.Label;
Line 141 ⟶ 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}}==
The 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
<langsyntaxhighlight AutoHotkeylang="autohotkey">GetCursorPos()
{
static POINT, init := VarSetCapacity(POINT, 8, 0) && NumPut(8, POINT, "Int")
Line 166 ⟶ 210:
. "POINT structure`n`n"
. "x-coordinate:`t`t" GetCursorPos[0] "`n"
. "y-coordinate:`t`t" GetCursorPos[1]</langsyntaxhighlight>
Source: [https://github.com/jNizM/AHK_DllCall_WinAPI/ GetPhysicalCursorPos @github] by jNizM
<langsyntaxhighlight AutoHotkeylang="autohotkey">GetPhysicalCursorPos()
{
static POINT, init := VarSetCapacity(POINT, 8, 0) && NumPut(8, POINT, "Int")
Line 181 ⟶ 225:
. "POINT structure`n`n"
. "x-coordinate:`t`t" GetPhysicalCursorPos[0] "`n"
. "y-coordinate:`t`t" GetPhysicalCursorPos[1]</langsyntaxhighlight>
 
=={{header|BBC BASIC}}==
The mouse coordinates are relative to the bottom-left corner
of the BBC BASIC main output window:
<langsyntaxhighlight lang="bbcbasic"> MOUSE xmouse%, ymouse%, buttons%
PRINT xmouse%, ymouse%</langsyntaxhighlight>
 
=={{header|C}}==
{{libheader|Xlib}}
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <X11/Xlib.h>
 
Line 227 ⟶ 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 242 ⟶ 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-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>
 
 
Line 261 ⟶ 358:
with the help of Windows and classes units.
 
<langsyntaxhighlight Delphilang="delphi">program Project1;
{$APPTYPE CONSOLE}
uses
Line 275 ⟶ 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.
<langsyntaxhighlight lang="lisp">
(lib 'plot)
(plot-x-minmax 10) ; set logical dimensions of plotting area
Line 287 ⟶ 397:
;; the mouse position is displayed as , for example, [ x: 5.6 y : 88.7]
;; 0 <= x <= 10, 0 <= y <= 100
</syntaxhighlight>
</lang>
 
--[[User:Neo.abhinav|Neo.abhinav]] 17:00, 6 May 2011 (UTC)
 
=={{header|Elm}}==
<langsyntaxhighlight lang="elm">import Graphics.Element exposing (Element, show)
import Mouse
 
Line 298 ⟶ 408:
main : Signal Element
main =
Signal.map show Mouse.position</langsyntaxhighlight>
 
=={{header|Emacs Lisp}}==
Line 304 ⟶ 414:
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.
Line 316 ⟶ 425:
=={{header|ERRE}}==
This example program, taken from distribution disk, shows the mouse position in a text field at the bottom-right corner and updates when the mouse is moved.
<syntaxhighlight lang="erre">
<lang ERRE>
!
! MOUSE WITH 'MOUSE.LIB' LIBRARY
Line 396 ⟶ 505:
CLS
END PROGRAM
</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
<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. ;
</lang>
 
=={{header|F_Sharp|F#}}==
Line 421 ⟶ 512:
If the question was for the point relative to the current window,
life would be much simpler.
<langsyntaxhighlight lang="fsharp">open System.Windows.Forms
open System.Runtime.InteropServices
 
Line 442 ⟶ 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}}==
Line 451 ⟶ 612:
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 476 ⟶ 693:
Mouse click positions for windows created internally.
X and Y are in units of current xy axes (optional: invisible).
<langsyntaxhighlight lang="hicest"> WINDOW(WINdowhandle=handle)
AXIS(WINdowhandle=handle, MouSeCall=Mouse_Callback, MouSeX=X, MouSeY=Y)
END
Line 482 ⟶ 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.
<langsyntaxhighlight Iconlang="icon">until *Pending() > 0 & Event() == "q" do { # loop until there is something to do
px := WAttrib("pointerx")
py := WAttrib("pointery")
Line 493 ⟶ 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>.
 
Line 508 ⟶ 725:
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.
 
=={{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.
<langsyntaxhighlight lang="lb"> nomainwin
 
UpperLeftX = DisplayWidth-WindowWidth
Line 555 ⟶ 813:
y = point.y.struct
CursorPos$=x; ",";y
end function</langsyntaxhighlight>
 
=={{header|Lingo}}==
<langsyntaxhighlight lang="lingo">put _mouse.mouseLoc
-- point(310, 199)</langsyntaxhighlight>
 
=={{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|M2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
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">get(0,'PointerLocation')</syntaxhighlight>
 
=={{header|Mathematica}}==
<lang Mathematica>MousePosition["WindowAbsolute"]</lang>
=={{header|MAXScript}}==
Creates a window on the screen and shows mouse position as it moves.
 
<syntaxhighlight lang="maxscript">
<lang MAXScript>
try destroydialog mousePos catch ()
 
Line 590 ⟶ 934:
 
createdialog mousepos
</syntaxhighlight>
</lang>
 
=={{header|MATLABMiniScript}}==
{{works with|Mini Micro}}
<lang MATLAB>get(0,'PointerLocation')</lang>
<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 620 ⟶ 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:
<langsyntaxhighlight Octavelang="octave">[X, Y, BUTTONS] = ginput(N);</langsyntaxhighlight>
Example:
<pre>>> [X, Y, BUTTONS] = ginput(4)
Line 650 ⟶ 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 673 ⟶ 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}}==
Line 680 ⟶ 1,193:
When you move the mouse over the created window,
the mouse position get printed and the program terminates.
<langsyntaxhighlight Perllang="perl">use SDL;
use SDL::Events;
use SDLx::App;
Line 693 ⟶ 1,206:
} );
$app->run;
</syntaxhighlight>
</lang>
{{out}}
<pre>x=15 y=304</pre>
 
=={{header|Perl 6Phix}}==
The following example shows three labels being updated with the mouse position.<br>
{{works with|rakudo/jvm|2013-12-03}}
The globalmotion label is updated whenever the mouse moves anywhere within the window, but not outside it.<br>
<lang perl6>use java::awt::MouseInfo:from<java>;
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
given MouseInfo.getPointerInfo.getLocation {
 
say .getX, 'x', .getY;
function globalmotion_cb(integer x, integer y, atom /*pStatus*/)
}</lang>
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}}==
Line 711 ⟶ 1,283:
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 722 ⟶ 1,294:
(- (char (key)) 32)
(- (char (key)) 32) ) )
(prin "^[[?9l") ) ) # Mouse reporting off</langsyntaxhighlight>
{{out}}
<pre>: (mousePosition)
Line 729 ⟶ 1,301:
=={{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.
<langsyntaxhighlight PureBasiclang="purebasic">#MyWindow = 0
#Label_txt = 0
#MousePos_txt = 1
Line 752 ⟶ 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}}==
Line 764 ⟶ 1,356:
 
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 784 ⟶ 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 800 ⟶ 1,392:
win.bind("<Motion>",xy)
mainloop()
</syntaxhighlight>
</lang>
 
=={{header|Scala}}==
 
{{libheader|Scala}}<lang scala>import java.awt.MouseInfo
object MousePosition extends App {
val mouseLocation = MouseInfo.getPointerInfo.getLocation
println (mouseLocation)
}</lang>
 
=={{header|Racket}}==
Line 814 ⟶ 1,398:
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 {
say .getX, 'x', .getY;
}</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>
<lang Retro>needs canvas'
^canvas'mouse</lang>
 
=={{header|Ring}}==
Line 832 ⟶ 1,445:
The movement procedure uses the mouse position information
 
<syntaxhighlight lang="ring">
<lang Ring>
Load "guilib.ring"
 
Line 895 ⟶ 1,508:
}
ok
</syntaxhighlight>
</lang>
 
=={{header|Ruby}}==
 
{{libheader|Shoes}}
 
<langsyntaxhighlight Rubylang="ruby">Shoes.app(:title => "Mouse Position", :width => 400, :height => 400) do
@position = para "Position : ?, ?", :size => 12, :margin => 10
Line 906 ⟶ 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.
<langsyntaxhighlight lang="rust">// rustc 0.9 (7613b15 2014-01-08 18:04:43 -0800)
 
use std::libc::{BOOL, HANDLE, LONG};
Line 947 ⟶ 1,561:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>x: 550, y: 614
Line 956 ⟶ 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}}==
Line 961 ⟶ 1,583:
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:
<langsyntaxhighlight lang="seed7">xPos := pointerXPos(curr_win);
yPos := pointerYPos(curr_win);</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
Sending the message <tt>position</tt> to the <tt>activeHand</tt> of the <tt>World</tt> returns a <tt>Point</tt> object:
 
<langsyntaxhighlight lang="smalltalk">
World activeHand position. " (394@649.0)"
</syntaxhighlight>
</lang>
 
=={{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}}==
Line 988 ⟶ 1,692:
(so if the pointer is over a button on the current form,
the event will only fire for the button, ''not'' the form).
<langsyntaxhighlight 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.
<langsyntaxhighlight lang="vb">Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
 
Private Type POINTAPI
Line 1,012 ⟶ 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}}==
Line 1,028 ⟶ 1,782:
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}}
2,060

edits