نوشته شده توسط
Nima_NF
hook کردن بحث پیشرفته ای هست، و طرز کار آن به همین سادگی با فراخوانی یک تابع نیست. شما باید یک dll برای این کار بسازید.
مثال برای hook keyboard در این لینک
متاسفانه از وقتی که index گذاری سیستم جستجوی خود vBulletin برای این سایت متوقف شد، پیدا کردن تاپیک های سال های قبل غیر ممکن شده است! چون 2 مرتبه مثال زدم و حتی نتوانستم به تاپیک های سال های قبل خودم هم برسم، حقیقتا حوصله دوباره مثال زدن را ندارم... اگر از همان نمونه مثال فوق و توضیحات مثال MSDN استفاده کنید به جواب خواهید رسید.
حق با شماست و فایل dll باید استفاده بشه، ولی برنامه من طوری که حتما باید یک exe تنها باشه و هیچ فایل اضافه همراهش نباشه و بهمین جهت با NULL قرار دادن پارامتر سوم SetWindowsHookEx برنامه درست کار نمیکنه.
ولی مشکل من با استفاده از RegisterHotKey حل شد. این هم برنامه مورد نظر منه که اینجا قرار میدم تا اگه کسی نیاز داشت استفاده منه:
#define IDC_GLOBALHOTKEY 100
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_HOTKEY:
UnregisterHotKey(hwnd,IDC_GLOBALHOTKEY);
ShowWindow(hwnd, SW_SHOW);
ShowWindow(hwnd, SW_SHOWDEFAULT);
break;
case WM_SIZE:
if(wParam == SIZE_MINIMIZED)
{
RegisterHotKey(hwnd,IDC_GLOBALHOTKEY,MOD_ALT,'S');
ShowWindow(hwnd, SW_HIDE);
}
break;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
TCHAR szAppName[] = TEXT("GlobalHotKeyTest");
MSG msg;
WNDCLASS wndclass;
wndclass.style = NULL;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;
wndclass.hCursor = NULL;
wndclass.hbrBackground = (HBRUSH) (HBRUSH) (COLOR_WINDOW),
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
RegisterClass(&wndclass);
HWND hWnd = CreateWindow(szAppName,TEXT("Global HotKey Test"),
DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_BORDER | WS_SYSMENU,
CW_USEDEFAULT ,CW_USEDEFAULT ,
184,210, NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}