用什么函数可以关闭控制台程序 我用控制台程序建个全局HOOK,想在截获到某个按键时可以使程序关闭该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 hookkeyboard -> key == X 暴力terminateXXXX 退出程序么? -》exit(0)就OK啦 我在主代码里面加了消息循环代码如下:while (GetMessage(msg, NULL, 0, 0)) { if(msg->message==WM_CLOSE) exit(0); }在DLL里的钩子处理函数中判断是否按下F2键,是的话就给程序发关闭消息if(VK_F2==wParam) { SendMessage(g_hWnd,WM_CLOSE,0,0); UnhookWindowsHookEx(g_hkeyboard); }结果是在控制台下按F2好像有时会退出有时又不会,而在其他窗口中按下F2时只会卸下钩子,也就是UnhookWindowsHookEx(g_hkeyboard)执行了,这是怎么回事? 又测试了一下,在其他窗口中按键都被屏蔽了,只有在控制台窗口中按下F2会解除屏蔽,不会结束程序主代码:#include <Windows.h>#include <Winbase.h>#include <iostream.h>#include <winuser.h>_declspec(dllimport) void SetHook(HWND hwnd);void main(){ HWND m_hWnd; LPMSG msg; SetConsoleTitle("My God!"); m_hWnd=FindWindow(NULL,"My God!"); SetHook(m_hWnd); GetMessage(msg,NULL,NULL,NULL); while (GetMessage(msg, NULL, 0, 0)) { if(msg->message==WM_CLOSE) exit(0); }}dll代码:#include <windows.h>HHOOK g_hkeyboard=NULL;HWND g_hWnd;LRESULT CALLBACK KeyboardProc( int code, // hook code WPARAM wParam, // virtual-key code LPARAM lParam // keystroke-message information){ if(VK_F2==wParam) { SendMessage(g_hWnd,WM_CLOSE,0,0); //GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); UnhookWindowsHookEx(g_hkeyboard); } return 1;}void SetHook(HWND hwnd){ g_hWnd=hwnd; g_hkeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hookdll"),0); } 不同的SQL语句,SqlCommand执行不同的操作 怎么往开始菜单里添加历史记录或放快捷方式 VC 2005 中添加成员函数 用CFileFind找到文件后,要将文件改名并存入另一个文件夹,要怎么做? 把程序改成DLL问题分析 用MSCOMM控件接收数据出现的问题 如何给按钮添加快捷键。 如何把附件从邮件中分离出来? MFC如何读取wav格式的音频文件?求助~求抱大腿~~~ 菜鸟问曰: 急,文件属性对话框出不来(代码运行正常) 关于gdi+的两个问题
while (GetMessage(msg, NULL, 0, 0))
{
if(msg->message==WM_CLOSE) exit(0);
}
在DLL里的钩子处理函数中判断是否按下F2键,是的话就给程序发关闭消息
if(VK_F2==wParam)
{
SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hkeyboard);
}
结果是在控制台下按F2好像有时会退出有时又不会,而在其他窗口中按下F2时只会卸下钩子,
也就是UnhookWindowsHookEx(g_hkeyboard)执行了,这是怎么回事?
主代码:
#include <Windows.h>
#include <Winbase.h>
#include <iostream.h>
#include <winuser.h>
_declspec(dllimport) void SetHook(HWND hwnd);
void main()
{
HWND m_hWnd;
LPMSG msg;
SetConsoleTitle("My God!");
m_hWnd=FindWindow(NULL,"My God!");
SetHook(m_hWnd);
GetMessage(msg,NULL,NULL,NULL);
while (GetMessage(msg, NULL, 0, 0))
{
if(msg->message==WM_CLOSE) exit(0);
}
}
dll代码:
#include <windows.h>
HHOOK g_hkeyboard=NULL;
HWND g_hWnd;
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F2==wParam)
{
SendMessage(g_hWnd,WM_CLOSE,0,0);
//GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
UnhookWindowsHookEx(g_hkeyboard);
}
return 1;
}
void SetHook(HWND hwnd)
{
g_hWnd=hwnd;
g_hkeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hookdll"),0);
}