win 0.3.17 → 0.3.24
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|