赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 8 |
经验 | 132 |
最后登录 | 2014-9-6 |
在线时间 | 1270 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 767
- 在线时间
- 1270 小时
- 注册时间
- 2011-2-14
- 帖子
- 5589
|
本帖最后由 R-零 于 2013-11-17 11:47 编辑
难得来提问区看下
对于这个问题用api函数来解决修改系统当前的音量
前段是获取窗口句柄、后段是sendmessage函数
使用方法代码使用vup,提升2%音量
使用vdown,降低2%音量
以上代码可以连续使用达到效果
范例
Project1.7z
(233.93 KB, 下载次数: 70)
WM_APPCOMMAND = 0x319; APPCOMMAND_VOLUME_UP = 0x0a; APPCOMMAND_VOLUME_DOWN = 0x09; APPCOMMAND_VOLUME_MUTE = 0x08; #============================================================================== # ■ Kernel #------------------------------------------------------------------------------ # 该模块中定义了可供所有类使用的方法。Object 类中包含了该模块。 #============================================================================== module Kernel #-------------------------------------------------------------------------- # ● 需要的 Windows API 函数 #-------------------------------------------------------------------------- GetWindowThreadProcessId = Win32API.new("user32", "GetWindowThreadProcessId", "LP", "L") GetWindow = Win32API.new("user32", "GetWindow", "LL", "L") GetClassName = Win32API.new("user32", "GetClassName", "LPL", "L") GetCurrentThreadId = Win32API.new("kernel32", "GetCurrentThreadId", "V", "L") GetForegroundWindow = Win32API.new("user32", "GetForegroundWindow", "V", "L") #-------------------------------------------------------------------------- # ● 获取窗口句柄 #-------------------------------------------------------------------------- def get_hWnd # 获取调用线程(RM 的主线程)的进程标识 threadID = GetCurrentThreadId.call # 获取 Z 次序中最靠前的窗口 hWnd = GetWindow.call(GetForegroundWindow.call, 0) # 枚举所有窗口 while hWnd != 0 # 如果创建该窗口的线程标识匹配本线程标识 if threadID == GetWindowThreadProcessId.call(hWnd, 0) # 分配一个 11 个字节的缓冲区 className = " " * 11 # 获取该窗口的类名 GetClassName.call(hWnd, className, 12) # 如果匹配 RGSS Player 则跳出循环 break if className == "RGSS Player" end # 获取下一个窗口 hWnd = GetWindow.call(hWnd, 2) end return hWnd end end VAPI = Win32API.new('user32','SendMessage','lllp','l') def vup VAPI.call(get_hWnd,WM_APPCOMMAND,0x30292,APPCOMMAND_VOLUME_UP * 0x10000) end def vdown VAPI.call(get_hWnd,WM_APPCOMMAND,0x30292,APPCOMMAND_VOLUME_DOWN * 0x10000) end
WM_APPCOMMAND = 0x319;
APPCOMMAND_VOLUME_UP = 0x0a;
APPCOMMAND_VOLUME_DOWN = 0x09;
APPCOMMAND_VOLUME_MUTE = 0x08;
#==============================================================================
# ■ Kernel
#------------------------------------------------------------------------------
# 该模块中定义了可供所有类使用的方法。Object 类中包含了该模块。
#==============================================================================
module Kernel
#--------------------------------------------------------------------------
# ● 需要的 Windows API 函数
#--------------------------------------------------------------------------
GetWindowThreadProcessId = Win32API.new("user32", "GetWindowThreadProcessId", "LP", "L")
GetWindow = Win32API.new("user32", "GetWindow", "LL", "L")
GetClassName = Win32API.new("user32", "GetClassName", "LPL", "L")
GetCurrentThreadId = Win32API.new("kernel32", "GetCurrentThreadId", "V", "L")
GetForegroundWindow = Win32API.new("user32", "GetForegroundWindow", "V", "L")
#--------------------------------------------------------------------------
# ● 获取窗口句柄
#--------------------------------------------------------------------------
def get_hWnd
# 获取调用线程(RM 的主线程)的进程标识
threadID = GetCurrentThreadId.call
# 获取 Z 次序中最靠前的窗口
hWnd = GetWindow.call(GetForegroundWindow.call, 0)
# 枚举所有窗口
while hWnd != 0
# 如果创建该窗口的线程标识匹配本线程标识
if threadID == GetWindowThreadProcessId.call(hWnd, 0)
# 分配一个 11 个字节的缓冲区
className = " " * 11
# 获取该窗口的类名
GetClassName.call(hWnd, className, 12)
# 如果匹配 RGSS Player 则跳出循环
break if className == "RGSS Player"
end
# 获取下一个窗口
hWnd = GetWindow.call(hWnd, 2)
end
return hWnd
end
end
VAPI = Win32API.new('user32','SendMessage','lllp','l')
def vup
VAPI.call(get_hWnd,WM_APPCOMMAND,0x30292,APPCOMMAND_VOLUME_UP * 0x10000)
end
def vdown
VAPI.call(get_hWnd,WM_APPCOMMAND,0x30292,APPCOMMAND_VOLUME_DOWN * 0x10000)
end
|
评分
-
查看全部评分
|