关闭另一个进程中互斥锁的句柄
Close handle to a mutex in another process
我想关闭位于另一个进程中的互斥锁的句柄,这样我就可以运行应用程序的多个实例。
我已经知道这是可以做到的,参见进程资源管理器。示例:Windows 扫雷 (Windows 7)使用互斥锁只允许一个游戏,所以我想我会用它作为一个例子,因为它是预装在Windows中的,因此更容易指导我。
我需要关闭的互斥锁是Sessions1BaseNamedObjectsOberon_Minesweeper_Singleton
,这是我使用进程资源管理器找到的。
在关闭这个互斥后,我能够启动扫雷两个游戏,但我想在我的程序中使用c++来实现。
经过一番搜索,我发现我可能需要API DuplicateHandle。到目前为止,我还不能关闭这个互斥锁的句柄。 下面是我的代码:#include <Windows.h>
#include <iostream>
using namespace std;
void printerror(LPSTR location){
printf("Error: %s_%d", location, GetLastError());
cin.get();
}
int main(){
DWORD pid = 0;
HWND hMineWnd = FindWindow("Minesweeper", "Minesveiper");
GetWindowThreadProcessId(hMineWnd, &pid);
HANDLE hProc =OpenProcess(PROCESS_DUP_HANDLE, 0, pid);
if(hProc == NULL){
printerror("1");
return 1;
}
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, "Oberon_Minesweeper_Singleton");
if(hMutex == NULL){
printerror("2");
return 2;
}
if(DuplicateHandle(hProc, hMutex, NULL, 0, 0, FALSE, DUPLICATE_CLOSE_SOURCE) == 0){
printerror("3");
return 3;
}
if(CloseHandle(hMutex) == 0){
printerror("4");
return 4;
}
return 0;
}
这段代码返回0,但互斥锁仍然存在,我无法启动更多的扫雷游戏。我认为我的一些参数DuplicateHandle是错误的
DuplicateHandle
的第二个参数期望"在源进程的上下文中有效的开放对象句柄",但是我相信你传递的句柄只在当前进程中有效(OpenMutex
创建一个现有互斥对象的新句柄)。您可能需要确定远程进程中的互斥锁句柄是什么,并在调用DuplicateHandle
时使用该值。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 使用std::transform将一个范围的元素添加到另一个范围中
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 是否可以注入一个进程并获取给定的句柄,然后使用它们注入另一个进程
- 如何在C++程序中打开一个新的cmd.exe并获取其句柄
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- 是一个常量句柄真的常量
- 如何通过其 HWND 句柄在另一个进程中更改 TDateTimePicker 控件中的当前选定日期
- 将C++类铸造到另一个类中以创建OpenCV轨迹条句柄
- 有没有办法使用一个文件句柄将手表放在千个目录上
- 提升线程 检查当前线程是否等于另一个本机句柄
- 如何在C/C++中创建一个新进程,并在WinXp中获得这个新进程句柄
- 关闭另一个进程中互斥锁的句柄
- 运行一个句柄打开的文件(c++ winapi)
- 获取一个FILE *句柄而不实际在磁盘上创建一个文件