用什么办法,可以在某些应用程序启动之前得到一个消息,得到这个程序名启动路径,把这程序禁止启动?不能用实时列出进程序列表,杀进程的方法,因为这可能会让系统性能降低,而且可能会死机
解决方案 »
- 关于memcpy拷贝数据不能读如何解决。。。
- 100分关于两个新启动的线程的同步,同时loading不受到影响,如何处理?
- 没分了。。。为啥大家都不结贴?
- 在CFrameView类创建的视图对象所包含的CStatick控件Caption属性中输入俄文字符,运行时显示乱码,请问如何显示俄文。
- IE ATL编程菜鸟请教 有个微软的例程 不知道如何修改
- 做图象闪烁
- fread读取的问题,乱码
- 那位大哥和高手能给简单讲讲dll基本用法,万分感谢!!!!!!
- 如何对XML文件中的指定键值进行替换(高分求解)
- 我编了个控制台程序要带参数执行的,我怎么调试,调试怎么设参数?
- 怎样把程序的配置信息写到EXE文件自身内部?这样就可以只提供给用户一个EXE文件了。
- 在Picture控件(CStatic)上再放入其他控件,为何其他ActiveX控件在设计和运行时不能正常显示?
想想也只能用hook了,如果不实时检测的话,你又怎么能得到任何时候启动程序的句柄哪?
callwndHook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,hins,0);LRESULT __declspec(dllexport)__stdcall CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
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 == "test.exe")
return 0;
}
}
}
callwndHook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,hins,0);LRESULT __declspec(dllexport)__stdcall CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
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 == "test.exe")
return 0;
}
}
}
callwndHook=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,hins,0);LRESULT __declspec(dllexport)__stdcall CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
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 == "test.exe")
return 0;
}
}
}
#include <windows.h>#pragma data_seg("shareddata")
HINSTANCE g_hDll;
HHOOK g_hShellHook;
HWND g_hwndDial;
#pragma data_seg()void Install();
void Unstall();
LRESULT CALLBACK ShellProc(int nCode,WPARAM wParam,LPARAM lParam);int WINAPI
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
g_hDll=hInstance;
}
else if (dwReason == DLL_PROCESS_DETACH)
{
Unstall();
}
return 1; // ok
}void Install()
{
if (g_hShellHook==NULL)
g_hShellHook=::SetWindowsHookEx(WH_SHELL,ShellProc,g_hDll,0);
}void Unstall()
{
if (g_hShellHook)
{
::UnhookWindowsHookEx(g_hShellHook);
g_hShellHook=NULL;
}
}LRESULT CALLBACK ShellProc(int nCode,WPARAM wParam,LPARAM lParam)
{
TCHAR szTitle[MAX_PATH];
int nCopyied;
DWORD dwProcessId;
HANDLE hProcess; if (nCode>=0)
{
if (nCode==HSHELL_WINDOWCREATED)
{
nCopyied=::GetWindowText((HWND)wParam,szTitle,sizeof(szTitle));
szTitle[nCopyied]=0;
if (lstrcmp(szTitle,"拨号连接")==0)
{
g_hwndDial=(HWND)wParam;
::GetWindowThreadProcessId(g_hwndDial,&dwProcessId);
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
TerminateProcess(hProcess,0);
CloseHandle(hProcess);
}
}
}
return ::CallNextHookEx(g_hShellHook,nCode,wParam,lParam);
}// DEF
LIBRARY "HackHook2"SECTIONS
shareddata READ WRITE SHAREDEXPORTS
; Explicit exports can go here
Install @1用时要先调用DLL的Install()
msdn:
The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.) The window procedure of the new window receives this message after the window is created, but before the window becomes visible.