ClearAll[monitorParallel];
Attributes[monitorParallel] = {HoldFirst};
monitorParallel[pm : ParallelMap[params__]] :=
Module[{args = {params}, res, levelSpec = 1, exprCount, progress = 0},
(* Count levels *)
If[Length@args >= 3,
With[{expr = args[[3]]},
If[MatchQ[
expr, _Integer | {Repeated[_Integer, {1, 2}]} | Infinity],
levelSpec = expr
]]];
exprCount = Length@Level[args[[2]], levelSpec];
(* Prep parallel processing *)
If[Length@Kernels[] == 0,
LaunchKernels[]
];
SetSharedVariable[progress];