|
> 私も詳しくないので想像ですが、Process Explorerがやっている処理が、シャノンさん言うところの > >>実際には胃が痛くなるような技巧を凝らすことで可能になるかもしれませんが、やるべきではありません。
元々意図して実装してあり、やるべきでないことは重々承知しているのですが、客先常駐の御用聞きPG的 な業務のため、件の対応で運用が改善されるのであれば工数も頂けるので対応したいと思っております。
> ということなんじゃないでしょうかね。 > 私であればソースコードがない時点で「無理です」と言ってしまうと思います。
ソースコードすらないのは困りましたが、元々社内にいたPG好きの方が片手間な作ったもので、きちんとした 工程で製造>納品されたものではなく、引き継げる人材がいない環境も考えられ仕方ないかと思っています。
> プログラマは魔法使いではないので、できないことはできないと言うべきかと。
もちろんこちらの掲示板などでいろいろ調べてみて無理であれば言うつもりです。
検索でヒットした結果からDuplicateHandleでハンドルを複製すればできるような記述があったため試してみた のですがこれもだめでした。
やはりこんな簡単な処理で出来るような代物ではないのでしょうか。。。 [DllImport("kernel32.dll", SetLastError = true)] static extern IntPtr OpenMutex(uint dwDesiredAccess, bool bInheritHandle, string lpName); [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool DuplicateHandle(IntPtr hSourceProcessHandle, IntPtr hSourceHandle, IntPtr hTargetProcessHandle, out IntPtr lpTargetHandle, uint dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwOptions); [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool CloseHandle(IntPtr hObject);
const UInt32 MUTEX_ALL_ACCESS = 0x1F0001;
IntPtr myMtx = OpenMutex(MUTEX_ALL_ACCESS, false, "SGC DENPYO");
Process myProcess = Process.GetCurrentProcess(); Process pTergetProcess = Process.GetProcessesByName("SGC.EXE");
IntPtr targetMtx; if (DuplicateHandle(pTergetProcess.Handle, myMtx, myProcess.Handle, out targetMtx, MUTEX_ALL_ACCESS, false, 0x1)) { CloseHandle(targetMtx); }
CloseHandle(myMtx);
|