Project1

标题: 怎么用API修改程序图标 [打印本页]

作者: rainfly    时间: 2011-10-14 17:14
标题: 怎么用API修改程序图标
今天试着用API写了一下修改图标的程序,代码如下:
  1. #修改程序ico方法
  2. file_name = "Graphics/Pictures/ico32.ico"
  3. @get_ico = Win32API.new("user32", "LoadCursorFromFile", 'l', 'l')
  4. @sendmessage = Win32API.new("user32", "SendMessage", 'lllp', 'l')
  5. icon = @get_ico.call() #这里不知道怎么写啊
  6. @sendmessage.call(get_hWnd, 0x0080, nil, icon)
复制代码
谁能告诉我第5行的参数怎么写啊~~
获取句柄的代码:
  1. # ■ Kernel
  2. #------------------------------------------------------------------------------
  3. #  该模块中定义了可供所有类使用的方法。Object 类中包含了该模块。
  4. #==============================================================================
  5. module Kernel
  6.   #--------------------------------------------------------------------------
  7.   # ● 需要的 Windows API 函数
  8.   #--------------------------------------------------------------------------
  9.   GetWindowThreadProcessId = Win32API.new("user32", "GetWindowThreadProcessId", "LP", "L")
  10.   GetWindow = Win32API.new("user32", "GetWindow", "LL", "L")
  11.   GetClassName = Win32API.new("user32", "GetClassName", "LPL", "L")
  12.   GetCurrentThreadId = Win32API.new("kernel32", "GetCurrentThreadId", "V", "L")
  13.   GetForegroundWindow = Win32API.new("user32", "GetForegroundWindow", "V", "L")
  14.   #--------------------------------------------------------------------------
  15.   # ● 获取窗口句柄
  16.   #--------------------------------------------------------------------------
  17.   def get_hWnd
  18.     # 获取调用线程(RM 的主线程)的进程标识
  19.     threadID = GetCurrentThreadId.call
  20.     # 获取 Z 次序中最靠前的窗口
  21.     hWnd = GetWindow.call(GetForegroundWindow.call, 0)
  22.     # 枚举所有窗口
  23.     while hWnd != 0
  24.       # 如果创建该窗口的线程标识匹配本线程标识
  25.       if threadID == GetWindowThreadProcessId.call(hWnd, 0)
  26.         # 分配一个 11 个字节的缓冲区
  27.         className = " " * 11
  28.         # 获取该窗口的类名
  29.         GetClassName.call(hWnd, className, 12)
  30.         # 如果匹配 RGSS Player 则跳出循环
  31.         break if className == "RGSS Player"
  32.       end
  33.       # 获取下一个窗口
  34.       hWnd = GetWindow.call(hWnd, 2)
  35.     end
  36.     return hWnd
  37.   end
  38. end
复制代码
LoadCursorFromFile的函数原型:HCURSOR LoadCursorFromFile(LPCTSTR IpFileName)dsu_plus_rewardpost_czw
作者: 盈盈    时间: 2011-10-14 17:33
本帖最后由 盈盈 于 2011-10-14 17:44 编辑

  1. file_name = "Graphics/Pictures/ico32.ico"
  2. @get_ico = Win32API.new("user32", "LoadCursorFromFile", 'p', 'l')
  3. @sendmessage = Win32API.new("user32", "SendMessage", 'lllp', 'l')
  4. icon = @get_ico.call(file_name)
  5. @sendmessage.call(get_hWnd, 0x0080, 0, icon)
复制代码
API定义错了
代入的是字符串,也就是光标文件名。



作者: 忧郁    时间: 2011-10-14 21:26
下个专门改图标的软件就好,速度又快=  =叫啥忘了
作者: rainfly    时间: 2011-10-14 23:10
盈盈 发表于 2011-10-14 17:33
API定义错了
代入的是字符串,也就是光标文件名。

谢谢你啦~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1