您的位置:首页 > 运维架构

vc6 OpenThread

2016-03-20 05:56 781 查看
前言

vc6中没有OpenThread的头文件定义, 需要动态加载API.

vc6英文企业版自带的msdn对OpenThread没有说明,在msdn中搜索到的OpenThread片段的说明连参数都说错了, 需要装一个[MSDN].msdn_oct_2001.iso

demo

// OpenThread() is exported by KERNEL32.DLL, but is not included in any of the SDK import libraries.
/*
__declspec(dllimport) HANDLE WINAPI OpenThread(
IN DWORD dwDesiredAccess,
IN BOOL  bInheritHandle,
IN DWORD dwThreadId);
*/

// #pragma comment(lib, "Kernel32.lib")

typedef HANDLE (WINAPI* PFN_OpenThread)(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId);

void CTestcase3Dlg::OnButton1()
{
// kill calc
HWND hWnd = NULL;
HANDLE hThread = NULL;
DWORD dwProcessID = 0;
DWORD dwThreadID = 0;
HINSTANCE hDll = NULL;
FARPROC pFnOnDll = NULL;
DWORD dwPrevSuspendCnt = 0; ///< 挂起或恢复时, 上一次的挂起数量

hWnd = ::FindWindow(_T("CalcFrame"), NULL);
if (NULL != hWnd) {
dwThreadID = GetWindowThreadProcessId(hWnd, &dwProcessID); ///< 得到进程ID和主线程ID

// OpenThread在vc6中没有头文件定义, 需要动态载入
hDll = ::LoadLibrary(_T("kernel32.dll"));
if (NULL != hDll) {
pFnOnDll = ::GetProcAddress(hDll, _T("OpenThread"));
if (NULL != pFnOnDll) {
hThread = ((PFN_OpenThread)pFnOnDll)(THREAD_ALL_ACCESS, FALSE, dwThreadID);
if (NULL != hThread) {
dwPrevSuspendCnt = SuspendThread(hThread); ///< 挂起线程, dwPrevSuspendCnt = 0
dwPrevSuspendCnt = ResumeThread(hThread);  ///< 结束线程, dwPrevSuspendCnt = 1
TerminateThread(hThread, 0); ///< 强杀线程
}
}

::FreeLibrary(hDll);
hDll = NULL;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: