cstruct 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/documents.html +572 -0
- data/doc/examples/anonymous_struct.rb.html +94 -0
- data/doc/examples/anonymous_union.rb.html +93 -0
- data/doc/examples/array_member.rb.html +79 -0
- data/doc/examples/file_io.rb.html +87 -0
- data/doc/examples/first_example.rb.html +104 -0
- data/doc/examples/get_system_info.rb.html +114 -0
- data/doc/examples/get_versionex.rb.html +97 -0
- data/doc/examples/global_memory.rb.html +102 -0
- data/doc/examples/inner_struct.rb.html +79 -0
- data/doc/examples/inner_union.rb.html +77 -0
- data/doc/examples/namespace.rb.html +80 -0
- data/doc/examples/show_processes.rb.html +95 -0
- data/doc/examples/struct_member.rb.html +128 -0
- data/doc/examples.html +42 -0
- data/doc/images/Thumbs.db +0 -0
- data/doc/images/examples.png +0 -0
- data/doc/images/excample1.png +0 -0
- data/doc/images/excample2.png +0 -0
- data/doc/images/green-point.png +0 -0
- data/doc/images/learnmore.png +0 -0
- data/doc/images/logo.png +0 -0
- data/doc/images/news.png +0 -0
- data/doc/images/point.png +0 -0
- data/doc/images/start.png +0 -0
- data/doc/images/synopsish.png +0 -0
- data/doc/index.html +149 -0
- data/doc/stylesheets/coderay.css +34 -0
- data/doc/stylesheets/ie.css +9 -0
- data/doc/stylesheets/style.css +216 -0
- data/examples/anonymous_struct.rb +43 -0
- data/examples/anonymous_union.rb +42 -0
- data/examples/array_member.rb +29 -0
- data/examples/file_io.rb +49 -0
- data/examples/first_example.rb +53 -0
- data/examples/inner_struct.rb +28 -0
- data/examples/inner_union.rb +26 -0
- data/examples/namespace.rb +29 -0
- data/examples/struct_member.rb +77 -0
- data/examples/win32/get_system_info.rb +64 -0
- data/examples/win32/get_versionex.rb +47 -0
- data/examples/win32/global_memory.rb +51 -0
- data/examples/win32/show_processes.rb +45 -0
- data/lib/cstruct.rb +523 -0
- data/lib/win32struct.rb +90 -0
- data/lib/win64struct.rb +13 -0
- metadata +109 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'cstruct'
|
3
|
+
|
4
|
+
# example:
|
5
|
+
# struct U in C\C++ (32-bit platform):
|
6
|
+
#
|
7
|
+
# struct U
|
8
|
+
# {
|
9
|
+
# union{
|
10
|
+
# int x;
|
11
|
+
# int y;
|
12
|
+
# }value; /* values is anonymous union's instance */
|
13
|
+
# };
|
14
|
+
|
15
|
+
# struct U in Ruby:
|
16
|
+
class U < CStruct
|
17
|
+
union:value do
|
18
|
+
int32:x
|
19
|
+
int32:y
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# or like this (use brace):
|
24
|
+
# class U < CStruct
|
25
|
+
# union (:position) {
|
26
|
+
# int32:x
|
27
|
+
# int32:y
|
28
|
+
# }
|
29
|
+
# end
|
30
|
+
|
31
|
+
|
32
|
+
# create a U's instance
|
33
|
+
u = U.new
|
34
|
+
|
35
|
+
# Notice! Assign is different from C language.
|
36
|
+
# 'value' can not be omitted !
|
37
|
+
u.value.x = 10
|
38
|
+
|
39
|
+
puts "sizeof(U) = #{U.__size__}" # "__size__" is alias of "size" . You may use 'size'.
|
40
|
+
puts "u.value.x = #{u.value.x }, u.value.y = #{u.value.y }"
|
41
|
+
|
42
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'cstruct'
|
3
|
+
|
4
|
+
# example:
|
5
|
+
# struct T in C\C++ (32-bit platform):
|
6
|
+
#
|
7
|
+
# struct T
|
8
|
+
# {
|
9
|
+
# int element[8];
|
10
|
+
# };
|
11
|
+
|
12
|
+
# struct T in Ruby:
|
13
|
+
class T < CStruct
|
14
|
+
int32:elements,[8]
|
15
|
+
end
|
16
|
+
|
17
|
+
# create a T's instance
|
18
|
+
t_array = T.new
|
19
|
+
|
20
|
+
(0..7).each do |i|
|
21
|
+
t_array.elements[i] = i # assign like as C language
|
22
|
+
end
|
23
|
+
|
24
|
+
# output
|
25
|
+
(0..7).each {|i| puts "t_array.elements[#{i}] = #{t_array.elements[i]}" }
|
26
|
+
|
27
|
+
|
28
|
+
# Actually,t_array.elements.class is Array. So..
|
29
|
+
t_array.elements.each {|element| puts element }
|
data/examples/file_io.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'cstruct'
|
3
|
+
|
4
|
+
# struct Point in Ruby:
|
5
|
+
class Point < CStruct
|
6
|
+
int32:x
|
7
|
+
int32:y
|
8
|
+
end
|
9
|
+
|
10
|
+
# struct PointF in Ruby:
|
11
|
+
class PointF < CStruct
|
12
|
+
double:x
|
13
|
+
double:y
|
14
|
+
end
|
15
|
+
|
16
|
+
class Addition < CStruct
|
17
|
+
char :description,[32]
|
18
|
+
end
|
19
|
+
|
20
|
+
# write file
|
21
|
+
File.open("point.bin","wb")do |f|
|
22
|
+
point = Point.new {|st| st.x = 100; st.y =200 }
|
23
|
+
point_f = PointF.new{|st| st.x = 20.65; st.y =70.86 }
|
24
|
+
|
25
|
+
addition = Addition.new
|
26
|
+
addition.description= "Hello Ruby!"
|
27
|
+
|
28
|
+
f.write point.data
|
29
|
+
f.write point_f.data
|
30
|
+
f.write addition.data
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
#read file
|
35
|
+
File.open("point.bin","rb")do |f|
|
36
|
+
point = Point.new
|
37
|
+
point_f = PointF.new
|
38
|
+
addition = Addition.new
|
39
|
+
|
40
|
+
point << f.read(Point.size)
|
41
|
+
point_f << f.read(PointF.size)
|
42
|
+
addition << f.read(Addition.size)
|
43
|
+
|
44
|
+
puts point.x
|
45
|
+
puts point.y
|
46
|
+
puts point_f.x
|
47
|
+
puts point_f.y
|
48
|
+
puts addition.description.to_cstr
|
49
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'cstruct'
|
3
|
+
|
4
|
+
# example:
|
5
|
+
# struct Point in C\C++ (32-bit platform):
|
6
|
+
#
|
7
|
+
# struct Point
|
8
|
+
# {
|
9
|
+
# int x;
|
10
|
+
# int y;
|
11
|
+
# };
|
12
|
+
|
13
|
+
# struct Point in Ruby:
|
14
|
+
class Point < CStruct
|
15
|
+
int32:x
|
16
|
+
int32:y
|
17
|
+
end
|
18
|
+
|
19
|
+
# create a Point's instance
|
20
|
+
point = Point.new
|
21
|
+
|
22
|
+
# assign like as C language
|
23
|
+
point.x = 10
|
24
|
+
point.y = 20
|
25
|
+
|
26
|
+
puts "point.x = #{point.x},point.y = #{point.y}"
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
# struct PointF in C\C++ (32-bit platform):
|
31
|
+
#
|
32
|
+
# struct PointF
|
33
|
+
# {
|
34
|
+
# double x;
|
35
|
+
# double y;
|
36
|
+
# };
|
37
|
+
|
38
|
+
# struct PointF in Ruby:
|
39
|
+
class PointF < CStruct
|
40
|
+
double:x
|
41
|
+
double:y
|
42
|
+
end
|
43
|
+
|
44
|
+
# create a PointF's instance
|
45
|
+
# use 'block' to initialize the fields
|
46
|
+
point2 = PointF.new do |st|
|
47
|
+
st.x = 10.56
|
48
|
+
st.y = 20.78
|
49
|
+
end
|
50
|
+
|
51
|
+
puts "sizeof(PointF) = #{PointF.size}"
|
52
|
+
puts "point2.x = #{point2.x},point2.y = #{point2.y}"
|
53
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'cstruct'
|
3
|
+
# example:
|
4
|
+
# struct A in C\C++ (32-bit platform):
|
5
|
+
# struct A{
|
6
|
+
# struct Inner
|
7
|
+
# {
|
8
|
+
# int v1;
|
9
|
+
# int v2;
|
10
|
+
# };
|
11
|
+
# Inner inner;
|
12
|
+
# };
|
13
|
+
|
14
|
+
# struct A in Ruby:
|
15
|
+
class A < CStruct
|
16
|
+
class Inner < CStruct
|
17
|
+
int32 :v1
|
18
|
+
int32 :v2
|
19
|
+
end
|
20
|
+
Inner :inner
|
21
|
+
end
|
22
|
+
|
23
|
+
a = A.new
|
24
|
+
a.inner.v1 = 1
|
25
|
+
a.inner.v2 = 2
|
26
|
+
|
27
|
+
puts a.inner.v1
|
28
|
+
puts a.inner.v2
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'cstruct'
|
3
|
+
|
4
|
+
# example:
|
5
|
+
# struct U in C\C++ (32-bit platform):
|
6
|
+
#
|
7
|
+
#struct U
|
8
|
+
#{
|
9
|
+
# union NumericType
|
10
|
+
# {
|
11
|
+
# int x;
|
12
|
+
# int y;
|
13
|
+
# };
|
14
|
+
# NumericType value;
|
15
|
+
#};
|
16
|
+
|
17
|
+
# Named union is unsupported in CStruct. Fortunately, anonymous union can take the place of it.
|
18
|
+
# struct U in Ruby:
|
19
|
+
class U < CStruct
|
20
|
+
union:value do
|
21
|
+
int32:x
|
22
|
+
int32:y
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# See also: 'anonymous_union.rb'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'cstruct'
|
3
|
+
|
4
|
+
# example:
|
5
|
+
module NS1 #namespace
|
6
|
+
class A < CStruct
|
7
|
+
uint32:handle
|
8
|
+
end
|
9
|
+
|
10
|
+
module NS2
|
11
|
+
class B < CStruct
|
12
|
+
A:a # directly use A
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class C < CStruct
|
17
|
+
A :a
|
18
|
+
NS2_B :b # Meaning of the 'NS2_B' is NS2::B
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class D < CStruct
|
23
|
+
NS1_NS2_B:b # Meaning of the 'NS1_NS2_B' is NS1::NS2::B
|
24
|
+
end
|
25
|
+
|
26
|
+
v = D.new
|
27
|
+
v.b.a.handle = 120
|
28
|
+
p D.__size__
|
29
|
+
p v.b.a.handle
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'cstruct'
|
3
|
+
|
4
|
+
# example:
|
5
|
+
# struct Point in C\C++ (32-bit platform):
|
6
|
+
#
|
7
|
+
# struct Point
|
8
|
+
# {
|
9
|
+
# int x;
|
10
|
+
# int y;
|
11
|
+
# };
|
12
|
+
#
|
13
|
+
# struct Line in C\C++ (32-bit platform):
|
14
|
+
#
|
15
|
+
# struct Line
|
16
|
+
# {
|
17
|
+
# Point begin_point;
|
18
|
+
# Point end_point;
|
19
|
+
# };
|
20
|
+
|
21
|
+
# struct TwoLine in C\C++ (32-bit platform):
|
22
|
+
#
|
23
|
+
# struct TwoLine
|
24
|
+
# {
|
25
|
+
# Line lines[2];
|
26
|
+
# };
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
# struct Point , Line and TwoLine in Ruby:
|
31
|
+
class Point < CStruct
|
32
|
+
int32:x
|
33
|
+
int32:y
|
34
|
+
end
|
35
|
+
|
36
|
+
class Line < CStruct
|
37
|
+
Point:begin_point
|
38
|
+
Point:end_point
|
39
|
+
end
|
40
|
+
|
41
|
+
class TwoLine < CStruct
|
42
|
+
Line:lines,[2]
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
line = Line.new
|
47
|
+
|
48
|
+
# assign like as C language
|
49
|
+
line.begin_point.x = 0
|
50
|
+
line.begin_point.y = 0
|
51
|
+
line.end_point.x = 20
|
52
|
+
line.end_point.y = 30
|
53
|
+
|
54
|
+
|
55
|
+
puts "sizeof(Line) = #{Line.__size__}" # "__size__" is alias of "size"
|
56
|
+
puts "line.begin_point.x = #{line.begin_point.x}"
|
57
|
+
puts "line.begin_point.y = #{line.begin_point.y}"
|
58
|
+
puts "line.end_point.x = #{line.end_point.x}"
|
59
|
+
puts "line.end_point.y = #{line.end_point.y}"
|
60
|
+
|
61
|
+
two_line = TwoLine.new
|
62
|
+
|
63
|
+
# assign like as C language
|
64
|
+
two_line.lines[0].begin_point.x = 6
|
65
|
+
two_line.lines[0].begin_point.y = 16
|
66
|
+
two_line.lines[0].end_point.x = 26
|
67
|
+
two_line.lines[0].end_point.y = 36
|
68
|
+
|
69
|
+
two_line.lines[1].begin_point.x = 6
|
70
|
+
two_line.lines[1].begin_point.y = 16
|
71
|
+
two_line.lines[1].end_point.x = 26
|
72
|
+
two_line.lines[1].end_point.y = 36
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'windows/system_info'
|
3
|
+
require 'win32struct'
|
4
|
+
include Windows::SystemInfo
|
5
|
+
|
6
|
+
# SYSTEM_INFO in VC6 's SDK
|
7
|
+
# typedef struct _SYSTEM_INFO {
|
8
|
+
# union {
|
9
|
+
# DWORD dwOemId; // Obsolete field...do not use
|
10
|
+
# struct {
|
11
|
+
# WORD wProcessorArchitecture;
|
12
|
+
# WORD wReserved;
|
13
|
+
# };
|
14
|
+
# };
|
15
|
+
# DWORD dwPageSize;
|
16
|
+
# LPVOID lpMinimumApplicationAddress;
|
17
|
+
# LPVOID lpMaximumApplicationAddress;
|
18
|
+
# DWORD dwActiveProcessorMask;
|
19
|
+
# DWORD dwNumberOfProcessors;
|
20
|
+
# DWORD dwProcessorType;
|
21
|
+
# DWORD dwAllocationGranularity;
|
22
|
+
# WORD wProcessorLevel;
|
23
|
+
# WORD wProcessorRevision;
|
24
|
+
# } SYSTEM_INFO, *LPSYSTEM_INFO;
|
25
|
+
|
26
|
+
# SYSTEM_INFO in Ruby
|
27
|
+
class SYSTEM_INFO < Win32Struct
|
28
|
+
union:u do
|
29
|
+
DWORD:dwOemId
|
30
|
+
struct:x do
|
31
|
+
WORD:wProcessorArchitecture
|
32
|
+
WORD:wReserved
|
33
|
+
end
|
34
|
+
end
|
35
|
+
DWORD :dwPageSize
|
36
|
+
LPVOID :lpMinimumApplicationAddress
|
37
|
+
LPVOID :lpMaximumApplicationAddress
|
38
|
+
DWORD :dwActiveProcessorMask
|
39
|
+
DWORD :dwNumberOfProcessors
|
40
|
+
DWORD :dwProcessorType
|
41
|
+
DWORD :dwAllocationGranularity
|
42
|
+
WORD :wProcessorLevel
|
43
|
+
WORD :wProcessorRevision
|
44
|
+
end
|
45
|
+
|
46
|
+
# call GetSystemInfo
|
47
|
+
sys_info = SYSTEM_INFO.new
|
48
|
+
GetSystemInfo(sys_info.__data__) # __data__ is an alias for method 'data'
|
49
|
+
|
50
|
+
#output
|
51
|
+
puts "<System Infomation>"
|
52
|
+
puts "Processor Architecture:#{sys_info.u.x.wProcessorArchitecture}" # 'u' and 'x' can not be omitted
|
53
|
+
puts "Page Size:#{sys_info.dwPageSize}"
|
54
|
+
puts "Minimum Application Address:0x#{sys_info.lpMinimumApplicationAddress.to_s 16}"
|
55
|
+
puts "Maximum Application Address:0x#{sys_info.lpMaximumApplicationAddress.to_s 16}"
|
56
|
+
puts "Active Processor Mask:#{sys_info.dwActiveProcessorMask}"
|
57
|
+
puts "Number Of Processors:#{sys_info.dwNumberOfProcessors}"
|
58
|
+
puts "Processor Type:#{sys_info.dwProcessorType}"
|
59
|
+
puts "Allocation Granularity:0x#{sys_info.dwAllocationGranularity.to_s 16}"
|
60
|
+
puts "Processor Level:#{sys_info.wProcessorLevel}"
|
61
|
+
puts "Processor Revision:#{sys_info.wProcessorRevision}"
|
62
|
+
|
63
|
+
|
64
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'windows/system_info'
|
3
|
+
require 'win32struct'
|
4
|
+
include Windows::SystemInfo
|
5
|
+
|
6
|
+
|
7
|
+
# OSVERSIONINFOEXA in VC6 's SDK
|
8
|
+
#typedef struct _OSVERSIONINFOEXA {
|
9
|
+
# DWORD dwOSVersionInfoSize;
|
10
|
+
# DWORD dwMajorVersion;
|
11
|
+
# DWORD dwMinorVersion;
|
12
|
+
# DWORD dwBuildNumber;
|
13
|
+
# DWORD dwPlatformId;
|
14
|
+
# CHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage
|
15
|
+
# WORD wServicePackMajor;
|
16
|
+
# WORD wServicePackMinor;
|
17
|
+
# WORD wReserved[2];
|
18
|
+
#} OSVERSIONINFOEXA;
|
19
|
+
|
20
|
+
|
21
|
+
class OSVERSIONINFOEXA < Win32Struct
|
22
|
+
DWORD :dwOSVersionInfoSize
|
23
|
+
DWORD :dwMajorVersion
|
24
|
+
DWORD :dwMinorVersion
|
25
|
+
DWORD :dwBuildNumber
|
26
|
+
DWORD :dwPlatformId
|
27
|
+
CHAR :szCSDVersion,[ 128 ]
|
28
|
+
WORD :wServicePackMajor
|
29
|
+
WORD :wServicePackMinor
|
30
|
+
WORD :wReserved,[2]
|
31
|
+
end
|
32
|
+
|
33
|
+
ver_info_ex = OSVERSIONINFOEXA.new do |st|
|
34
|
+
st.dwOSVersionInfoSize = OSVERSIONINFOEXA.__size__ # __size__ is an alias for method 'size'
|
35
|
+
end
|
36
|
+
|
37
|
+
#ANSI Version: GetVersionExA
|
38
|
+
GetVersionExA(ver_info_ex.__data__) # __data__ is an alias for method 'data'
|
39
|
+
|
40
|
+
puts "<OS Version Infomation>"
|
41
|
+
puts "Major Version:#{ver_info_ex.dwMajorVersion}"
|
42
|
+
puts "Minor Version:#{ver_info_ex.dwMinorVersion}"
|
43
|
+
puts "Build Number:#{ver_info_ex.dwBuildNumber}"
|
44
|
+
puts "Platform Id:#{ver_info_ex.dwPlatformId}"
|
45
|
+
puts "CSD Version:#{ver_info_ex.szCSDVersion.to_cstr}" # to_cstr return a string(C Style)
|
46
|
+
puts "ServicePack Major:#{ver_info_ex.wServicePackMajor}"
|
47
|
+
puts "ServicePack Minor:#{ver_info_ex.wServicePackMinor}"
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'windows/memory'
|
3
|
+
require 'win32struct'
|
4
|
+
|
5
|
+
include Windows::Memory
|
6
|
+
|
7
|
+
# example:
|
8
|
+
|
9
|
+
# typedef struct _MEMORYSTATUS {
|
10
|
+
# DWORD dwLength;
|
11
|
+
# DWORD dwMemoryLoad;
|
12
|
+
# DWORD dwTotalPhys;
|
13
|
+
# DWORD dwAvailPhys;
|
14
|
+
# DWORD dwTotalPageFile;
|
15
|
+
# DWORD dwAvailPageFile;
|
16
|
+
# DWORD dwTotalVirtual;
|
17
|
+
# DWORD dwAvailVirtual;
|
18
|
+
# } MEMORYSTATUS, *LPMEMORYSTATUS;
|
19
|
+
|
20
|
+
class MEMORYSTATUS < Win32Struct
|
21
|
+
DWORD :dwLength
|
22
|
+
DWORD :dwMemoryLoad
|
23
|
+
DWORD :dwTotalPhys
|
24
|
+
DWORD :dwAvailPhys
|
25
|
+
DWORD :dwTotalPageFile
|
26
|
+
DWORD :dwAvailPageFile
|
27
|
+
DWORD :dwTotalVirtual
|
28
|
+
DWORD :dwAvailVirtual
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
# create a MEMORYSTATUS's instance
|
34
|
+
stat = MEMORYSTATUS.new {|st| st.dwLength = MEMORYSTATUS.size }
|
35
|
+
|
36
|
+
# call API "GlobalMemoryStatus" - See also MSDN
|
37
|
+
GlobalMemoryStatus(stat.data)
|
38
|
+
|
39
|
+
#output
|
40
|
+
printf "[Physical Memory]\n"
|
41
|
+
printf " total:%12d bytes\n",stat.dwTotalPhys
|
42
|
+
printf " free :%12d bytes\n",stat.dwAvailPhys
|
43
|
+
|
44
|
+
printf "[Virtual Memory]\n"
|
45
|
+
printf " total:%12d bytes\n",stat.dwTotalVirtual
|
46
|
+
printf " free :%12d bytes\n",stat.dwAvailVirtual
|
47
|
+
|
48
|
+
printf "[Paging File]\n"
|
49
|
+
printf " total:%12d bytes\n",stat.dwTotalPageFile
|
50
|
+
printf " free :%12d bytes\n",stat.dwAvailPageFile
|
51
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# CStruct Examples
|
2
|
+
require 'windows/tool_helper'
|
3
|
+
require 'win32struct'
|
4
|
+
include Windows::ToolHelper
|
5
|
+
|
6
|
+
module Windows
|
7
|
+
MAX_PATH = 260
|
8
|
+
module ToolHelper
|
9
|
+
class PROCESSENTRY32 < Win32Struct
|
10
|
+
DWORD :dwSize
|
11
|
+
DWORD :cntUsage
|
12
|
+
DWORD :th32ProcessID
|
13
|
+
DWORD :th32DefaultHeapID
|
14
|
+
DWORD :th32ModuleID
|
15
|
+
DWORD :cntThreads
|
16
|
+
DWORD :th32ParentProcessID
|
17
|
+
LONG :pcPriClassBase
|
18
|
+
DWORD :dwFlags
|
19
|
+
CHAR :szExeFile,[MAX_PATH]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def show_all_processes
|
25
|
+
proc_enrty32 = PROCESSENTRY32.new
|
26
|
+
proc_enrty32.dwSize = PROCESSENTRY32.__size__
|
27
|
+
snap_handle = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS,0)
|
28
|
+
|
29
|
+
if Process32First(snap_handle,proc_enrty32.data)
|
30
|
+
show_process proc_enrty32
|
31
|
+
while true
|
32
|
+
break if !Process32Next( snap_handle,proc_enrty32.data )
|
33
|
+
show_process proc_enrty32
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
def show_process proc_enrty32
|
40
|
+
printf"%20s 0x%08X\n",proc_enrty32.szExeFile.to_cstr,proc_enrty32.th32ProcessID
|
41
|
+
end
|
42
|
+
|
43
|
+
printf"%20s %s\n","<Process Name>","<PID>"
|
44
|
+
printf"%20s %s\n","--------------","-----"
|
45
|
+
show_all_processes
|