User32.dll中的函数 C#代码 /// /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。...hWnd:设备上下文环境被检索的窗口的句柄 /// [DllImport("user32.dll", CharSet = CharSet.Auto)] public static.../// public static extern IntPtr GetFocus(); /// /// 该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理...extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); /// /// 该函数检索指定窗口客户区域或整个屏幕的显示设备上下文环境的句柄...,在随后的GDI函数中可以使用该句柄在设备上下文环境中绘图。
GetStdHandle() 函数 检索指定标准设备的句柄(标准输入、标准输出或标准错误)。...函数原型 HANDLE GetStdHandle(DWORD nStdHandle); 参数:nStdHandle指定要获取的标准设备类型,常用值有: STD_INPUT_HANDLE (DWORD)...:例如说我们要获得屏幕这个标准输出设备 就可以这样写: //获得标准输出设备的句柄 HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE); 好的,我们现在得到了这个句柄...main() { //控制台形式 system("mode con cols=100 lines=30"); system("title 我是控制台"); //获得标准输出设备的句柄 HANDLE...GetAsyncKeyState() 函数 GetAsyncKeyState()是 Windows API 中用于检测键盘按键当前状态的函数,它能异步获取指定虚拟键的按下 / 释放状态,是实现实时键盘控制的关键函数
,第二个参数为NULL表示从注册表中获取,第三个参数的主要传入如下值: SC_MANAGER_ALL_ACCESS (0xF003F) :默认拥有所有权限 SC_MANAGER_CREATE_SERVICE...} } 获取服务的主程序所在路径、启动类型以及依赖项 上述代码只能获取到系统服务的部分信息,比如服务的名称,显示名称,等等至于其他的信息需要调用另外的API函数获取 OpenService...获取具体服务的句柄 SC_HANDLE WINAPI OpenService( __in SC_HANDLE hSCManager, //服务数据库的句柄 __in...获取系统服务主要使用的API函数是QueryServiceConfig2 BOOL WINAPI QueryServiceConfig2( __in SC_HANDLE hService...,因此这部分的代码多了许多判断的部分 SERVICE_STATUS ServiceStatus = {0}; //获取当前的状态 BOOL bRet = QueryServiceStatus(h_SCService
DWORD th32ProcessID 遍历的进程ID,如果为0,则是当前进程,如果不为0,则是创建指定进程的快照进行遍历 ); 注意,创建进程快照需要包含头文件 ...BOOL WINAPI Module32First( HANDLE hSnapshot, 快照句柄 LPMODULEENTRY32 lpme 模块信息结构体...BOOL WINAPI Process32Next( HANDLE hSnapshot, 进程句柄 LPPROCESSENTRY32 lppe 进程信息结构体 ); typedef...} MODULEENTRY32; typedef MODULEENTRY32 *PMODULEENTRY32; 这个常用的也很多 模块基址 模块大小 模块句柄 模块名称,以及模块路径等等....*/ bRet = Module32Next(hSnapshot,&mi); } return 0; } 兼容代码,遍历指定进程模块 思路: 1.获取你想要遍历的进程
p 指针 四、文本输出 4.1.获取设备环境 获取设备环境方法1:BeginPain和EndPaint函数 将原来的无效区域有效化 WINUSERAPI HDC WINAPI BeginPaint(...2:GetDC 与从BeginPaint函数返回的设备句柄不同,从GetDC返回的设备句柄中的裁剪区域是整个客户区,而不仅仅 是在无效矩形里 hdc = GetDC(hwnd); ReleaseDC(...通过调用GetTextMetrics函数,可以获取字体尺寸。GetTextMetrics函数需要一个设备环境句柄,因为它会返回该设备环境当前选定的字体的信息。...使用BeginPaint函数获取的设备环境句柄,就只能在这个矩形内绘图,调用BeginPaint函数将使这个区域有效。...); 其中,设备环境句柄指的是窗口句柄为hwnd的窗口客户区,从GetDC函数返回的句柄可以在整个客户区绘制,并且GetDC和ReleaseDC函数并不使任何客户区的无效区域变为有效。
]; GetConsoleTitleA(buf,0xFF); //获取当前标题 cout << buf << endl;//输出标题 system("pause"); } 更换新标题...( _In_ DWORD nStdHandle //获取指定的句柄,输出:STD_OUTPUT_HANDLE,输入:STD_INPUT_HANDLE,错误:STD_ERROR_HANDLE,具体要哪种句柄...,看实际需要 ); BOOL WINAPI SetConsoleWindowInfo( HANDLE hConsoleOutput, //标准输出句柄 BOOL bAbsolute...std; bool SetSize(int width, int height) { HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE); //获取输出句柄...//包含光标信息的结构体 ); BOOL WINAPI SetConsoleCursorInfo( HANDLE hConsoleOutput, //标准输出句柄 CONSOLE_CURSOR_INFO
使用这个函数,我们可以将当前进程的某个句柄复制到其它进程中,也可以将其它进程的某个句柄复制到当前进程中。...因此,我们可以在父进程中创建一个socket对象,然后将句柄的id通过命令行参数传递给子进程;然后子进程将该句柄真正复制到当前进程,并转换成socket对象即可。...source_process_handle = _winapi.OpenProcess( _winapi.PROCESS_DUP_HANDLE, False, source_pid)...winapi.GetCurrentProcess(), 0, False, _winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE...socks.send(b'GET / HTTP/1.1\r\n\r\n') data = socks.recv(1024) print("Received data:", data) steal_handle函数代码是从multiprocessing
//不继承线程句柄 FALSE, //不继承句柄 0, //没有创建标志 NULL, //使用父进程环境差变量 NULL, //使用父进程目录作为当前目录...PID GetCurrentProcessld 获取进程句柄 GetCurrentProcess 获取命令行 GetCommandL ine 获取启动信息 GetStartupInfo 遍历进程ID EnumProcesses...2、GDI图形设备接口(Graphics Device Interface)** 设备对象(HWND) DC(设备上下文,Device Contexts) 图形对象 ?...); 修改目录名称 MoveFile(); 获取程序当前目录 GetCurrentDirectory( ); 设置程序当前目录 SetCurrentDirectory(); 4...dwThreadID; HMODULE hModule; bRet = 0; hProcess = 0; dwLoadAddr = 0; dwThreadID = 0; //1.获取进程句柄
我们日常测试中,有时候有些辅助程序文件比如一些配置文件需要放在主程序执行文件同样的位置,便于管理和调用,这时候我们就需要获取执行文件的绝对路径。...今天为大家总结分享不同操作系统下获取当前进程绝对路径的方法。 Windows系统 提供了获取当前进程加载模块的完整路径的接口。...DWORD WINAPI GetModuleFileName( _In_opt_ HMODULE hModule, //模块句柄,可以是DLL模块或者一个应用程序的实例句柄,如果为NULL,该函数返回该应用程序完路径...调用示例: char link[MAX_PATH]; readlink("/proc/self/exe", link, MAX_PATH); link存储当前进程的绝对路径。...MacOSX系统 提供了函数获取当前进程的路径。
", features = ["tlhelp32", "processthreadsapi"] }实现大致步骤:创建进程快照,拿到快照句柄遍历快照中的进程(以迭代器的方式实现),得到每个进程的数据释放快照句柄创建快照句柄创建进程快照需要用到...如果保存进程快照失败,返回的句柄会是一个无效的值(这里用了两个条件或的关系去判断是否无效,其实任用其一都可以,他们都表示一个“空”内存或“空”指针),使用 GetLastError 方法可以获取错误代码...Some(class as i32); } } priority_class }}迭代器实现迭代器中需要保存一些迭代遍历的状态,因此除了前面保存的快照句柄之外还要存储迭代的索引以及释放句柄的状态...if self.finished { return; } // 释放快照句柄。...self.process_snapshot); } self.finished = true; }}代码汇总我在写的时候放在了自定义的utils::process::win包下面,具体引用路径根据自己的情况调整
dll 自身实例句柄 hInst = AfxGetInstanceHandle(); // 获取调用 dll 的进程 ID DWORD dwPid = ::GetCurrentProcessId...(); // 获取调用 dll 的进程句柄 hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,0,dwPid); // 开始注入 Inject();...,此处为鼠标钩子 nCode, wParam, lParam ); } // 安装钩子 BOOL WINAPI StartHook(HWND hWnd) { // 获取鼠标所在的主窗口句柄...g_hWnd = hWnd; // 获取鼠标钩子句柄 hhk = ::SetWindowsHookEx( WH_MOUSE, // 钩子类型 MouseProc, // 指向回调函数的指针...// 全局变量,同 HMODULE void CTest_MFCDlg::HOOK() { // TODO: 在此添加控件通知处理程序代码 // 加载 dll(需要根据自己 dll 的实际路径而定
与二元信号量不同的是,信号量在整个系统中可以被任意线程获取和释放,也就是说,同一个信号量可以由一个线程获取而由另一线程释放。...bInitialOwner表示创建Mutex时的当前线程是否拥有Mutex的所有权,若为TRUE则指定为当前的创建线程为Mutex对象的所有者,其它线程访问需要先ReleaseMutex。...DWORD WINAPI WaitForSingleObject( HANDLE hHandle, //要获取的锁的句柄 DWORD...hHandle:要等待的指定对象的句柄。...BOOL WINAPI ReleaseMutex(HANDLE hMutex); 说明:释放所拥有的互斥量锁对象,hMutex为释放的互斥量的句柄。
它⽤于从⼀个特定的标准设备(标准输⼊、标准输出或标准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备。...HANDLE GetStdHandle(DWORD nStdHandle); 例子: HANDLE hOutput = NULL; //获取标准输出的句柄(⽤来标识不同设备的数值) hOutput =...hOutput = NULL; //获取标准输出的句柄(⽤来标识不同设备的数值) hOutput = GetStdHandle(STD_OUTPUT_HANDLE); //设置标准输出上光标的位置为pos...个设置光标位置的函数 //设置光标的坐标 void SetPos(short x, short y) { COORD pos = { x, y }; HANDLE hOutput = NULL; //获取标准输出的句柄...30⾏,100列 //mode 为DOS命令 system("mode con cols=100 lines=30"); //设置cmd窗⼝名称 system("title 贪吃蛇"); //获取标准输出的句柄
(标准输入、标准输出、标准错误)中获得一个句柄,使用这个句柄可以操作设备 HANDLE GetStdHandle(DWORD nStdHandle); ②GetConsoleCursorlnfo 检索有关指定控制台屏幕缓冲区的光标大小和可见性的信息...BOOL WINAPI GetConsoleCursorInfo ( HANDLE hConsoleoutput, PCONSOLE_CURSOR_INFO lpConsoleCursorInfo...); //PCONSOLE_CURSOR_INFO是指向CONSOLE_CURSOR_INFO结构的指针 使用: HANDLE houtput = NULL; //获取标准输出的句柄(⽤来标识不同设备的数值...COORD pos ); 我们将想要设置的坐标信息放在pos当中,调用该函数将光标位置设置到指定的位置 使用: COORD pos = {10, 5}; HANDLE houtput = NULL; //获取标准输出的句柄...专门用来设置光标位置 void SetPos(short x, short y) { COORD pos = { x, y }; HANDLE houtput = NULL; //获取标准输出的句柄
if (processId == pArg->dwProcessId){pArg->vecHWnds->push_back(hwnd);} return TRUE; } // 根据 PID 获取...//cout << "--------------------------------------------" << endl; } } return false; } API——获取鼠标位置的窗口句柄..._In_ HWND hWnd, _Out_writes_(nMaxCount) LPTSTR lpString, //可能是标题名或者file:///打头的文件完整路径..._In_ HWND hwnd, _Out_writes_to_(cchFileNameMax, return) LPTSTR pszFileName, //模块完整路径...else { printf("GetCursorPos -> (%ld, %ld)\n", point.x, point.y); //获取桌面句柄
LoadLibraryA使我们能够将 dll 从磁盘加载到内存中。这个函数为我们完成了所有的工作,只需要我们将路径传递给 dll 就可以了。...为了获得进程的句柄,我们需要使用 winapi 函数OpenProcess。这个函数需要被告知我们想要什么访问权限,然后它需要处理id。...然后它返回进程 ID,然后我们可以使用它通过 OpenProcess 获取进程句柄。...该函数接受包含函数的模块的句柄和函数的名称。LoadLibraryA 位于 kernel32.dll 中,这就是我们获取该模块的原因。...所以此时,要获取 nt 标头,我们只需键入从数据开始到该结构的偏移量: // Get nt headers PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS
获取柄的函数 GetStdHandle函数它⽤于从⼀个特定的标准设备(标准输⼊、标准输出或标准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备。...声明如下: HANDLE WINAPI GetStdHandle(_In_ DWORD nStdHandle); 参数可以取: STD_INPUT_HANDLE标准输入设备。...获取光标信息的函数GetConsoleCursorInfo 声明如下: BOOL WINAPI GetConsoleCursorInfo( HANDLE hConsoleOutput, PCONSOLE_CURSOR_INFO...lpConsoleCursorInfo ); 用法举例: HANDLE hOutput = NULL; //获取标准输出的句柄(⽤来标识不同设备的数值) hOutput = GetStdHandle(...setlocale函数⽤于修改当前地区,可以针对⼀个类项修改,也可以针对所有类项。
如果在lpCmdLine参数中可执行文件的名称不包含目录路径,则系统将按以下顺序搜索可执行文件: 应用程序的目录、当前目录、Windows系统目录、Windows目录以及PATH环境变量中列出的目录。...如果此值为NULL,则使用当前的工作目录。如果在lpFile中提供了相对路径,请不要对lpDirectory使用相对路径。 nShowCmd [in] 指定应用程序在打开时如何显示标志。...lpCurrentDirectory [in, optional] 指向进程当前目录的完整路径。该字符串还可以指定UNC路径。如果此参数为NULL,则新进程将具有与调用进程相同的当前驱动器和目录。...lpCurrentDirectory [in,optional] 指向进程当前目录的完整路径。如果此参数为NULL,则新进程将具有与调用进程相同的当前驱动器和目录。...新令牌句柄作为用户主令牌的句柄,指定创建进程的路径,设置优先级和创建标志,设置STARTUPINFO结构信息,获取PROCESS_INFORMATION结构信息。
它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备。...HANDLE GetStdHandle(DWORD nStdHandle); 实例: HANDLE hOutput = NULL; //获取标准输出的句柄(用来标识不同设备的数值) hOutput...实例: HANDLE hOutput = NULL; //获取标准输出的句柄(用来标识不同设备的数值) hOutput = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO...,通常是控制台窗口 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); // 调用GetConsoleCursorInfo函数获取当前控制台光标的信息..., 5}; HANDLE hOutput = NULL; //获取标准输出的句柄(用来标识不同设备的数值) hOutput = GetStdHandle(STD_OUTPUT_HANDLE);