Ruby / Win32API - 如何使用Array#pack传递结构

时间:2017-08-03 04:07:15

标签: ruby winapi

我不明白为什么这段代码不起作用:

设置控制台光标位置

require 'Win32API'

STD_OUTPUT_HANDLE = -11
GetStdHandle = Win32API.new('kernel32', 'GetStdHandle', 'L', 'L')
HConsoleOutput = GetStdHandle.call(STD_OUTPUT_HANDLE)
SetConsoleCursorPosition = Win32API.new('kernel32', 'SetConsoleCursorPosition', ['L', 'P'], 'L')

x = 5
y = 2
buffer = [x, y].pack('ss')
p SetConsoleCursorPosition.call(HConsoleOutput, buffer) #=> 0 - FAIL

我做得不好?也许存在将buffer转换为解决它的指针?但是buffer是一个字符串,这意味着它已经是一个指针。

这项工作对我来说,使用另一个功能:

隐藏控制台光标

require 'Win32API'

STD_OUTPUT_HANDLE = -11
GetStdHandle = Win32API.new('kernel32', 'GetStdHandle', 'L', 'L')
HConsoleOutput = GetStdHandle.call(STD_OUTPUT_HANDLE)
SetConsoleCursorInfo = Win32API.new('kernel32', 'SetConsoleCursorInfo', ['L', 'P'], 'L')

cursor_size = 20
cursor_visible = 0
buffer = [cursor_size, cursor_visible].pack('LC')
# Hide console cursor.
p SetConsoleCursorInfo.call(HConsoleOutput, buffer) #=> 1 - SUCCESSFUL

感谢您的阅读!

0 个答案:

没有答案