1
何我可以檢查我的PC上是否存在私有隊列使用Delphi7中的MSMQ COM組件,具有路徑或格式名稱? 我讀了約LookupQueue
,但它似乎只適用於公共隊列,我需要一個我不知道的GUID。歡迎任何其他選擇或正確使用LookupQueue
示例。MSMQ(COM)檢查是否存在私有隊列
何我可以檢查我的PC上是否存在私有隊列使用Delphi7中的MSMQ COM組件,具有路徑或格式名稱? 我讀了約LookupQueue
,但它似乎只適用於公共隊列,我需要一個我不知道的GUID。歡迎任何其他選擇或正確使用LookupQueue
示例。MSMQ(COM)檢查是否存在私有隊列
這是我剛纔使用的一段代碼。
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;
請注意,它可能需要一些調整,具體取決於您的確切環境和/或德爾福版本。我自己做了Windows頭文件翻譯,因爲那時我(也)需要它用於D7。頭文件在Windows SDK中可用,相關的起點是mq.h
。