AU3能让时间在游戏中显示么?类似Fraps
本帖最后由 KLU3K 于 2010-2-17 22:46 编辑想让游戏时间在屏幕左上角或者别的地方显示出来(就是OSD),玩游戏就不耽误了。
但是不知道怎么实现。 做个前置的特性窗体显示时间,好像论坛里见过的 好像不行吧,不需要钩子之类的么?好像还有什么覆盖模式下显示。
不知道怎么实现的。 有知道的么 :face (12):学习中 楼上的,这还没答案呢,怎么学习啊? 自己再顶一下,有思路么? 我写过始终置顶的显示时间脚本…主要是检测系统时间和你设置的时间变量是否一致,不一致的话就修改时间变量值,然后用SplashTextOn显示…
但是对全屏游戏MS支持不够好,尤其是FPS游戏…闪得厉害…有点烦人的感觉…其他游戏未知… 个人主要用来显示开机时间…以及校园网连接时间… SplashTextOn估计不行,看来au3没这个功能。 不是很清楚,估计不太支持。。。。 写一个小GUI,设置其为游戏窗口的子窗口,就好了 $Game_Handle = Pid2Winhandle(6820);用进程PID取窗口句柄
;~ $Game_Handle = WinGetHandle("游戏窗口名称");用窗口名称取窗口句柄
$Gui = GuiCreate("", 125, 20, 0, 0, 0x08000000+0x80000000, -1, Pid2Winhandle(6820))
GUISetBkColor(0xE0FFFF)
$TIme_Lable = GUICtrlCreateLabel(@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC,5,4)
GUICtrlSetColor(-1, 0x0000FF)
GuiSetState(@SW_SHOWNOACTIVATE,$Gui)
While 1
Sleep(1000)
GUICtrlSetData($TIme_Lable,@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
WEnd
Func Pid2Winhandle($PID)
$PID = ProcessExists($PID)
$WinList = WinList()
For $i = 1 To $WinList
If $WinList[$i] <> "" And BitAND(WinGetState($WinList[$i]), 2) Then
$Pid2Winhandle = WinGetProcess($WinList[$i])
If $Pid2Winhandle = $PID Then Return $WinList[$i]
EndIf
Next
Return SetError(0, 0, 0)
EndFunc ;==>Pid2Winhandle也许是你想要的
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGui = GUICreate("", 100,20, @DesktopWidth-100,0,$WS_POPUP, $WS_EX_LAYERED+$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
GUICtrlCreateLabel("",0,0,100,20,-1,$GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x123456)
GUICtrlSetFont(-1,15,1000)
GUICtrlSetColor(-1, 0xFF8000)
_API_SetLayeredWindowAttributes($hGui, 0x123456)
GUISetState()
While 1
GUICtrlSetData(-1, @HOUR&':'&@MIN&':'&@SEC)
sleep(1000)
WinSetOnTop($hGui,'',1)
WEnd
Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)
Local Const $AC_SRC_ALPHA = 1
Local Const $ULW_ALPHA = 2
Local Const $LWA_ALPHA = 0x2
Local Const $LWA_COLORKEY = 0x1
If Not $isColorRef Then
$i_transcolor = Hex(String($i_transcolor), 6)
$i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
EndIf
Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
Select
Case @error
Return SetError(@error, 0, 0)
Case $Ret = 0
Return SetError(4, 0, 0)
Case Else
Return 1
EndSelect
EndFunc ;==>_API_SetLayeredWindowAttributes
不确定是否好用.
页:
[1]