Hallo Leute,
ich hätte mal eine Frage, und zwar ob es eine Möglichkeit gibt eine GUI zu erstellen die komplett transparent ist? Also so das man durch sie hindurch sehen kann aber man die Labels (wenn möglich mit transparenten Hintergrund) noch sieht?
Und wenn ja, wie geht das?
Am besten anhand eines Beispielscriptes erklären
mfg
Icynator
okay hat sich erledigt...
ich habs jetzt so gemacht:
#NoTrayIcon
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <mem.au3>
$PlayerBase = 0xA0465C
[/autoit][autoit][/autoit][autoit]$pid = WinGetProcess("SRO_Client")
If $pid = -1 Then
MsgBox(16, "SRO-Information", "Silkroad is not running!")
exit
EndIf
$info = _MemoryOpen($pid)
$PlayerBase = _MemoryRead($PlayerBase, $info)
[/autoit][autoit][/autoit][autoit]; INI-Datei definieren Priorität: Userprofile vor lokaler Datei
If FileExists(@userprofiledir & "\Killcounter.ini") then
$inifile = @userprofiledir & "\Killcounter.ini"
Else
If FileExists(@scriptdir & "\Killcounter.ini") then
$inifile = @scriptdir & "\Killcounter.ini"
Else
$inifile = ""
EndIf
EndIf
FileInstall("Killcounter.gif",@tempdir & "\Killcounter.gif",1)
; GUI erzeugen mit Contextmenue "Beenden"
Opt("GUIOnEventMode", 1)
$gui = GUICreate("Killcounter",200,200, 318, 213,$WS_POPUP,BitOr($WS_EX_LAYERED,$WS_EX_TOOLWINDOW))
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_PrimeDown")
GUISetOnEvent($GUI_EVENT_CLOSE,"_Ende")
$bild_id = GUICtrlCreatePic(@tempdir & "\Killcounter.gif", 0, 0, 200,200)
$suchtext_id = GUICtrlCreateLabel("Test",50,50,50,50)
GUICtrlSetColor(-1,0xFFFFFF)
GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)
$label = GUICtrlCreateLabel("KA",100,100,50,50)
GUICtrlSetColor(-1,0xFFFFFF)
GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)
$CMenue = GUICtrlCreateContextMenu ($bild_id)
$CMenueEnde = GUICtrlCreateMenuitem ("Beenden",$CMenue,0)
GUICtrlSetOnEvent ($CMenueEnde, "_Ende")
GUISetState(@SW_SHOW)
WinSetOnTop("Killcounter", "", 1)
; alte Fensterposition laden und GUI verschieben
if $inifile <> "" then
$WinXPos = IniRead($inifile,"Startwerte","WinXPos","")
$WinYPos = IniRead($inifile,"Startwerte","WinYPos","")
If $WinXPos <> "" And $WinYPos <> "" then WinMove("Killcounter","",$WinXPos,$WinYPos)
endif
; warten....
While 1
$PlayerCurHP = 0x350
$SpielerHP = _MemoryRead($PlayerBase + $PlayerCurHP, $info)
GUICtrlSetData($label, $SpielerHP,"")
Sleep(500)
WEnd
; Danke für diese Funktion um das rahmenlose Fenster zu verschieben
Func _PrimeDown()
Local $DifX, $DifY, $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
Local $WinPos = WinGetPos(@GUI_WinHandle)
Local $MPos = MouseGetPos()
$DifX = $MPos[0] - $WinPos[0]
$DifY = $MPos[1] - $WinPos[1]
Do
Sleep(15)
$MPos = MouseGetPos()
$MouseData = GUIGetCursorInfo(@GUI_WinHandle)
Until ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Or (Not $MouseData[2])
GUICtrlSetCursor($bild_id,9)
While $MouseData[2]
$MPos = MouseGetPos()
$WinPos = WinGetPos(@GUI_WinHandle)
If ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Then
WinMove(@GUI_WinHandle, '', $MPos[0] - $DifX, $MPos[1] - $DifY)
EndIf
Sleep(15)
$MouseData = GUIGetCursorInfo(@GUI_WinHandle)
WEnd
GUICtrlSetCursor($bild_id,2)
GUICtrlSetState($suchtext_id,$GUI_FOCUS)
GUICtrlSetState($label,$GUI_FOCUS)
EndFunc
; Fensterposition merken und Programm beenden
Func _Ende()
$iniid=fileopen($inifile,1)
if $iniid = -1 then $inifile = @userprofiledir & "\Killcounter.ini"
fileclose($iniid)
IniDelete($inifile,"Startwerte")
$WinPos = WinGetPos("Killcounter")
IniWrite($inifile,"Startwerte","WinXPos",$WinPos[0])
IniWrite($inifile,"Startwerte","WinYPos",$WinPos[1])
if FileExists(@Tempdir & "\Killcounter.gif") then FileDelete(@Tempdir & "\Killcounter.gif")
Exit
EndFunc
ich hoffe mal Micha_he is mir nich böse das ich einiges von seinem script geklaut hab... wenn doch sag bitte bescheid dann such ich ne andere möglichkeit....