| + | dlの例 |
require 'dl/struct'
require 'dl/import'
module WININET
extend DL::Importable
dlload('winInet.dll')
typealias('BOOL', 'unsigned int')
typealias('DWORD', 'unsigned long')
typealias('LPSTR', 'char *')
typealias('INTERNET_SCHEME', 'int')
typealias('INTERNET_PORT', 'unsigned short')
UrlComponent_t = struct ["DWORD dwStructSize",
"LPSTR lpszScheme",
"DWORD dwSchemeLength",
"INTERNET_SCHEME nScheme",
"LPSTR lpszHostName",
"DWORD dwHostNameLength",
"INTERNET_PORT nPort",
"LPSTR lpszUserName",
"DWORD dwUserNameLength",
"LPSTR lpszPassword",
"DWORD dwPasswordLength",
"LPSTR lpszUrlPath",
"DWORD dwUrlPathLength",
"LPSTR lpszExtraInfo",
"DWORD dwExtraInfoLength"]
extern('BOOL InternetCrackUrl(const char *, DWORD, DWORD, void *)')
end
uc = WININET::UrlComponent_t.malloc
uc.dwStructSize = uc.size
uc.lpszScheme = "\0" * 100
uc.dwSchemeLength = 100
uc.nScheme = 0
uc.lpszHostName = "\0" * 100
uc.dwHostNameLength = 100
uc.nPort = 0
uc.lpszUserName = "\0" * 100
uc.dwUserNameLength = 100
uc.lpszPassword = "\0" * 100
uc.dwPasswordLength = 100
uc.lpszUrlPath = "\0" * 100
uc.dwUrlPathLength = 100
uc.lpszExtraInfo = "\0" * 100
uc.dwExtraInfoLength = 100
p WININET::internetCrackUrl("http://localhost/test", 0, 0, uc)
print uc.lpszScheme
|
| + | win32apiの例1 |
require 'Win32API'
class Test
def initialize
@crackUrl = Win32API.new('WinInet.dll',
'InternetCrackUrl',
'p l l p',
'i')
end
attr_reader :uc
def crackUrl(url)
urlComponent = Struct.new(:dwStructSize,
:lpszScheme,
:dwSchemeLength,
:nScheme,
:lpszHostName,
:dwHostNameLength,
:nPort,
:lpszUserName,
:dwUserNameLength,
:lpszPassword,
:dwPasswordLength,
:lpszUrlPath,
:dwUrlPathLength,
:lpszExtraInfo,
:dwExtraInfoLength)
@uc = urlComponent.new
@uc.dwStructSize = 60
@uc.lpszScheme = " " * 100
@uc.dwSchemeLength = 100
@uc.nScheme = 0
@uc.lpszHostName = " " * 100
@uc.dwHostNameLength = 100
@uc.nPort = 100
@uc.lpszUserName = " " * 100
@uc.dwUserNameLength = 100
@uc.lpszPassword = " " * 100
@uc.dwPasswordLength = 100
@uc.lpszUrlPath = " " * 100
@uc.dwUrlPathLength = 100
@uc.lpszExtraInfo = " " * 100
@uc.dwExtraInfoLength = 100
rc = @crackUrl.call(url, 0, 0, @uc.to_a.pack('L!pL!i!pL!i!pL!pL!pL!pL!'))
return rc
end
end
test = Test.new
p test.crackUrl("http://localhost/test?query=true")
p test.uc.lpszScheme
|
| + | win32apiの例2 |
require 'Win32API'
class Test
def initialize
@crackUrl = Win32API.new('WinInet.dll',
'InternetCrackUrl',
%w(p l l p),
'i')
end
attr_reader :uc
def crackUrl(url)
uc = [60,
" "*100,
100,
0,
" "*100,
100,
0,
" "*100,
100,
" "*100,
100,
" "*100,
100,
" "*100,
100].pack('L!pL!i!pL!i!pL!pL!pL!pL!')
rc = @crackUrl.call(url, 0, 0, uc)
@uc = uc.unpack('L!pL!i!pL!i!pL!pL!pL!pL!')
return rc
end
end
test = Test.new
p test.crackUrl("http://localhost/test?query=true")
p test.uc
|