如何禁止一个程序的运行

linfei2707 2002-05-27 09:41:46
例如:asdf.exe 不知道全路径
如何禁止它运行
...全文
231 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
linfei2707 2002-05-30
  • 打赏
  • 举报
回复
谢谢各位!谢谢kingzai() 问题已经解决了,应该把m_hInstance设为共享就可以了,现在开始散分了
kingzai 2002-05-29
  • 打赏
  • 举报
回复
你把DLL挂接到这个应用程序中进行调试,就知道怎么回事了。
linfei2707 2002-05-29
  • 打赏
  • 举报
回复
我也是这么写的,怎么会钩不到呢?你给我看看吧,thx.

LRESULT __declspec(dllexport)__stdcall CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
PCWPSTRUCT pcw=(PCWPSTRUCT) lParam;

if(nCode>=0 && pcw && pcw->hwnd)
{
if(pcw->message==WM_CREATE)
{
CString strApplication;
CString strCommand=GetCommandLine();
int nnum=strCommand.ReverseFind('\\');
if(nnum!=-1)
{
strApplication=strCommand.Mid(nnum+1);
strApplication.TrimRight();
strApplication.TrimRight('\\');
}
if(strApplication==_T("asdf.exe ") )
return 0;
}
}
return CallNextHookEx(g_hHook,nCode,wParam,lParam);;
}

void __declspec(dllexport)__stdcall StartHook()
{
g_hHook = ::SetWindowsHookEx(WH_CALLWNDPROC,
(HOOKPROC)CallWndProc, g_hInstance, NULL );

}

void __declspec(dllexport)__stdcall StopHook()
{
if( g_hHook )
UnhookWindowsHookEx(g_hHook);
g_hHook = NULL;
}
kingzai 2002-05-29
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc.asp?id=271
linfei2707 2002-05-29
  • 打赏
  • 举报
回复
哪有全局钩子的标准做法?
kingzai 2002-05-29
  • 打赏
  • 举报
回复
你的输出函数还是有点问题,你可以去参考一下全局钩子的标准做法:
linfei2707 2002-05-29
  • 打赏
  • 举报
回复
void __declspec(dllexport)__stdcall SetHook(HHOOK & hHook, HINSTANCE hInstance )
{
hHook = ::SetWindowsHookEx(WH_CALLWNDPROC,
(HOOKPROC)CallWndProc, AfxGetInstanceHandle(), NULL );

}

我不明白 AfxGetInstanceHandle() 得到的也是Dll的为什么不行呢?

///////////


用了g_hInstance 后不知为什么也只能钩到CTest123Dlg的消息,别的窗口的消息
都钩不到
kingzai 2002-05-29
  • 打赏
  • 举报
回复
难怪你会出错,这个要是动态库的句柄。
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
// This function is called from both processes

switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
// The DLL is being mapped into the process's address space.
g_hinstDLL = hinstDLL;
。。。
}
}
//g_hinstDLL is you want
Bind 2002-05-29
  • 打赏
  • 举报
回复
study
linfei2707 2002-05-29
  • 打赏
  • 举报
回复
to kingzai() 请问m_hInstance 应该是谁的实例句柄,我用CTest123Dlg的和用
CTestDll的出现死机。

////////// CTestDll
void __declspec(dllexport)__stdcall SetHook(HHOOK & hHook, HINSTANCE hInstance )
{
hHook = ::SetWindowsHookEx(WH_CALLWNDPROC,
(HOOKPROC)CallWndProc, AfxGetInstanceHandle(), NULL );

}
或者

void __declspec(dllexport)__stdcall SetHook(HHOOK & hHook, HINSTANCE hInstance )
{
hHook = ::SetWindowsHookEx(WH_CALLWNDPROC,
(HOOKPROC)CallWndProc, hInstance , NULL );

}
hInstance 是CTest123Dlg中用AfxGetInstanceHandle()得到的。

请指教
kingzai 2002-05-29
  • 打赏
  • 举报
回复
我指的是m_hInstance 应该写在动态库里
linfei2707 2002-05-29
  • 打赏
  • 举报
回复
我设断点跟踪过了,只有CTest123Dlg的消息才进CallWndProc
kingzai 2002-05-29
  • 打赏
  • 举报
回复
看代码没问题。你可以在动态库里写一些TRACE语句来进行跟踪
linfei2707 2002-05-29
  • 打赏
  • 举报
回复
m_hInstance = ::LoadLibrary( "TestDll.dll" );

m_pfnStartHook = NULL;
m_pfnStopHook = NULL;
if( m_hInstance )
{
m_pfnStartHook = (STARTHOOK)GetProcAddress(m_hInstance, "?StartHook@@YGXXZ");
m_pfnStopHook = (STOPHOOK)GetProcAddress(m_hInstance, "?StopHook@@YGXXZ");
}
if( m_pfnStartHook )
m_pfnStartHook();
///////////////
kingzai 2002-05-29
  • 打赏
  • 举报
回复
看你动态库的里面的代码没错,在主程序中是怎样调用的。
xintiaf 2002-05-29
  • 打赏
  • 举报
回复
回:
“正如 kingzai()所说的用FindWindow()时,这窗口已经给创建了。”

言之有理,看来是我离题了:)
linfei2707 2002-05-29
  • 打赏
  • 举报
回复
to xintiaf(日月紫光)
正如 kingzai()所说的用FindWindow()时,这窗口已经给创建了。
xintiaf 2002-05-29
  • 打赏
  • 举报
回复
回:
////
楼上的想法好像不错.不过
Findwindow(NULL,"hello");
::SendMessage(hWnd,WM_CLOSE,NULL,NULL);
两个函数有什么权限要求吗?(在win2000下)
///
不知道你想要什么权限,你要关闭的是什么进程,我这样试了,
关闭一个普通的进程没什么问题

void CTestDlg::OnButton3()
{
// HWND hWnd = ::FindWindow(NULL, "MSDN Library Visual Studio 6.0"); //我先用windowname,好使的
HWND hWnd = ::FindWindow("HH Parent", NULL); //HH Parent是相应的类名,这个也通过了
if(!hWnd)
{
MessageBox("FindWindow fail");
return;
}
::SendMessage(hWnd, WM_CLOSE, 0,0);
DWORD dw = GetLastError();
TCHAR c[2];
wsprintf(c, "%d", dw); //返回值为0,that is ERROR_SUCCESS
MessageBox(c);
}

我的系统window2k professional build 2195

另:
SetWindowsHookEx的第四个参数是相关线程的ID,若为0,
表示你要捕获整个系统中的消息,这时钩子函数必须放在一个DLL中才行

linfei2707 2002-05-29
  • 打赏
  • 举报
回复
to feijunjun(军仔)
如果用
g_hHook = ::SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc, NULL, NULL );
将不成功,也就是说g_hHook反回为NULL;


King_Cpp 2002-05-29
  • 打赏
  • 举报
回复
我还是帮你顶一下吧!!
加载更多回复(21)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧