我可以使用Delphi7中的MSMQ COM组件检查我的PC上是否存在私有队列,具有路径或格式名称?
我读到了LookupQueue
,但它似乎只适用于公共队列,我需要一个我不知道的GUID。欢迎任何其他替代或正确使用LookupQueue
示例。
答案 0 :(得分:0)
这是我前一段时间使用过的一段代码。
function GetAllPrivateQueues( const aMachine : WideString; aStrL : TStrings) : HRESULT;
// Returns a list of all private queues of a given machine
type PPWideChar = ^PWideChar;
var props : MQMGMTPROPS;
keys : array[0..0] of MGMTPROPID;
vals : array[0..0] of MQPROPVARIANT;
ppws : PPWideChar;
i : Integer;
begin
// Init Props
props.cProp := 0;
props.aPropID := @keys;
props.aPropVar := @vals;
props.aStatus := nil;
// we want private queues
ASSERT( props.cProp < (SizeOf(keys) / SizeOf(PROPID)));
keys[props.cProp] := PROPID_MGMT_MSMQ_PRIVATEQ;
vals[props.cProp].vt := VT_NULL;
Inc(props.cProp);
// MQMgmtGetInfo() has what we want, requires MSMQ 3.0
result := MQMgmtGetInfo( PWideChar(aMachine), MO_MACHINE_TOKEN, props);
if FAILED(result) then Exit;
// collect the names
// cast required this way, the data type in ActiveX.pas (D7) is incorrect
ppws := PPWideChar(vals[0].calpwstr.pElems);
for i := 0 to vals[0].calpwstr.cElems-1 do begin
aStrL.Add( ppws^);
MQFreeMemory( ppws^);
Inc(ppws);
end;
end;
请注意,根据您的确切环境和/或Delphi版本,可能需要进行一些调整。我自己做了windows标题翻译,因为当时我(也)需要它用于D7。 Windows SDK中提供了头文件,相关起点为mq.h
。