The modify time of a queue is set by MSMQ whenever the queue's properties are set. This includes when MSMQ creates the queue, when the properties are changed by MQSetQueueProperties, or through MSMQ Explorer. Note that in this example, the C run-time function ctime() is used to display the returned value in a local date and time format.
Note Details on the C run-time functions can be found in the Platform SDK. When using these functions, include time.h in your source code.
// Define number of properties to be retrieved.
#define NumberOfProperties 1
// Define property counter.
DWORD PropIdCount = 0;
// Define the MQQUEUPROPS structure.
MQQUEUEPROPS QueueProps;
PROPVARIANT aQueuePropVar[NumberOfProperties];
QUEUEPROPID aQueuePropId[NumberOfProperties];
HRESULT aQueueStatus[NumberOfProperties];
// Define results.
HRESULT hr;
// Define format name buffer.
DWORD dwFormatNameBufferLength = 256;
WCHAR szFormatNameBuffer[256];
aQueuePropId[PropIdCount] = PROPID_Q_MODIFY_TIME; //Property ID
aQueuePropVar[PropIdCount].vt = VT_I4; //Type indicator
PropIdCount++;
QueueProps.cProp = PropIdCount; // Number of properties
QueueProps.aPropID = aQueuePropId; // Ids of properties
QueueProps.aPropVar = aQueuePropVar; // Values of properties
QueueProps.aStatus = aQueueStatus; // Error reports
hr = MQPathNameToFormatName(L"machinename\\queuename",
szFormatNameBuffer,
&dwFormatNameBufferLength);
if (FAILED(hr))
{
fprintf(stderr, "Failed in MQPathNameToFormatName, error = 0x%x\n",hr);
return -1;
}
hr = MQGetQueueProperties(szFormatNameBuffer, &QueueProps);
if (FAILED(hr))
{
fprintf(stderr, "Failed in MQGetQueueProperties, error = 0x%x\n",hr);
return -1;
}
printf("The queue's properties were last modified on ");
printf("%s.\n", ctime(&aQueuePropVar[0].lVal));
The following example retrieves the PROPID_Q_MODIFY_TIME property for a known queue and then prints the returned value to the screen.
#include <windows.h>
#include <stdio.h>
#include <mq.h> // MSMQ header file
#include <time.h> // Defines ctime()
int main(int arg, char *argv[])
{
///////////////////////////
// Define structures.
////////////////////////////
// Define number of properties to be retrieved
#define NumberOfProperties 1
// Define property counter.
DWORD PropIdCount = 0;
// Define the MQQUEUPROPS structure.
MQQUEUEPROPS QueueProps;
PROPVARIANT aQueuePropVar[NumberOfProperties];
QUEUEPROPID aQueuePropId[NumberOfProperties];
HRESULT aQueueStatus[NumberOfProperties];
// Define results.
HRESULT hr;
// Define format name buffer
DWORD dwFormatNameBufferLength = 256;
WCHAR szFormatNameBuffer[256];
///////////////////////////////////
// Specify PROPID_Q_MODIFY_TIME.
///////////////////////////////////
aQueuePropId[PropIdCount] = PROPID_Q_MODIFY_TIME; // Property ID
aQueuePropVar[PropIdCount].vt = VT_I4; // Type indicator
PropIdCount++;
///////////////////////////////////////////////////////
// Add additional queue properties here. When adding
// properties, increment NumberOfProperties to
// reflect total number of properties.
///////////////////////////////////////////////////////
////////////////////////////////
// Set the MQQUEUEPROPS structure.
/////////////////////////////////
QueueProps.cProp = PropIdCount; // Number of properties
QueueProps.aPropID = aQueuePropId; // Ids of properties
QueueProps.aPropVar = aQueuePropVar; // Values of properties
QueueProps.aStatus = aQueueStatus; // Error reports
////////////////////////////
//Get format name of queue.
////////////////////////////
hr = MQPathNameToFormatName(L"computername\\queuename",
szFormatNameBuffer,
&dwFormatNameBufferLength);
if (FAILED(hr))
{
fprintf(stderr, "Failed in MQPathNameToFormatName, error = 0x%x\n",hr);
return -1;
}
////////////////////////////
// Get queue property.
////////////////////////////
hr = MQGetQueueProperties(szFormatNameBuffer, &QueueProps);
if (FAILED(hr))
{
fprintf(stderr, "Failed in MQGetQueueProperties, error = 0x%x\n",hr);
return -1;
}
/////////////////////////////////////////////////
// Review returned value. This example prints out
// when the queue's properties were last modified.
//////////////////////////////////////////////////
printf("The queue's properties were last modified on ");
printf("%s.\n", ctime(&aQueuePropVar[0].lVal));
return 0;
}