좋아, 여기에 100 만 달러에 약간의 질문이 있습니다. 어떤 브라우저가 현재 Flash 응용 프로그램을 실행 중인지 확인하는 응용 프로그램을 개발 중입니다.Internet Explorer 프로세스가 실행 중인지 검색
// Using CreateToolhelp32Snapshot allows to list all the modules loaded by a specific process.
internal static Boolean ProcessContainsModule(Process process, String moduleMask)
{
IntPtr snapshotHandle;
if (Environment.Is64BitProcess)
snapshotHandle = CreateToolhelp32Snapshot((SnapshotFlags.Module | SnapshotFlags.Module32), (UInt32)process.Id);
else
snapshotHandle = CreateToolhelp32Snapshot(SnapshotFlags.Module, (UInt32)process.Id);
if (snapshotHandle == IntPtr.Zero)
return false;
Boolean result = false;
ModuleEntry entry = new ModuleEntry();
entry.Size = ModuleEntry.SizeOf;
if (Module32First(snapshotHandle, ref entry))
{
do
{
if (entry.ModuleName.FitsMask(moduleMask))
{
result = true;
break;
}
entry = new ModuleEntry();
entry.Size = ModuleEntry.SizeOf;
}
while (Module32Next(snapshotHandle, ref entry));
}
CloseHandle(snapshotHandle);
return result;
}
// This is a simple wildcard matching implementation.
public static Boolean FitsMask(this String value, String mask)
{
Regex regex;
if (!s_MaskRegexes.TryGetValue(mask, out regex))
s_MaskRegexes[mask] = regex = new Regex(String.Concat('^', Regex.Escape(mask.Replace(".", "__DOT__").Replace("*", "__STAR__").Replace("?", "__QM__")).Replace("__DOT__", "[.]").Replace("__STAR__", ".*").Replace("__QM__", "."), '$'), RegexOptions.IgnoreCase);
return regex.IsMatch(value);
}
지금, Process Explorer 내 프로세스 탐사시 매우 유용 : 여기 내 핵심 기본 구현입니다. 크롬으로이 감지
는매우 간단합니다 : 파이어 폭스와 함께이 Detecthing
이if ((process.ProcessName == "chrome") && NativeMethods.ProcessContainsModule(process, "PepFlashPlayer.dll"))
도 매우 간단합니다 : 당신은 인터넷 익스플로러에서 볼 때
언제나처럼if ((process.ProcessName.StartsWith("FlashPlayerPlugin")) && NativeMethods.ProcessContainsModule(process, "NPSWF32*"))
이 모든 것이 변경합니다. 마이크로 소프트의 브라우저로 이것을 어떻게 감지 할 수 있는지에 대한 단서가 있습니까?
야, ProcessContainsModule의 코드는 첫 번째 게시물에 있습니다. –
오, 내 실수. 네임 스페이스 이름에 대한 흥미로운 선택 – MickyD