win 0.3.17 → 0.3.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY +28 -0
- data/README.rdoc +5 -3
- data/VERSION +1 -1
- data/lib/win/dde.rb +138 -138
- data/lib/win/error.rb +26 -26
- data/lib/win/gui.rb +2 -0
- data/lib/win/gui/dialog.rb +9 -9
- data/lib/win/gui/input.rb +8 -8
- data/lib/win/gui/menu.rb +740 -0
- data/lib/win/gui/message.rb +44 -44
- data/lib/win/gui/window.rb +8 -8
- data/lib/win/library.rb +6 -6
- data/spec/spec_helper.rb +25 -3
- data/spec/win/gui/dialog_spec.rb +0 -16
- data/spec/win/gui/input_spec.rb +6 -10
- data/spec/win/gui/menu_spec.rb +291 -0
- data/spec/win/gui/window_spec.rb +8 -8
- data/spec/win/library_spec.rb +7 -14
- metadata +6 -5
- data/spec/test_apps/locknote/LockNote.exe +0 -0
data/HISTORY
CHANGED
@@ -62,3 +62,31 @@
|
|
62
62
|
== 0.3.17 / 2010-06-13
|
63
63
|
|
64
64
|
* Message fucntions now accept both Pointer and Long lParams
|
65
|
+
|
66
|
+
== 0.3.18 / 2010-06-18
|
67
|
+
|
68
|
+
* Gui::Menu module initiated
|
69
|
+
|
70
|
+
== 0.3.19 / 2010-06-18
|
71
|
+
|
72
|
+
* Gui::Menu::GetSystemMenu function added
|
73
|
+
|
74
|
+
== 0.3.20 / 2010-06-20
|
75
|
+
|
76
|
+
* Library::function now uses :fails option instead of :zeronil
|
77
|
+
|
78
|
+
== 0.3.21 / 2010-06-21
|
79
|
+
|
80
|
+
* atlres.h constants added to Win::Gui::Menu
|
81
|
+
|
82
|
+
== 0.3.22 / 2010-06-21
|
83
|
+
|
84
|
+
* Menu::AppendMenu function added
|
85
|
+
|
86
|
+
== 0.3.23 / 2010-06-21
|
87
|
+
|
88
|
+
* Menu::InsertMenu function added
|
89
|
+
|
90
|
+
== 0.3.24 / 2010-06-21
|
91
|
+
|
92
|
+
* Menu::DeleteMenu function added
|
data/README.rdoc
CHANGED
@@ -77,7 +77,7 @@ natural inside Ruby code. Following the principle of least surprise, we define w
|
|
77
77
|
* Have meaningful Rubyesque names (iconic? and minimized? instead of IsIconic, etc)
|
78
78
|
* Require minimum arguments with sensible defaults
|
79
79
|
* Return appropriate values explicitly (several return values if necessary)
|
80
|
-
* Have sensible returns (false/true instead of 0/nonzero for test functions, nil if
|
80
|
+
* Have sensible returns (false/true instead of 0/nonzero for test functions, nil if function fails, etc)
|
81
81
|
* Accept blocks where callback is needed, provide default callback if no block given
|
82
82
|
* Are partitioned into appropriate namespaces, so that you can load only the modules you really need
|
83
83
|
|
@@ -134,8 +134,10 @@ Contributors always welcome!
|
|
134
134
|
module YourLibModule
|
135
135
|
include Win::Library
|
136
136
|
|
137
|
-
# Customizing method behavior
|
138
|
-
|
137
|
+
# Customizing method behavior -
|
138
|
+
# :fails option forces function to return nil if its result is equal to specified error code (0)
|
139
|
+
# :snake_name option defines method with given snake_case name
|
140
|
+
function :FindWindow, [:pointer, :pointer], :ulong, fails: 0, snake_name: :my_find
|
139
141
|
|
140
142
|
# Customizing even further: your own method extension in attached block
|
141
143
|
function :GetWindowText, [ :ulong, :pointer, :int ], :int do |api, handle|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.24
|
data/lib/win/dde.rb
CHANGED
@@ -18,11 +18,11 @@ module Win
|
|
18
18
|
DNS_UNREGISTER = 2
|
19
19
|
# Turns on service name initiation filtering. The filter prevents a server from receiving
|
20
20
|
# XTYP_CONNECT transactions for service names it has not registered. This is the default
|
21
|
-
# setting for this filter. If a server
|
22
|
-
# the
|
21
|
+
# setting for this filter. If a server App does not register any service names,
|
22
|
+
# the App cannot receive XTYP_WILDCONNECT transactions.
|
23
23
|
DNS_FILTERON = 4
|
24
24
|
# Turns off service name initiation filtering. If this flag is specified, the server
|
25
|
-
# receives an XTYP_CONNECT transaction whenever another DDE
|
25
|
+
# receives an XTYP_CONNECT transaction whenever another DDE App calls the
|
26
26
|
# DdeConnect function, regardless of the service name.
|
27
27
|
DNS_FILTEROFF = 8
|
28
28
|
|
@@ -109,28 +109,28 @@ module Win
|
|
109
109
|
|
110
110
|
# DdeInitialize afCmd flaggs:
|
111
111
|
|
112
|
-
# Registers the
|
112
|
+
# Registers the App as a standard (nonmonitoring) DDEML App.
|
113
113
|
APPCLASS_STANDARD = 0
|
114
|
-
# Makes it possible for the
|
115
|
-
# This flag is for use by DDE monitoring
|
114
|
+
# Makes it possible for the App to monitor DDE activity in the system.
|
115
|
+
# This flag is for use by DDE monitoring Apps. The App specifies the types of DDE
|
116
116
|
# activity to monitor by combining one or more monitor flags with the APPCLASS_MONITOR flag.
|
117
117
|
APPCLASS_MONITOR = 0x00000001
|
118
118
|
# ?
|
119
119
|
APPCLASS_MASK = 0x0000000F
|
120
|
-
# Prevents the
|
120
|
+
# Prevents the App from becoming a server in a DDE conversation. The App can only be a client.
|
121
121
|
# This flag reduces consumption of resources by the DDEML. It includes the CBF_FAIL_ALLSVRXACTIONS flag.
|
122
122
|
APPCMD_CLIENTONLY = 0x00000010
|
123
|
-
# Prevents the DDEML from sending XTYP_CONNECT and XTYP_WILDCONNECT transactions to the
|
124
|
-
# the
|
123
|
+
# Prevents the DDEML from sending XTYP_CONNECT and XTYP_WILDCONNECT transactions to the App until
|
124
|
+
# the App has created its string handles and registered its service names or has turned off filtering
|
125
125
|
# by a subsequent call to the DdeNameService or DdeInitialize function. This flag is always in effect when an
|
126
|
-
#
|
127
|
-
# On subsequent calls to DdeInitialize, not specifying this flag turns off the
|
128
|
-
# filters, but specifying it turns on the
|
126
|
+
# App calls DdeInitialize for the first time, regardless of whether the App specifies the flag.
|
127
|
+
# On subsequent calls to DdeInitialize, not specifying this flag turns off the App's service-name
|
128
|
+
# filters, but specifying it turns on the App's service name filters.
|
129
129
|
APPCMD_FILTERINITS = 0x00000020
|
130
130
|
# ?
|
131
131
|
APPCMD_MASK = 0x00000FF0
|
132
|
-
# Prevents the callback function from receiving XTYP_CONNECT transactions from the
|
133
|
-
# This flag prevents an
|
132
|
+
# Prevents the callback function from receiving XTYP_CONNECT transactions from the App's own instance.
|
133
|
+
# This flag prevents an App from establishing a DDE conversation with its own instance. An App
|
134
134
|
# should use this flag if it needs to communicate with other instances of itself but not with itself.
|
135
135
|
CBF_FAIL_SELFCONNECTIONS = 0x00001000
|
136
136
|
# Prevents the callback function from receiving XTYP_CONNECT and XTYP_WILDCONNECT.
|
@@ -148,7 +148,7 @@ module Win
|
|
148
148
|
# to a client that sends an XTYP_REQUEST transaction to the server.
|
149
149
|
CBF_FAIL_REQUESTS = 0x00020000
|
150
150
|
# Prevents the callback function from receiving server transactions. The system returns DDE_FNOTPROCESSED to each
|
151
|
-
# client that sends a transaction to this
|
151
|
+
# client that sends a transaction to this App. This flag is equivalent to combining all CBF_FAIL_ flags.
|
152
152
|
CBF_FAIL_ALLSVRXACTIONS = 0x0003f000
|
153
153
|
# Prevents the callback function from receiving XTYP_CONNECT_CONFIRM.
|
154
154
|
CBF_SKIP_CONNECT_CONFIRMS = 0x00040000
|
@@ -160,12 +160,12 @@ module Win
|
|
160
160
|
CBF_SKIP_DISCONNECTS = 0x00200000
|
161
161
|
# Prevents the callback function from receiving any notifications. Equivalent to combining all CBF_SKIP_ flags.
|
162
162
|
CBF_SKIP_ALLNOTIFICATIONS = 0x003c0000
|
163
|
-
# Notifies the callback function whenever a DDE
|
163
|
+
# Notifies the callback function whenever a DDE App creates, frees, or increments the usage count of
|
164
164
|
# a string handle or whenever a string handle is freed as a result of a call to the DdeUninitialize function.
|
165
165
|
MF_HSZ_INFO = 0x01000000
|
166
|
-
# Notifies the callback function whenever the system or an
|
166
|
+
# Notifies the callback function whenever the system or an App sends a DDE message.
|
167
167
|
MF_SENDMSGS = 0x02000000
|
168
|
-
# Notifies the callback function whenever the system or an
|
168
|
+
# Notifies the callback function whenever the system or an App posts a DDE message.
|
169
169
|
MF_POSTMSGS = 0x04000000
|
170
170
|
# Notifies the callback function whenever a transaction is sent to any DDE callback function in the system.
|
171
171
|
MF_CALLBACKS = 0x08000000
|
@@ -223,21 +223,21 @@ module Win
|
|
223
223
|
# A DDEML function was called without first calling the DdeInitialize function, or an invalid instance
|
224
224
|
# identifier was passed to a DDEML function.
|
225
225
|
DMLERR_DLL_NOT_INITIALIZED = 0x4003
|
226
|
-
# An
|
227
|
-
# or an
|
226
|
+
# An App initialized as APPCLASS_MONITOR has attempted to perform a Dynamic Data Exchange (DDE) transaction,
|
227
|
+
# or an App initialized as APPCMD_CLIENTONLY has attempted to perform server transactions.
|
228
228
|
DMLERR_DLL_USAGE = 0x4004
|
229
229
|
# A request for a synchronous execute transaction has timed out.
|
230
230
|
DMLERR_EXECACKTIMEOUT = 0x4005
|
231
231
|
# A parameter failed to be validated by the DDEML. Some of the possible causes follow:
|
232
|
-
# - The
|
232
|
+
# - The App used a data handle initialized with a different item name handle than was required by the
|
233
233
|
# transaction.
|
234
|
-
# - The
|
234
|
+
# - The App used a data handle that was initialized with a different clipboard data format than was
|
235
235
|
# required by the transaction.
|
236
|
-
# - The
|
237
|
-
# - The
|
238
|
-
# - More than one instance of the
|
236
|
+
# - The App used a client-side conversation handle with a server-side function or vice versa.
|
237
|
+
# - The App used a freed data handle or string handle.
|
238
|
+
# - More than one instance of the App used the same object.
|
239
239
|
DMLERR_INVALIDPARAMETER = 0x4006
|
240
|
-
# A DDEML
|
240
|
+
# A DDEML App has created a prolonged race condition (in which the server App
|
241
241
|
# outruns the client), causing large amounts of memory to be consumed.
|
242
242
|
DMLERR_LOW_MEMORY = 0x4007
|
243
243
|
# A memory allocation has failed.
|
@@ -250,7 +250,7 @@ module Win
|
|
250
250
|
DMLERR_POKEACKTIMEOUT = 0x400b
|
251
251
|
# An internal call to the PostMessage function has failed.
|
252
252
|
DMLERR_POSTMSG_FAILED = 0x400c
|
253
|
-
# An
|
253
|
+
# An App instance with a synchronous transaction already in progress attempted to initiate another
|
254
254
|
# synchronous transaction, or the DdeEnableCallback function was called from within a DDEML callback function.
|
255
255
|
DMLERR_REENTRANCY = 0x400d
|
256
256
|
# A server-side transaction was attempted on a conversation terminated by the client, or the server terminated
|
@@ -260,7 +260,7 @@ module Win
|
|
260
260
|
DMLERR_SYS_ERROR = 0x400f
|
261
261
|
# A request to end an advise transaction has timed out.
|
262
262
|
DMLERR_UNADVACKTIMEOUT = 0x4010
|
263
|
-
# An invalid transaction identifier was passed to a DDEML function. Once the
|
263
|
+
# An invalid transaction identifier was passed to a DDEML function. Once the App has returned from an
|
264
264
|
# XTYP_XACT_COMPLETE callback, the transaction identifier for that callback function is no longer valid.
|
265
265
|
DMLERR_UNFOUND_QUEUE_ID = 0x4011
|
266
266
|
# Last (highest) error code
|
@@ -275,26 +275,26 @@ module Win
|
|
275
275
|
DMLERR_DATAACKTIMEOUT => 'A request for a synchronous data transaction has timed out.',
|
276
276
|
DMLERR_DLL_NOT_INITIALIZED => 'A DDEML function was called without first calling the DdeInitialize ' +
|
277
277
|
'function, or an invalid instance identifier was passed to a DDEML function.',
|
278
|
-
DMLERR_DLL_USAGE => 'An
|
279
|
-
'transaction, or an
|
278
|
+
DMLERR_DLL_USAGE => 'An App initialized as APPCLASS_MONITOR has attempted to perform a DDE ' +
|
279
|
+
'transaction, or an App initialized as APPCMD_CLIENTONLY has attempted to perform ' +
|
280
280
|
'server transactions.',
|
281
281
|
DMLERR_EXECACKTIMEOUT => 'A request for a synchronous execute transaction has timed out.',
|
282
282
|
DMLERR_INVALIDPARAMETER => 'A parameter failed to be validated by the DDEML. Possible causes: ' +
|
283
|
-
'
|
283
|
+
'App used a data handle initialized with a different item name handle than was required ' +
|
284
284
|
'by the transaction. ' +
|
285
|
-
'The
|
285
|
+
'The App used a data handle that was initialized with a different clipboard data format ' +
|
286
286
|
'than was required by the transaction. ' +
|
287
|
-
'The
|
288
|
-
'The
|
289
|
-
'More than one instance of the
|
290
|
-
DMLERR_LOW_MEMORY => 'A DDEML
|
291
|
-
'
|
287
|
+
'The App used a client-side conversation handle with server-side function or vice versa. ' +
|
288
|
+
'The App used a freed data handle or string handle. ' +
|
289
|
+
'More than one instance of the App used the same object.',
|
290
|
+
DMLERR_LOW_MEMORY => 'A DDEML App has created a prolonged race condition (in which the server ' +
|
291
|
+
'App outruns the client), causing large amounts of memory to be consumed.',
|
292
292
|
DMLERR_MEMORY_ERROR => 'A memory allocation has failed.',
|
293
293
|
DMLERR_NO_CONV_ESTABLISHED => 'A client`s attempt to establish a conversation has failed.',
|
294
294
|
DMLERR_NOTPROCESSED => 'A transaction has failed.',
|
295
295
|
DMLERR_POKEACKTIMEOUT => 'A request for a synchronous poke transaction has timed out.',
|
296
296
|
DMLERR_POSTMSG_FAILED => 'An internal call to the PostMessage function has failed.',
|
297
|
-
DMLERR_REENTRANCY => 'An
|
297
|
+
DMLERR_REENTRANCY => 'An App instance with a synchronous transaction already in progress ' +
|
298
298
|
'attempted to initiate another synchronous transaction, or the DdeEnableCallback function ' +
|
299
299
|
'was called from within a DDEML callback function.',
|
300
300
|
DMLERR_SERVER_DIED => 'A server-side transaction was attempted on a conversation terminated by the ' +
|
@@ -302,7 +302,7 @@ module Win
|
|
302
302
|
DMLERR_SYS_ERROR => 'An internal error has occurred in the DDEML.',
|
303
303
|
DMLERR_UNADVACKTIMEOUT => 'A request to end an advise transaction has timed out.',
|
304
304
|
DMLERR_UNFOUND_QUEUE_ID => 'An invalid transaction identifier was passed to a DDEML function. Once the ' +
|
305
|
-
'
|
305
|
+
'App has returned from an XTYP_XACT_COMPLETE callback, the transaction identifier for ' +
|
306
306
|
'that callback function is no longer valid.'
|
307
307
|
}
|
308
308
|
|
@@ -338,8 +338,8 @@ module Win
|
|
338
338
|
TIMEOUT_ASYNC = 0xFFFFFFFF
|
339
339
|
|
340
340
|
# The MONCBSTRUCT structure contains information about the current Dynamic Data Exchange (DDE)
|
341
|
-
# transaction. A DDE debugging
|
342
|
-
# system passes to the DDE callback functions of other
|
341
|
+
# transaction. A DDE debugging App can use this structure when monitoring transactions that the
|
342
|
+
# system passes to the DDE callback functions of other Apps.
|
343
343
|
#
|
344
344
|
# [*Typedef*] struct { UINT cb; DWORD dwTime; HANDLE hTask; DWORD dwRet; UINT wType; UINT wFmt; HCONV
|
345
345
|
# hConv; HSZ hsz1; HSZ hsz2; HDDEDATA hData; ULONG_PTR dwData1; ULONG_PTR dwData2;
|
@@ -365,8 +365,8 @@ module Win
|
|
365
365
|
# ---
|
366
366
|
# *Information*:
|
367
367
|
# Header Declared in Ddeml.h, include Windows.h
|
368
|
-
|
369
|
-
class MonCbStruct < FFI::Struct
|
368
|
+
#
|
369
|
+
class MonCbStruct < FFI::Struct
|
370
370
|
layout :cb, :uint,
|
371
371
|
:dw_time, :uint32,
|
372
372
|
:h_task, :ulong,
|
@@ -385,7 +385,7 @@ module Win
|
|
385
385
|
end
|
386
386
|
|
387
387
|
# The MONCONVSTRUCT structure contains information about a Dynamic Data Exchange (DDE) conversation. A
|
388
|
-
# DDE monitoring
|
388
|
+
# DDE monitoring App can use this structure to obtain information about a conversation that has
|
389
389
|
# been established or has terminated.
|
390
390
|
#
|
391
391
|
# [*Typedef*] struct { UINT cb; BOOL fConnect; DWORD dwTime; HANDLE hTask; HSZ hszSvc; HSZ hszTopic;
|
@@ -396,7 +396,7 @@ module Win
|
|
396
396
|
# conversation is established; FALSE indicates it is not.
|
397
397
|
# dwTime:: Specifies the Windows time at which the conversation was established or terminated. Windows
|
398
398
|
# time is the number of milliseconds that have elapsed since the system was booted.
|
399
|
-
# hTask:: Handle to a task (
|
399
|
+
# hTask:: Handle to a task (App instance) that is a partner in the conversation.
|
400
400
|
# hszSvc:: Handle to the service name on which the conversation is established.
|
401
401
|
# hszTopic:: Handle to the topic name on which the conversation is established.
|
402
402
|
# hConvClient:: Handle to the client conversation.
|
@@ -408,7 +408,7 @@ module Win
|
|
408
408
|
# Similarly, conversation handles are local to the instance; therefore, the hConvClient and hConvServer
|
409
409
|
# members are window handles.
|
410
410
|
# The hConvClient and hConvServer members of the MONCONVSTRUCT structure do not hold the same value as
|
411
|
-
# would be seen by the
|
411
|
+
# would be seen by the Apps engaged in the conversation. Instead, they hold a globally unique
|
412
412
|
# pair of values that identify the conversation.
|
413
413
|
# ---
|
414
414
|
# Structure Information:
|
@@ -426,7 +426,7 @@ module Win
|
|
426
426
|
end
|
427
427
|
|
428
428
|
# The MONERRSTRUCT structure contains information about the current Dynamic Data Exchange (DDE) error. A
|
429
|
-
# DDE monitoring
|
429
|
+
# DDE monitoring App can use this structure to monitor errors returned by DDE Management Library
|
430
430
|
# functions.
|
431
431
|
#
|
432
432
|
# [*Typedef*] struct { UINT cb; UINT wLastError; DWORD dwTime; HANDLE hTask } MONERRSTRUCT;
|
@@ -435,12 +435,12 @@ module Win
|
|
435
435
|
# wLastError:: Specifies the current error.
|
436
436
|
# dwTime:: Specifies the Windows time at which the error occurred. Windows time is the number of
|
437
437
|
# milliseconds that have elapsed since the system was booted.
|
438
|
-
# hTask:: Handle to the task (
|
438
|
+
# hTask:: Handle to the task (App instance) that called the DDE function that caused the error.
|
439
439
|
# ---
|
440
440
|
# Structure Information:
|
441
441
|
# Header Declared in Ddeml.h, include Windows.h
|
442
442
|
#
|
443
|
-
class MonErrStruct < FFI::Struct
|
443
|
+
class MonErrStruct < FFI::Struct
|
444
444
|
layout :cb, :uint,
|
445
445
|
:w_last_error, :uint,
|
446
446
|
:dw_time, :uint32,
|
@@ -453,29 +453,29 @@ module Win
|
|
453
453
|
MH_CLEANUP = 4
|
454
454
|
|
455
455
|
# The MONHSZSTRUCT structure contains information about a Dynamic Data Exchange (DDE) string handle. A
|
456
|
-
# DDE monitoring
|
456
|
+
# DDE monitoring App can use this structure when monitoring the activity of the string manager
|
457
457
|
# component of the DDE Management Library.
|
458
458
|
#
|
459
459
|
# [*Typedef*] struct { UINT cb; BOOL fsAction; DWORD dwTime; HSZ hsz; HANDLE hTask; TCHAR str[1] } MONHSZSTRUCT;
|
460
460
|
#
|
461
461
|
# cb:: Specifies the structure's size, in bytes.
|
462
462
|
# fsAction:: Specifies the action being performed on the string identified by the hsz member.
|
463
|
-
# MH_CLEANUP:: An
|
464
|
-
# the
|
465
|
-
# MH_CREATE:: An
|
466
|
-
# MH_DELETE:: An
|
467
|
-
# MH_KEEP:: An
|
463
|
+
# MH_CLEANUP:: An App is freeing its DDE resources, causing the system to delete string handles
|
464
|
+
# the App had created. (The App called the DdeUninitialize function.)
|
465
|
+
# MH_CREATE:: An App is creating a string handle. (The app called the DdeCreateStringHandle)
|
466
|
+
# MH_DELETE:: An App is deleting a string handle. (The app called the DdeFreeStringHandle)
|
467
|
+
# MH_KEEP:: An App is increasing the usage count of a string handle. (The App called the
|
468
468
|
# DdeKeepStringHandle function.)
|
469
469
|
# dwTime:: Specifies the Windows time at which the action specified by the fsAction member takes place.
|
470
470
|
# Windows time is the number of milliseconds that have elapsed since the system was booted.
|
471
471
|
# hsz:: Handle to the string. Because string handles are local to the process, this member is a global atom.
|
472
|
-
# hTask:: Handle to the task (
|
472
|
+
# hTask:: Handle to the task (App instance) performing the action on the string handle.
|
473
473
|
# str:: Pointer to the string identified by the hsz member.
|
474
474
|
# ---
|
475
475
|
# Structure Information
|
476
476
|
# Header Declared in Ddeml.h, include Windows.h
|
477
477
|
#
|
478
|
-
class MonHszStruct < FFI::Struct
|
478
|
+
class MonHszStruct < FFI::Struct
|
479
479
|
layout :cb, :uint,
|
480
480
|
:fs_action, :uchar,
|
481
481
|
:dw_time, :uint32,
|
@@ -485,7 +485,7 @@ module Win
|
|
485
485
|
end
|
486
486
|
|
487
487
|
# The MONLINKSTRUCT structure contains information about a Dynamic Data Exchange (DDE) advise loop. A
|
488
|
-
# DDE monitoring
|
488
|
+
# DDE monitoring App can use this structure to obtain information about an advise loop that has
|
489
489
|
# started or ended.
|
490
490
|
#
|
491
491
|
# [*Typedef*] struct { UINT cb; DWORD dwTime; HANDLE hTask; BOOL fEstablished; BOOL fNoData; HSZ hszSvc;
|
@@ -495,7 +495,7 @@ module Win
|
|
495
495
|
# cb:: Specifies the structure's size, in bytes.
|
496
496
|
# dwTime:: Specifies the Windows time at which the advise loop was started or ended. Windows time is the
|
497
497
|
# number of milliseconds that have elapsed since the system was booted.
|
498
|
-
# hTask:: Handle to a task (
|
498
|
+
# hTask:: Handle to a task (App instance) that is a partner in the advise loop.
|
499
499
|
# fEstablished:: Indicates whether an advise loop was successfully established. A value of TRUE
|
500
500
|
# indicates an advise loop was established; FALSE indicates it was not.
|
501
501
|
# fNoData:: Indicates whether the XTYPF_NODATA flag is set for the advise loop. A value of TRUE
|
@@ -512,13 +512,13 @@ module Win
|
|
512
512
|
# *Remarks*:
|
513
513
|
# Because string handles are local to the process, the hszSvc, hszTopic, and hszItem members are global atoms.
|
514
514
|
# The hConvClient and hConvServer members of the MONLINKSTRUCT structure do not hold the same value as
|
515
|
-
# would be seen by the
|
515
|
+
# would be seen by the Apps engaged in the conversation. Instead, they hold a globally unique
|
516
516
|
# pair of values that identify the conversation.
|
517
517
|
# ---
|
518
518
|
# Structure Information
|
519
519
|
# Header Declared in Ddeml.h, include Windows.h
|
520
520
|
#
|
521
|
-
class MonLinkStruct < FFI::Struct
|
521
|
+
class MonLinkStruct < FFI::Struct
|
522
522
|
layout :cb, :uint,
|
523
523
|
:dw_time, :uint32,
|
524
524
|
:h_task, :ulong,
|
@@ -534,7 +534,7 @@ module Win
|
|
534
534
|
end
|
535
535
|
|
536
536
|
# The MONMSGSTRUCT structure contains information about a Dynamic Data Exchange (DDE) message. A DDE
|
537
|
-
# monitoring
|
537
|
+
# monitoring App can use this structure to obtain information about a DDE message that was sent
|
538
538
|
# or posted.
|
539
539
|
#
|
540
540
|
# [*Typedef*] struct { UINT cb; HWND hwndTo; DWORD dwTime; HANDLE hTask; UINT wMsg; WPARAM wParam;
|
@@ -544,7 +544,7 @@ module Win
|
|
544
544
|
# hwndTo:: Handle to the window that receives the DDE message.
|
545
545
|
# dwTime:: Specifies the Windows time at which the message was sent or posted. Windows time is the
|
546
546
|
# number of milliseconds that have elapsed since the system was booted.
|
547
|
-
# hTask:: Handle to the task (
|
547
|
+
# hTask:: Handle to the task (App instance) containing the window that receives the DDE message.
|
548
548
|
# wMsg:: Specifies the identifier of the DDE message.
|
549
549
|
# wParam:: Specifies the wParam parameter of the DDE message.
|
550
550
|
# lParam:: Specifies the lParam parameter of the DDE message.
|
@@ -553,7 +553,7 @@ module Win
|
|
553
553
|
# Structure Information
|
554
554
|
# Header Declared in Ddeml.h, include Windows.h
|
555
555
|
#
|
556
|
-
class MonMsgStruct < FFI::Struct
|
556
|
+
class MonMsgStruct < FFI::Struct
|
557
557
|
layout :cb, :uint,
|
558
558
|
:hwnd_to, :ulong,
|
559
559
|
:dw_time, :uint32,
|
@@ -566,7 +566,7 @@ module Win
|
|
566
566
|
|
567
567
|
# The DDEML_MSG_HOOK_DATA structure contains information about a Dynamic Data Exchange (DDE) message,
|
568
568
|
# and provides read access to the data referenced by the message. This structure is intended to be used
|
569
|
-
# by a Dynamic Data Exchange Management Library (DDEML) monitoring
|
569
|
+
# by a Dynamic Data Exchange Management Library (DDEML) monitoring App.
|
570
570
|
#
|
571
571
|
# [*Typedef*] struct { UINT_PTR uiLo; UINT_PTR uiHi; DWORD cbData; DWORD Data } DDEML_MSG_HOOK_DATA;
|
572
572
|
#
|
@@ -578,7 +578,7 @@ module Win
|
|
578
578
|
# Structure Information
|
579
579
|
# Header Declared in Ddeml.h, include Windows.h
|
580
580
|
#
|
581
|
-
class DdemlMsgHookData < FFI::Struct
|
581
|
+
class DdemlMsgHookData < FFI::Struct
|
582
582
|
layout :ui_lo, :uint,
|
583
583
|
:ui_hi, :uint,
|
584
584
|
:cb_data, :uint32,
|
@@ -598,7 +598,7 @@ module Win
|
|
598
598
|
# ---
|
599
599
|
# *Remarks*:
|
600
600
|
# If a registered format with the specified name already exists, a new format is not registered and the
|
601
|
-
# return value identifies the existing format. This enables more than one
|
601
|
+
# return value identifies the existing format. This enables more than one App to copy and paste
|
602
602
|
# data using the same registered clipboard format. Note that the comparison is case-insensitive.
|
603
603
|
# Registered clipboard formats are identified by values in the range 0xC000 through 0xFFFF.
|
604
604
|
# When registered clipboard formats are placed on or retrieved from the clipboard, they must be in the
|
@@ -607,12 +607,12 @@ module Win
|
|
607
607
|
# :call-seq:
|
608
608
|
# format_id = register_clipboard_format( format_name )
|
609
609
|
#
|
610
|
-
function :RegisterClipboardFormat, [:pointer], :uint,
|
610
|
+
function :RegisterClipboardFormat, [:pointer], :uint, fails: 0
|
611
611
|
|
612
612
|
##
|
613
|
-
# The DdeCallback function is an
|
613
|
+
# The DdeCallback function is an App-defined callback function used with the Dynamic Data Exchange
|
614
614
|
# Management Library (DDEML) functions. It processes Dynamic Data Exchange (DDE) transactions. The PFNCALLBACK
|
615
|
-
# type defines a pointer to this callback function. DdeCallback is a placeholder for the
|
615
|
+
# type defines a pointer to this callback function. DdeCallback is a placeholder for the App-defined
|
616
616
|
# function name.
|
617
617
|
#
|
618
618
|
# [*Syntax*] HDDEDATA CALLBACK DdeCallback( UINT uType, UINT uFmt, HCONV hconv, HDDEDATA hsz1, HDDEDATA hsz2,
|
@@ -628,9 +628,9 @@ module Win
|
|
628
628
|
# hsz1:: Handle to the topic name.
|
629
629
|
# hsz2:: Handle to the service name.
|
630
630
|
# dwData1:: Pointer to a CONVCONTEXT structure that contains context information for the conversation.
|
631
|
-
# If the client is not a Dynamic Data Exchange Management Library (DDEML)
|
631
|
+
# If the client is not a Dynamic Data Exchange Management Library (DDEML) App,
|
632
632
|
# this parameter is 0.
|
633
|
-
# dwData2:: Specifies whether the client is the same
|
633
|
+
# dwData2:: Specifies whether the client is the same App instance as the server. If the
|
634
634
|
# parameter is 1, the client is the same instance. If the parameter is 0, the client
|
635
635
|
# is a different instance.
|
636
636
|
# *Returns*:: A server callback function should return TRUE to allow the client to establish a
|
@@ -686,9 +686,9 @@ module Win
|
|
686
686
|
# ---
|
687
687
|
# *Remarks*:
|
688
688
|
# - The callback function is called asynchronously for transactions that do not involve the creation or termination
|
689
|
-
# of conversations. An
|
689
|
+
# of conversations. An App that does not frequently accept incoming messages will have reduced DDE
|
690
690
|
# performance because the Dynamic Data Exchange Management Library (DDEML) uses messages to initiate transactions.
|
691
|
-
# - An
|
691
|
+
# - An App must register the callback function by specifying a pointer to the function in a call to the
|
692
692
|
# DdeInitialize function.
|
693
693
|
#
|
694
694
|
# :call-seq:
|
@@ -697,24 +697,24 @@ module Win
|
|
697
697
|
callback :DdeCallback, [:uint, :uint, :HCONV, :HDDEDATA, :HDDEDATA, :HDDEDATA, :HDDEDATA, :HDDEDATA], :HDDEDATA
|
698
698
|
|
699
699
|
##
|
700
|
-
# The DdeInitialize function registers an
|
701
|
-
# An
|
700
|
+
# The DdeInitialize function registers an App with the Dynamic Data Exchange Management Library (DDEML).
|
701
|
+
# An App must call this function before calling any other DDEML function.
|
702
702
|
#
|
703
703
|
# [*Syntax*] UINT DdeInitialize( LPDWORD pidInst, PFNCALLBACK pfnCallback, DWORD afCmd, DWORD ulRes );
|
704
704
|
#
|
705
|
-
# pidInst:: <in, out> Pointer to the
|
705
|
+
# pidInst:: <in, out> Pointer to the App instance identifier.
|
706
706
|
# At initialization, this parameter should point to 0. If the function succeeds, this parameter points
|
707
|
-
# to the instance identifier for the
|
708
|
-
# in all other DDEML functions that require it. If an
|
709
|
-
# dynamic-link library (DLL), the
|
707
|
+
# to the instance identifier for the App. This value should be passed as the idInst parameter
|
708
|
+
# in all other DDEML functions that require it. If an App uses multiple instances of the DDEML
|
709
|
+
# dynamic-link library (DLL), the App should provide a different callback function for each
|
710
710
|
# instance. If pidInst points to a nonzero value, reinitialization of the DDEML is implied. In this
|
711
|
-
# case, pidInst must
|
712
|
-
# pfnCallback:: Pointer to the
|
711
|
+
# case, pidInst must point23 to a valid App-instance identifier.
|
712
|
+
# pfnCallback:: Pointer to the App-defined Dynamic Data Exchange DdeCallback function. This function
|
713
713
|
# processes DDE transactions sent by the system. For more information, see the DdeCallback.
|
714
714
|
# afCmd:: <in> Specifies a set of APPCMD_, CBF_, and MF_ flags. The APPCMD_ flags provide special
|
715
715
|
# instructions to DdeInitialize. The CBF_ flags specify filters that prevent specific types of transactions
|
716
716
|
# from reaching the callback function. The MF_ flags specify the types of DDE activity that a DDE monitoring
|
717
|
-
#
|
717
|
+
# App monitors. Using these flags enhances the performance of a DDE App by eliminating
|
718
718
|
# unnecessary calls to the callback function. This parameter can be one or more of the following values:
|
719
719
|
# APPCLASS_MONITOR, APPCLASS_STANDARD, APPCMD_CLIENTONLY, APPCMD_FILTERINITS;
|
720
720
|
# CBF_FAIL_ALLSVRXACTIONS, CBF_FAIL_ADVISES, CBF_FAIL_CONNECTIONS, CBF_FAIL_EXECUTES, CBF_FAIL_POKES
|
@@ -730,14 +730,14 @@ module Win
|
|
730
730
|
# - DMLERR_SYS_ERROR
|
731
731
|
# ---
|
732
732
|
# <b> Enhanced API accepts only 2 parameters (get rid of reserved hsz2):
|
733
|
-
# instance_id:: (optional)
|
733
|
+
# instance_id:: (optional) App instance identifier. At initialization, this parameter should be 0, nil
|
734
734
|
# or omitted altogether. If it is nonzero/non-nil, reinitialization of the DDEML is implied.
|
735
735
|
# cmd(afCmd):: obligatory set of flags
|
736
736
|
# ---
|
737
737
|
# *Remarks*:
|
738
|
-
# - An
|
739
|
-
# - A DDE monitoring
|
740
|
-
# issue transactions, and so on) within the context of the same
|
738
|
+
# - An App that uses multiple instances of the DDEML must not pass DDEML objects between instances.
|
739
|
+
# - A DDE monitoring App should not attempt to perform DDE operations (establish conversations,
|
740
|
+
# issue transactions, and so on) within the context of the same App instance.
|
741
741
|
# - A synchronous transaction fails with a DMLERR_REENTRANCY error if any instance of the same task has
|
742
742
|
# a synchronous transaction already in progress.
|
743
743
|
# - The CBF_FAIL_ALLSVRXACTIONS flag causes the DDEML to filter all server transactions and can be changed
|
@@ -763,16 +763,16 @@ module Win
|
|
763
763
|
|
764
764
|
##
|
765
765
|
# The DdeUninitialize function frees all Dynamic Data Exchange Management Library (DDEML) resources associated
|
766
|
-
# with the calling
|
766
|
+
# with the calling App.
|
767
767
|
#
|
768
768
|
# [*Syntax*] BOOL DdeUninitialize( DWORD idInst);
|
769
769
|
#
|
770
|
-
# idInst:: <in> Specifies the
|
770
|
+
# idInst:: <in> Specifies the App instance identifier obtained by a previous call to the DdeInitialize.
|
771
771
|
# *Returns*:: If the function succeeds, the return value is nonzero.
|
772
772
|
# If the function fails, the return value is zero.
|
773
773
|
# ---
|
774
774
|
# *Remarks*
|
775
|
-
# DdeUninitialize terminates any conversations currently open for the
|
775
|
+
# DdeUninitialize terminates any conversations currently open for the App.
|
776
776
|
#
|
777
777
|
# :call-seq:
|
778
778
|
# success = dde_uninitialize( instance_id )
|
@@ -781,19 +781,19 @@ module Win
|
|
781
781
|
|
782
782
|
##
|
783
783
|
# The DdeCreateStringHandle function creates a handle that identifies the specified string.
|
784
|
-
# A Dynamic Data Exchange (DDE) client or server
|
784
|
+
# A Dynamic Data Exchange (DDE) client or server App can pass the string handle as a
|
785
785
|
# parameter to other Dynamic Data Exchange Management Library (DDEML) functions.
|
786
786
|
#
|
787
787
|
# [*Syntax*] HSZ DdeCreateStringHandle( DWORD idInst, LPTSTR psz, int iCodePage );
|
788
788
|
#
|
789
|
-
# idInst:: <in> Specifies the
|
789
|
+
# idInst:: <in> Specifies the App instance identifier obtained by a previous call to the
|
790
790
|
# DdeInitialize function.
|
791
791
|
# psz:: <in> Pointer to a buffer that contains the null-terminated string for which a handle
|
792
792
|
# is to be created. This string can be up to 255 characters. The reason for this limit is that
|
793
793
|
# DDEML string management functions are implemented using global atoms.
|
794
794
|
# iCodePage:: <in> Specifies the code page used to render the string. This value should be either
|
795
795
|
# CP_WINANSI (the default code page) or CP_WINUNICODE, depending on whether the ANSI or Unicode
|
796
|
-
# version of DdeInitialize was called by the client
|
796
|
+
# version of DdeInitialize was called by the client App.
|
797
797
|
#
|
798
798
|
# *Returns*:: (L) or nil: If the function succeeds, the return value is a string handle.
|
799
799
|
# If the function fails, the return value is 0(changed to nil in enhanced version).
|
@@ -803,25 +803,25 @@ module Win
|
|
803
803
|
# <b> Enhanced (snake_case) API makes code_page param optional and returns *nil* if handle creation fails. </b>
|
804
804
|
# ---
|
805
805
|
# *Remarks*: The value of a string handle is not related to the case of the string it identifies.
|
806
|
-
# When an
|
807
|
-
# and then uses the DdeKeepStringHandle function to keep it, the
|
806
|
+
# When an App either creates a string handle or receives one in the callback function
|
807
|
+
# and then uses the DdeKeepStringHandle function to keep it, the App must free that string
|
808
808
|
# handle when it is no longer needed. An instance-specific string handle cannot be mapped from string
|
809
809
|
# handle to string and back to string handle.
|
810
810
|
#
|
811
811
|
# :call-seq:
|
812
812
|
# string_handle = dde_create_string_handle( instance_id, string, code_page_id )
|
813
813
|
#
|
814
|
-
function :DdeCreateStringHandle, [:uint32, :pointer, :int], :ulong,
|
814
|
+
function :DdeCreateStringHandle, [:uint32, :pointer, :int], :ulong, fails: 0,
|
815
815
|
&->(api, instance_id, string, code_page=CP_WINANSI){
|
816
816
|
string_pointer = FFI::MemoryPointer.from_string(string)
|
817
817
|
api.call(instance_id, string_pointer, code_page) }
|
818
818
|
|
819
819
|
##
|
820
|
-
# The DdeFreeStringHandle function frees a string handle in the calling
|
820
|
+
# The DdeFreeStringHandle function frees a string handle in the calling App.
|
821
821
|
#
|
822
822
|
# [*Syntax*] BOOL DdeFreeStringHandle( DWORD idInst, HSZ hsz );
|
823
823
|
#
|
824
|
-
# idInst:: <in> Specifies the
|
824
|
+
# idInst:: <in> Specifies the App instance identifier obtained by a previous call to the DdeInitialize.
|
825
825
|
# hsz:: <in, out> Handle to the string handle to be freed. This handle must have been created by a previous call
|
826
826
|
# to the DdeCreateStringHandle function.
|
827
827
|
# *Returns*:: If the function succeeds, the return value is nonzero. If the function fails, it is zero.
|
@@ -829,8 +829,8 @@ module Win
|
|
829
829
|
# <b> Enhanced snake_case API returns boolean true/false as a success indicator. </b>
|
830
830
|
# ---
|
831
831
|
# *Remarks*:
|
832
|
-
# An
|
833
|
-
# the system passed to the
|
832
|
+
# An App can free string handles it creates with DdeCreateStringHandle but should not free those that
|
833
|
+
# the system passed to the App's Dynamic Data Exchange (DDE) callback function or those returned in the
|
834
834
|
# CONVINFO structure by the DdeQueryConvInfo function.
|
835
835
|
#
|
836
836
|
# :call-seq:
|
@@ -843,7 +843,7 @@ module Win
|
|
843
843
|
#
|
844
844
|
# [*Syntax*] DWORD DdeQueryString( DWORD idInst, HSZ hsz, LPTSTR psz, DWORD cchMax, int iCodePage);
|
845
845
|
#
|
846
|
-
# idInst:: <in> Specifies the
|
846
|
+
# idInst:: <in> Specifies the App instance identifier obtained by a previous call to the DdeInitialize.
|
847
847
|
# hsz:: <in> Handle to the string to copy. This handle must have been created by a previous call to the
|
848
848
|
# DdeCreateStringHandle function.
|
849
849
|
# psz:: <in, out> Pointer to a buffer that receives the string. To obtain the length of the string, this parameter
|
@@ -860,7 +860,7 @@ module Win
|
|
860
860
|
# the terminating null character). If an error occurs, the return value is 0L.
|
861
861
|
# ---
|
862
862
|
# <b> Enhanced (snake_case) API makes all args optional except for first (dde instance id), and returns nil if
|
863
|
-
# the function was unsuccessful
|
863
|
+
# the function was unsuccessful. </b>
|
864
864
|
# ---
|
865
865
|
# *Remarks*
|
866
866
|
# - The string returned in the buffer is always null-terminated. If the string is longer than ( cchMax– 1),
|
@@ -880,13 +880,13 @@ module Win
|
|
880
880
|
##
|
881
881
|
# The DdeNameService function registers or unregisters the service names a Dynamic Data Exchange (DDE) server
|
882
882
|
# supports. This function causes the system to send XTYP_REGISTER or XTYP_UNREGISTER transactions to other running
|
883
|
-
# Dynamic Data Exchange Management Library (DDEML) client
|
883
|
+
# Dynamic Data Exchange Management Library (DDEML) client Apps.
|
884
884
|
#
|
885
885
|
# [*Syntax*] HDDEDATA DdeNameService( DWORD idInst, UINT hsz1, UINT hsz2, UINT afCmd );
|
886
886
|
#
|
887
|
-
# idInst:: <in> Specifies the
|
887
|
+
# idInst:: <in> Specifies the App instance identifier obtained by a previous call to the DdeInitialize.
|
888
888
|
# hsz1:: <in> Handle to the string that specifies the service name the server is registering or unregistering.
|
889
|
-
# An
|
889
|
+
# An App that is unregistering all of its service names should set this parameter to 0L.
|
890
890
|
# hsz2:: Reserved; should be set to 0L.
|
891
891
|
# afCmd:: <in> Specifies the service name options. This parameter can be one of the following values.
|
892
892
|
# DNS_REGISTER:: Registers the service name.
|
@@ -894,10 +894,10 @@ module Win
|
|
894
894
|
# all service names registered by the server will be unregistered.
|
895
895
|
# DNS_FILTERON:: Turns on service name initiation filtering. The filter prevents a server from receiving
|
896
896
|
# XTYP_CONNECT transactions for service names it has not registered. This is the default
|
897
|
-
# setting for this filter. If a server
|
898
|
-
# the
|
897
|
+
# setting for this filter. If a server App does not register any service names,
|
898
|
+
# the App cannot receive XTYP_WILDCONNECT transactions.
|
899
899
|
# DNS_FILTEROFF:: Turns off service name initiation filtering. If this flag is specified, the server
|
900
|
-
# receives an XTYP_CONNECT transaction whenever another DDE
|
900
|
+
# receives an XTYP_CONNECT transaction whenever another DDE App calls the
|
901
901
|
# DdeConnect function, regardless of the service name.
|
902
902
|
# *Returns*:: If the function succeeds, it returns nonzero (*true* in snake_case method). For CamelCase, that
|
903
903
|
# value is not really HDDEDATA value, but merely a Boolean indicator of success. The function is
|
@@ -914,8 +914,8 @@ module Win
|
|
914
914
|
# *Remarks*:
|
915
915
|
# The service name identified by the hsz1 parameter should be a base name (that is, the name should contain no
|
916
916
|
# instance-specific information). The system generates an instance-specific name and sends it along with the
|
917
|
-
# base name during the XTYP_REGISTER and XTYP_UNREGISTER transactions. The receiving
|
918
|
-
# connect to the specific
|
917
|
+
# base name during the XTYP_REGISTER and XTYP_UNREGISTER transactions. The receiving Apps can then
|
918
|
+
# connect to the specific App instance.
|
919
919
|
#
|
920
920
|
# :call-seq:
|
921
921
|
# success = dde_name_service( instance_id, string_handle, cmd )
|
@@ -925,13 +925,13 @@ module Win
|
|
925
925
|
# weird lambda literal instead of block is needed because RDoc goes crazy if block is attached to meta-definition
|
926
926
|
|
927
927
|
##
|
928
|
-
# DdeConnect function establishes a conversation with a server
|
928
|
+
# DdeConnect function establishes a conversation with a server App that supports the specified service
|
929
929
|
# name and topic name pair. If more than one such server exists, the system selects only one.
|
930
930
|
#
|
931
931
|
# [*Syntax*] HCONV DdeConnect( DWORD idInst, HSZ hszService, HSZ hszTopic, PCONVCONTEXT pCC );
|
932
932
|
#
|
933
|
-
# idInst:: <in> Specifies the
|
934
|
-
# hszService:: <in> Handle to the string that specifies the service name of the server
|
933
|
+
# idInst:: <in> Specifies the App instance identifier obtained by a previous call to the DdeInitialize.
|
934
|
+
# hszService:: <in> Handle to the string that specifies the service name of the server App with which
|
935
935
|
# a conversation is to be established. This handle must have been created by a previous call to
|
936
936
|
# the DdeCreateStringHandle function. If this parameter is 0L, a conversation is established with
|
937
937
|
# any available server.
|
@@ -950,13 +950,13 @@ module Win
|
|
950
950
|
# - DMLERR_NO_ERROR
|
951
951
|
# ---
|
952
952
|
# *Remarks*
|
953
|
-
# - The client
|
953
|
+
# - The client App cannot make assumptions regarding the server selected. If an instance-specific name
|
954
954
|
# is specified in the hszService parameter, a conversation is established with only the specified instance.
|
955
|
-
# Instance-specific service names are passed to an
|
955
|
+
# Instance-specific service names are passed to an App's Dynamic Data Exchange (DDE) callback function
|
956
956
|
# during the XTYP_REGISTER and XTYP_UNREGISTER transactions.
|
957
957
|
# - All members of the default CONVCONTEXT structure are set to zero except cb, which specifies the size of the
|
958
958
|
# structure, and iCodePage, which specifies CP_WINANSI (the default code page) or CP_WINUNICODE, depending on
|
959
|
-
# whether the ANSI or Unicode version of the DdeInitialize function was called by the client
|
959
|
+
# whether the ANSI or Unicode version of the DdeInitialize function was called by the client App.
|
960
960
|
# ---
|
961
961
|
# <b>Enhanced (snake_case) API makes all args optional except for first (dde instance id), and returns nil if
|
962
962
|
# the function was unsuccessful.</b>
|
@@ -964,7 +964,7 @@ module Win
|
|
964
964
|
# :call-seq:
|
965
965
|
# conversation_handle = dde_connect( instance_id, [service = 0, topic = 0, context = nil] )
|
966
966
|
#
|
967
|
-
function :DdeConnect, [:uint32, :ulong, :ulong, :pointer], :ulong,
|
967
|
+
function :DdeConnect, [:uint32, :ulong, :ulong, :pointer], :ulong, fails: 0,
|
968
968
|
&->(api, instance_id, service = 0, topic = 0, context = nil){
|
969
969
|
api.call(instance_id, service, topic, context) }
|
970
970
|
|
@@ -985,7 +985,7 @@ module Win
|
|
985
985
|
# *Remarks*:
|
986
986
|
# Any incomplete transactions started before calling DdeDisconnect are immediately abandoned. The XTYP_DISCONNECT
|
987
987
|
# transaction is sent to the Dynamic Data Exchange (DDE) callback function of the partner in the conversation.
|
988
|
-
# Generally, only client
|
988
|
+
# Generally, only client Apps must terminate conversations.
|
989
989
|
# ---
|
990
990
|
# <b>Enhanced (snake_case) API returns *true/false* instead of nonzero/zero.</b>
|
991
991
|
#
|
@@ -1001,7 +1001,7 @@ module Win
|
|
1001
1001
|
#
|
1002
1002
|
# [*Syntax*] UINT DdeGetLastError( DWORD idInst );
|
1003
1003
|
#
|
1004
|
-
# idInst:: <in> Specifies the
|
1004
|
+
# idInst:: <in> Specifies the App instance identifier obtained by a previous call to the DdeInitialize.
|
1005
1005
|
#
|
1006
1006
|
# *Returns*:: If the function succeeds, the return value is the last error code, which can be one of the following:
|
1007
1007
|
# DMLERR_ADVACKTIMEOUT, DMLERR_EXECACKTIMEOUT, DMLERR_INVALIDPARAMETER, DMLERR_LOW_MEMORY, DMLERR_MEMORY_ERROR,
|
@@ -1014,18 +1014,18 @@ module Win
|
|
1014
1014
|
# :call-seq:
|
1015
1015
|
# string = dde_get_last_error( instance_id )
|
1016
1016
|
#
|
1017
|
-
function :DdeGetLastError, [:uint32], :int,
|
1017
|
+
function :DdeGetLastError, [:uint32], :int, fails: 0
|
1018
1018
|
|
1019
1019
|
##
|
1020
1020
|
# The DdeClientTransaction function begins a data transaction between a client and a server. Only a
|
1021
|
-
# Dynamic Data Exchange (DDE) client
|
1021
|
+
# Dynamic Data Exchange (DDE) client App can call this function, and the App can use it
|
1022
1022
|
# only after establishing a conversation with the server.
|
1023
1023
|
#
|
1024
1024
|
# [*Syntax*] HDDEDATA DdeClientTransaction( LPBYTE pData, DWORD cbData, HCONV hConv, HSZ hszItem, UINT
|
1025
1025
|
# wFmt, UINT wType, DWORD dwTimeout, LPDWORD pdwResult );
|
1026
1026
|
#
|
1027
1027
|
# pData:: <in> Pointer to the beginning of the data the client must pass to the server.
|
1028
|
-
# Optionally, an
|
1028
|
+
# Optionally, an App can specify the data handle (HDDEDATA) to pass to the server and in that
|
1029
1029
|
# case the cbData parameter should be set to -1. This parameter is required only if the wType parameter
|
1030
1030
|
# is XTYP_EXECUTE or XTYP_POKE. Otherwise, this parameter should be NULL.
|
1031
1031
|
# For the optional usage of this parameter, XTYP_POKE transactions where pData is a data handle, the
|
@@ -1046,7 +1046,7 @@ module Win
|
|
1046
1046
|
# format or a valid registered clipboard format.
|
1047
1047
|
# wType:: <in> Specifies the transaction type. This parameter can be one of the following values.
|
1048
1048
|
# - XTYP_ADVSTART: Begins an advise loop. Any number of distinct advise loops can exist within a
|
1049
|
-
# conversation. An
|
1049
|
+
# conversation. An App can alter the advise loop type by combining the XTYP_ADVSTART
|
1050
1050
|
# transaction type with one or more of the following flags: Flag Meaning
|
1051
1051
|
# - XTYPF_NODATA Instructs the server to notify the client of any data changes without actually sending
|
1052
1052
|
# the data. This flag gives the client the option of ignoring the notification or requesting the changed
|
@@ -1059,13 +1059,13 @@ module Win
|
|
1059
1059
|
# - XTYP_POKE: Begins a poke transaction.
|
1060
1060
|
# - XTYP_REQUEST: Begins a request transaction.
|
1061
1061
|
# dwTimeout:: <in> Specifies the maximum amount of time, in milliseconds, that the client will wait for
|
1062
|
-
# a response from the server
|
1062
|
+
# a response from the server App in a synchronous transaction. This parameter should
|
1063
1063
|
# be TIMEOUT_ASYNC for asynchronous transactions.
|
1064
|
-
# pdwResult:: <out> Pointer to a variable that receives the result of the transaction. An
|
1064
|
+
# pdwResult:: <out> Pointer to a variable that receives the result of the transaction. An App
|
1065
1065
|
# that does not check the result can use NULL for this value. For synchronous transactions,
|
1066
1066
|
# the low-order word of this variable contains any applicable DDE_ flags resulting from the
|
1067
|
-
# transaction. This provides support for
|
1068
|
-
# is, however, recommended that
|
1067
|
+
# transaction. This provides support for Apps dependent on DDE_APPSTATUS bits. It
|
1068
|
+
# is, however, recommended that Apps no longer use these bits because they may not
|
1069
1069
|
# be supported in future versions of the Dynamic Data Exchange Management Library (DDEML).
|
1070
1070
|
# For asynchronous transactions, this variable is filled with a unique transaction
|
1071
1071
|
# identifier for use with the DdeAbandonTransaction function and the XTYP_XACT_COMPLETE
|
@@ -1094,13 +1094,13 @@ module Win
|
|
1094
1094
|
# - DMLERR_UNADVACKTIMEOUT
|
1095
1095
|
# ---
|
1096
1096
|
# *Remarks*:
|
1097
|
-
# When an
|
1097
|
+
# When an App has finished using the data handle returned by DdeClientTransaction, the App should
|
1098
1098
|
# free the handle by calling the DdeFreeDataHandle function.
|
1099
1099
|
#
|
1100
|
-
#Transactions can be synchronous or asynchronous. During a synchronous transaction, DdeClientTransaction does not
|
1100
|
+
# Transactions can be synchronous or asynchronous. During a synchronous transaction, DdeClientTransaction does not
|
1101
1101
|
# return until the transaction either completes successfully or fails. Synchronous transactions cause a client to
|
1102
|
-
# enter a modal loop while waiting for various asynchronous events. Because of this, a client
|
1103
|
-
# respond to user input while waiting on a synchronous transaction, but the
|
1102
|
+
# enter a modal loop while waiting for various asynchronous events. Because of this, a client App can still
|
1103
|
+
# respond to user input while waiting on a synchronous transaction, but the App cannot begin a second
|
1104
1104
|
# synchronous transaction because of the activity associated with the first. DdeClientTransaction fails if any
|
1105
1105
|
# instance of the same task has a synchronous transaction already in progress.
|
1106
1106
|
#
|
@@ -1108,7 +1108,7 @@ module Win
|
|
1108
1108
|
# passing a transaction identifier for reference. When the server's DDE callback function finishes
|
1109
1109
|
# processing an asynchronous transaction, the system sends an XTYP_XACT_COMPLETE transaction to the
|
1110
1110
|
# client. This transaction provides the client with the results of the asynchronous transaction that it
|
1111
|
-
# initiated by calling DdeClientTransaction. A client
|
1111
|
+
# initiated by calling DdeClientTransaction. A client App can choose to abandon an asynchronous
|
1112
1112
|
# transaction by calling the DdeAbandonTransaction function.
|
1113
1113
|
# ---
|
1114
1114
|
# <b>Enhanced (snake_case) API: </b>
|
@@ -1117,7 +1117,7 @@ module Win
|
|
1117
1117
|
# data_handle = dde_client_transaction(data_pointer, size, conv, item, format, type, timeout, result)
|
1118
1118
|
#
|
1119
1119
|
function :DdeClientTransaction, [:pointer, :uint32, :ulong, :ulong, :uint, :uint, :uint32, :pointer],
|
1120
|
-
:HDDEDATA,
|
1120
|
+
:HDDEDATA, fails: 0
|
1121
1121
|
|
1122
1122
|
##
|
1123
1123
|
# The DdeGetData function copies data from the specified Dynamic Data Exchange (DDE) object to the specified
|
@@ -1166,7 +1166,7 @@ module Win
|
|
1166
1166
|
|
1167
1167
|
##
|
1168
1168
|
# The DdeAccessData function provides access to the data in the specified Dynamic Data Exchange (DDE)
|
1169
|
-
# object. An
|
1169
|
+
# object. An App must call the DdeUnaccessData function when it has finished accessing the data
|
1170
1170
|
# in the object.
|
1171
1171
|
#
|
1172
1172
|
# [*Syntax*] LPBYTE DdeAccessData( HDDEDATA hData, LPDWORD pcbDataSize );
|
@@ -1187,7 +1187,7 @@ module Win
|
|
1187
1187
|
# ---
|
1188
1188
|
# *Remarks*:
|
1189
1189
|
# If the hData parameter has not been passed to a Dynamic Data Exchange Management Library (DDEML)
|
1190
|
-
# function, an
|
1190
|
+
# function, an App can use the pointer returned by DdeAccessData for read-write access to the
|
1191
1191
|
# DDE object. If hData has already been passed to a DDEML function, the pointer should be used only for
|
1192
1192
|
# read access to the memory object.
|
1193
1193
|
#
|
@@ -1207,7 +1207,7 @@ module Win
|
|
1207
1207
|
# weird lambda literal instead of block is needed because RDoc goes crazy if block is attached to meta-definition
|
1208
1208
|
|
1209
1209
|
##
|
1210
|
-
# The DdeUnaccessData function unaccesses a Dynamic Data Exchange (DDE) object. An
|
1210
|
+
# The DdeUnaccessData function unaccesses a Dynamic Data Exchange (DDE) object. An App must call
|
1211
1211
|
# this function after it has finished accessing the object.
|
1212
1212
|
#
|
1213
1213
|
# [*Syntax*] BOOL DdeUnaccessData( HDDEDATA hData );
|
@@ -1223,10 +1223,10 @@ module Win
|
|
1223
1223
|
# DMLERR_NO_ERROR
|
1224
1224
|
#
|
1225
1225
|
# ---
|
1226
|
-
# <b>Enhanced (snake_case) API returns true/false instead of nonzero/zero: </b>
|
1226
|
+
# <b> Enhanced (snake_case) API returns true/false instead of nonzero/zero: </b>
|
1227
1227
|
#
|
1228
1228
|
# :call-seq:
|
1229
|
-
#
|
1229
|
+
# success = dde_unaccess_data(data_handle)
|
1230
1230
|
#
|
1231
1231
|
function :DdeUnaccessData, [:HDDEDATA], :int8, boolean: true
|
1232
1232
|
|