Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Kleiner Helfer


  • Please log in to reply
4 replies to this topic
Bentschi
  • Moderators
  • 120 posts
  • Last active: Sep 05 2014 02:12 AM
  • Joined: 26 Nov 2008

Hallo,

Hatte mal eben die Situation, dass ich die Farbe eines Pixels auf dem Bildschirm bestimmen wollte.

Klar kenn ich WindowSpy, aber nur selbstgemacht ist schöner icon_wink.gif

Hier mal ein Screenshot:

ahk-helper.png

Win: Zeigt den Fenstertitel

Ctrl: Zeigt den Klassennamen eines Controls

Pos: Die Position des Cursors

Move: Wie weit der Cursor seit der aktivierung vom anfangspunkt wegbewegt wurde

RGB: Die Farbe des Pixels auf dem sich der Cursor befindet (HTML angabe)

Clip: Zeigt was sich gerade in der Zwischenablage befindet

 

Wenn man die Strg (Ctrl) taste hält wird das Gui angezeigt.

 

Hier der Code dazu:

w := 280
h := 85
strlen := 24
CoordMode, mouse, screen
CoordMode, pixel, screen
Gui, font, s8, Courier New
Gui, add, text, % "x5 y2 w" (w-50) " h" h " vinfo"
Gui, add, treeview, % "x+3 yp w40 h40 vclr"
Gui, margin, 3, 3
Gui, -caption +toolwindow +alwaysontop -sysmenu +border
SetTimer, update, 200
return

update:
if (getkeystate("ctrl"))
{
  MouseGetPos, x, y, win, ctrl
  WinGetTitle, win, ahk_id %win%
  if (!vis)
  {
    bx := x
    by := y
  }
  PixelGetColor, c, x, y, RGB
  GuiControl, % "+background" c, clr
  SetFormat, integer, h
  c := regexreplace(c+0, "0x", "#")
  SetFormat, integer, d
  StringUpper, c, c
  clip := regexreplace(regexreplace(clipboard, "\s+", " "), "^\s*(.*?)\s*$", "$1")
  info := "Win:`t" ((strlen(win)>strlen) ? substr(win, 1, strlen-3) "..." : win) "`n"
  info .= "Ctrl:`t" ((strlen(ctrl)>strlen) ? substr(ctrl, 1, strlen-3) "..." : ctrl) "`n"
  info .= "Pos:`tX:" x ", Y:" y "`n"
  info .= "Move:`t" round(sqrt(((-(bx-x))**2)+((-(by-y))**2))) " (X:" -(bx-x) ", Y:" -(by-y) ")`n"
  info .= "RGB:`t" c "`n"
  info .= "Clip:`t" ((strlen(clip)>strlen) ? substr(clip, 1, strlen-3) "..." : clip) "`n"
  GuiControl,, info, % info
  Gui, show, % "x" ((x+10+w>A_ScreenWidth) ? A_ScreenWidth-w : x+10) " y" ((y+10+h>A_ScreenHeight) ? A_ScreenHeight-h : y+10) " noactivate"
  SetTimer, update, 20
  vis := 1
}
else if (vis)
{
  SetTimer, update, 200
  Gui, hide
  vis := 0
}
return

 



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

zuerst denkt man ja vielleicht ... gääähn ... jo, ganz toll.

 

Aber das ist wirklich eine coole Umsetzung.

 

Ich wünschte, ich hätte das gehabt, als ich für eines dieser Flash-Games, mit denen man sein Bisschen Resthirn auch noch abtöten kann, einen Klicker geschrieben habe.

 

nice :)


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


Bentschi
  • Moderators
  • 120 posts
  • Last active: Sep 05 2014 02:12 AM
  • Joined: 26 Nov 2008

Ja ich weiß...

Ist nicht gerade meine Meisterleistung icon_biggrin.gif

Klar kann man die eine oder andere Info entfernen bzw. hinzufügen.

(bsp. der Fenstertitel ist für mich relativ uninterressant)

 

Aber hin und wieder will ich die Farbe eines Pixels bestimmen, oder die Entfernung von PixelA zu PixelB messen.

Das sind für mich die wichtigsten Informationen.

 

Ich werd es aber erstmal so behalten und habs auch in den Autostart gelegt.

Habs ja nur gepostet, falls jemand anders daran interresse haben könnte.

Zudem ist es ja auch relativ einfach seine eigene Version daraus zu basteln.



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

...das war kein Quatsch :) Ich finde das wirklich gut, weil man die optische Kontrolle genauso braucht, wie die anderen Daten.

Man kann sich noch einen HotKey einfügen, um die benötigte Codezeile zu generieren und fertig ist die Laube.

Also, ich kann's jedenfalls gebrauchen und hab das nun ebenfalls in meinem Dauerscript.


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


robert_ilbrink
  • Members
  • 561 posts
  • Last active: Nov 07 2019 05:14 PM
  • Joined: 05 May 2012

Eine Idee. Habe etwas ähnliches selbst gemacht, um Maus Positionen fest zu legen.

Was Ich dabei mache ist jedes mal wenn Ich die Maus klicke, werden die Daten in eine txt Datei hinzu gefügt.

Später, beim programmieren, kann Ich dann für jede Position, schnell die Koordinaten abholen.

Vielleicht Könntest du das hier auch machen. Wenn Ich Fertig bin, Werfe Ich die Datei einfach weg.

 

Hier mein einfaches beispiel.

#SingleInstance Force
#installKeybdHook
#Persistent
AppName=StoreMousePositions
Menu, Tray, Tip, %AppName%
Menu, Tray, Icon , Shell32.dll, 100, 1
TrayTip, %AppName%, Started, 1
SoundBeep, 300, 150
SetWorkingDir %A_ScriptDir%
File=MouseCoordinates.txt
FileName=%A_ScriptDir%\%File%
Loop
{
	KeyWait, LButton, D
	MouseGetPos, XPosClick ,YPosClick
	FileAppend, Position%A_Index%: X is %XPosClick%   Y is %YPosClick%`n, %FileName%
	Sleep, 100
}

!x::
Run, %FileName%
ExitApp