// HookDLL.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "HookDLL.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
//Flesh out the entry point pending full implimentation
// reserve the DLL handle
ghModule = (HINSTANCE)hModule;
// register system-wide message
SWM_TRAYMSG = RegisterWindowMessage("TRAY_ACTIVATED"); // will be used when sending window to tray
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
LRESULT CALLBACK KBHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
//Flesh out the function pending implimentation
if(nCode < 0) {
return CallNextHookEx(g_KBHook,nCode,wParam,lParam);
}
switch(wParam)
{
case VK_F11:
if(HIWORD(lParam)){ // the Key is down
if(g_bKeyF11) // key is already down
break;
if(g_InUse) // a window is already subclassed
{
if(WindowValid()) // check if previous window is still valid
break;
}
// ok the hook has been requested to drop program to window
HWND hWnd = GetForegroundWindow(); // get the handle for the forground window
if(!IsMu(hWnd))
break;
g_InUse = SubClassWindowProc(hWnd); // subclass the window and get its icon for its minimization
if(g_InUse)
{
ChangeDisplaySettings(NULL,0); // drop back to windows settings
SetWindowRect(hWnd);
}
SetTimer(hWnd, IDT_RESET,100,TimerProc);
g_bKeyF11 = TRUE;
}
else { // the key is up
g_bKeyF11 = FALSE;
}
break;
case VK_F12:
if(HIWORD(lParam)){ // the Key is down
if(!g_Window.m_Hidden)
{
g_Window.m_Hidden = TRUE;
Shell_NotifyIcon(NIM_ADD, &g_Window.m_niData);
// hide window
ShowWindow(g_Window.m_hWnd, SW_HIDE);
}
}
break;
}
return CallNextHookEx(g_KBHook, nCode, wParam, lParam);
}
LRESULT CALLBACK SCWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
KillTimer(g_Window.m_hWnd,IDT_RESET);
RestoreWindowProc();
break;
case WM_SIZE:
case WM_ACTIVATE:
case WM_SETFOCUS:
case WM_KILLFOCUS:
return DefWindowProc(hWnd,uMsg,wParam,lParam);
break;
case WM_CLOSE:
KillTimer(g_Window.m_hWnd,IDT_RESET);
RestoreWindowProc();
break;
case WM_ACTIVATEAPP:
if((BOOL)wParam)
SetCapture(g_Window.m_hWnd);
else
ReleaseCapture();
return DefWindowProc(hWnd,uMsg,wParam,lParam);
break;
case WM_SETCURSOR:
case WM_NCACTIVATE:
return DefWindowProc( hWnd, uMsg, wParam, lParam );
break;
case WM_COMMAND:
if(wParam == EN_KILLFOCUS)
return DefWindowProc( hWnd, uMsg, wParam, lParam );
break;
case WM_MOUSEMOVE:
{
RECT rct = { 0,0,0,0 };
POINTS pos = MAKEPOINTS(lParam);
GetClientRect(hWnd,&rct);
if(pos.x <= rct.right)
{
if(pos.y <= rct.bottom)
{
ShowCursor(FALSE);
break;
}
}
ShowCursor(TRUE);
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
case WM_MOUSELEAVE:
return DefWindowProc(hWnd,uMsg,wParam,lParam);
break;
case WM_SYSCOMMAND: // Intercept System Commands
{
switch (wParam) // Check System Calls
{
case SC_SCREENSAVE: // Screensaver Trying To Start?
case SC_MONITORPOWER: // Monitor Trying To Enter Powersave?
return 0; // Prevent From Happening
}
break; // Exit
}
default:
if(uMsg == SWM_TRAYMSG)
{
if(lParam == WM_LBUTTONDOWN)
{
Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData);
ShowWindow(g_Window.m_hWnd, SW_SHOW);
g_Window.m_Hidden = FALSE;
}
}
break;
}
/* switch(uMsg)
{
case WM_DESTROY:
case WM_CLOSE:
return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam);
break;
case WM_COMMAND:
if(wParam != EN_KILLFOCUS)
return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam);
break;
case WM_MOUSEMOVE:
{
RECT rct = { 0,0,0,0 };
POINTS pos = MAKEPOINTS(lParam);
GetWindowRect(hWnd,&rct);
if(pos.x <= rct.right)
if(pos.y <= rct.bottom)
return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam);
break;
}
default:
if(uMsg == SWM_TRAYMSG)
{
if(lParam == WM_LBUTTONDOWN)
{
Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData);
ShowWindow(g_Window.m_hWnd, SW_SHOW);
g_Window.m_Hidden = FALSE;
}
}
break;
}*/
//Flesh out the function pending implimentation
//return DefWindowProc(hWnd,uMsg,wParam,lParam);
return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam);
}
HOOKDLL_API BOOL IH()
{
g_KBHook = SetWindowsHookEx(WH_KEYBOARD, KBHookProc, ghModule, 0);
if( g_KBHook == NULL ){
return FALSE;
}
return TRUE;
}
HOOKDLL_API BOOL UIH()
{
if(g_InUse)
RestoreWindowProc();
return UnhookWindowsHookEx(g_KBHook);
}
HICON GetFileIconHandle(LPCTSTR lpszFileName, BOOL bSmallIcon)
{
UINT uFlags = SHGFI_ICON | SHGFI_USEFILEATTRIBUTES;
if (bSmallIcon)
uFlags |= SHGFI_SMALLICON;
else
uFlags |= SHGFI_LARGEICON;
SHFILEINFO sfi;
SHGetFileInfo(lpszFileName, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), uFlags);
return sfi.hIcon;
}
BOOL SubClassWindowProc(HWND hWnd)
{
char szText[255];
GetWindowText(hWnd, szText, 255);
// prepare a NotifyData struct for this window
ZeroMemory(&(g_Window.m_niData), sizeof(NOTIFYICONDATA));
g_Window.m_niData.cbSize = sizeof(NOTIFYICONDATA);
g_Window.m_niData.hWnd = hWnd;
HICON hIcon = (HICON)SendMessage(hWnd, WM_GETICON, ICON_SMALL,0);
if(!hIcon){
char szPath[255];
HMODULE hModule = (HMODULE)OpenProcess(0, FALSE, GetWindowThreadProcessId(hWnd, 0));
GetModuleFileName(hModule, szPath, 255);
hIcon = GetFileIconHandle(szPath, TRUE);
}
if(hIcon){
g_Window.m_niData.hIcon = CopyIcon(hIcon);
}
else{
g_Window.m_niData.hIcon = LoadIcon(NULL, IDI_QUESTION);
}
g_Window.m_niData.uID = TRAYICONID;
g_Window.m_niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
strcpy(g_Window.m_niData.szTip, szText);
g_Window.m_niData.uCallbackMessage = SWM_TRAYMSG;
g_Window.m_hWnd = hWnd;
g_Window.m_Hidden = FALSE;
g_Window.m_OrigWndProc = GetWindowLongPtr(hWnd,GWL_WNDPROC);
if(SetWindowLongPtr(hWnd,GWL_WNDPROC,(LONG)SCWinProc) == g_Window.m_OrigWndProc)
g_Window.m_Subclassed = TRUE;
else
g_Window.m_Subclassed = FALSE;
return g_Window.m_Subclassed;
}
BOOL RestoreWindowProc()
{
g_Window.m_Subclassed = FALSE;
g_Window.m_Hidden = FALSE;
Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData);
ShowWindow(g_Window.m_hWnd, SW_SHOW);
g_Window.m_Hidden = FALSE;
g_InUse = FALSE;
return ( SetWindowLongPtr(g_Window.m_hWnd,GWL_WNDPROC,(LONG)g_Window.m_OrigWndProc) >= 0);
}
VOID SetWindowRect(HWND hWnd)
{
RECT rct = { 0,0 ,g_XRES,g_YRES };
BOOL bHasMenu = TRUE;
SetWindowLongPtr(hWnd,GWL_STYLE,(LONG)WS_HOOKEDWINDOW);
SetWindowLongPtr(hWnd,GWL_EXSTYLE,(LONG)WS_EX_OVERLAPPEDWINDOW);
if(GetMenu(g_Window.m_hWnd) == NULL)
bHasMenu = FALSE;
AdjustWindowRectEx(&rct,WS_HOOKEDWINDOW,bHasMenu,WS_EX_OVERLAPPEDWINDOW);
SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,rct.right - rct.left,rct.bottom-rct.top,SWP_HOOKED);
ShowCursor(TRUE);
}
HOOKDLL_API VOID SR(INT Width,INT Height)
{
g_XRES = Width;
g_YRES = Height;
}
BOOL WindowValid()
{
HWND hWnd = GetWindow(g_Window.m_hWnd,GW_HWNDFIRST); // QUICKHACK: to check if window is still valid
DWORD ErrorCode = GetLastError();
if(ErrorCode == ERROR_INVALID_WINDOW_HANDLE)
return FALSE;
return TRUE;
}
VOID CALLBACK TimerProc( HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
if(idEvent == IDT_RESET)
{
if(!WindowValid())
{
KillTimer(g_Window.m_hWnd,IDT_RESET);
MessageBox(g_Window.m_hWnd,"Timer killed","TIMER",MB_OK);
}
if(!g_Window.m_Hidden)
{
RECT rct = { 0,0, g_XRES,g_YRES };
BOOL bHasMenu = TRUE;
if(GetMenu(g_Window.m_hWnd) == NULL)
bHasMenu = FALSE;
AdjustWindowRectEx(&rct,WS_HOOKEDWINDOW,bHasMenu,WS_EX_OVERLAPPEDWINDOW);
SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,rct.right - rct.left,rct.bottom-rct.top,SWP_HOOKED);
//ShowCursor(TRUE);
}
}
}
BOOL IsMu(HWND hWnd)
{
char szText[255]="";
char szPath[255]="";
char szTokS[] = "\\/";
char *szTokC = NULL;
char szTokO[255]="";
int Len = 0;
HMODULE hModule = (HMODULE)OpenProcess(0, FALSE, GetWindowThreadProcessId(hWnd, 0));
Len = GetWindowText(hWnd, szText, 255);
if(strcmp(strlwr(szText),"mu") != 0 )
return FALSE;
GetModuleFileName(hModule, szPath, 255);
CloseHandle(hModule);
szTokC = strtok(szPath,szTokS);
while(szTokC != NULL)
{
strcpy(szTokO,szTokC);
szTokC = strtok(NULL,szTokS);
}
if(strcmp(strlwr(szTokO),"main.exe") != 0)
return FALSE;
return TRUE;
}
// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the HOOKDLL_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// HOOKDLL_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef HOOKDLL_EXPORTS // dont decorate the exports
#define HOOKDLL_API extern "C" __declspec(dllexport)
#else
#define HOOKDLL_API extern "C" __declspec(dllimport)
#endif
#define IDT_RESET (WM_USER+WM_TIMER+0xff)
#define SC_SENDTOTRAY (-90)
#define TRAYICONID 4
#define WS_HOOKEDWINDOW (WS_CAPTION | \
WS_SYSMENU)
#define SWP_HOOKED (SWP_DRAWFRAME | \
SWP_FRAMECHANGED | \
SWP_NOMOVE | \
SWP_NOZORDER | \
SWP_SHOWWINDOW)
struct WNDDATA{
HWND m_hWnd;
LRESULT m_OrigWndProc;
NOTIFYICONDATA m_niData;
BOOL m_Subclassed;
BOOL m_Hidden;
};
#pragma data_seg(".SHARE")
HHOOK g_KBHook = NULL;
WNDDATA g_Window;
BOOL g_InUse = FALSE;
BOOL g_bKeyF12 = FALSE;
BOOL g_bKeyF11 = FALSE;
INT g_XRES = 800;
INT g_YRES = 600; // default to 800 * 600
UINT SWM_TRAYMSG;
#pragma data_seg()
#pragma comment(linker,"/SECTION:.SHARE,RWS")
HINSTANCE ghModule = NULL;
HOOKDLL_API BOOL IH();
HOOKDLL_API BOOL UIH();
HICON GetFileIconHandle(LPCTSTR lpszFileName, BOOL bSmallIcon);
BOOL SubClassWindowProc(HWND hWnd);
BOOL RestoreWindowProc();
BOOL IsMu(HWND hWnd);
LRESULT CALLBACK SCWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); // subclassed window proc
LRESULT CALLBACK KBHookProc(INT nCode,WPARAM wParam,LPARAM lParam); // the KeyBoard proc
VOID CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
VOID SetWindowRect(HWND hWnd);
HOOKDLL_API VOID SR(INT Width,INT Height);
BOOL WindowValid();
Pergunta
Francis carlos
Ola!!
Ajuda Converter esse code para delphi7
// HookDLL.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "HookDLL.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { //Flesh out the entry point pending full implimentation // reserve the DLL handle ghModule = (HINSTANCE)hModule; // register system-wide message SWM_TRAYMSG = RegisterWindowMessage("TRAY_ACTIVATED"); // will be used when sending window to tray switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } LRESULT CALLBACK KBHookProc(int nCode,WPARAM wParam,LPARAM lParam) { //Flesh out the function pending implimentation if(nCode < 0) { return CallNextHookEx(g_KBHook,nCode,wParam,lParam); } switch(wParam) { case VK_F11: if(HIWORD(lParam)){ // the Key is down if(g_bKeyF11) // key is already down break; if(g_InUse) // a window is already subclassed { if(WindowValid()) // check if previous window is still valid break; } // ok the hook has been requested to drop program to window HWND hWnd = GetForegroundWindow(); // get the handle for the forground window if(!IsMu(hWnd)) break; g_InUse = SubClassWindowProc(hWnd); // subclass the window and get its icon for its minimization if(g_InUse) { ChangeDisplaySettings(NULL,0); // drop back to windows settings SetWindowRect(hWnd); } SetTimer(hWnd, IDT_RESET,100,TimerProc); g_bKeyF11 = TRUE; } else { // the key is up g_bKeyF11 = FALSE; } break; case VK_F12: if(HIWORD(lParam)){ // the Key is down if(!g_Window.m_Hidden) { g_Window.m_Hidden = TRUE; Shell_NotifyIcon(NIM_ADD, &g_Window.m_niData); // hide window ShowWindow(g_Window.m_hWnd, SW_HIDE); } } break; } return CallNextHookEx(g_KBHook, nCode, wParam, lParam); } LRESULT CALLBACK SCWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch(uMsg) { case WM_DESTROY: KillTimer(g_Window.m_hWnd,IDT_RESET); RestoreWindowProc(); break; case WM_SIZE: case WM_ACTIVATE: case WM_SETFOCUS: case WM_KILLFOCUS: return DefWindowProc(hWnd,uMsg,wParam,lParam); break; case WM_CLOSE: KillTimer(g_Window.m_hWnd,IDT_RESET); RestoreWindowProc(); break; case WM_ACTIVATEAPP: if((BOOL)wParam) SetCapture(g_Window.m_hWnd); else ReleaseCapture(); return DefWindowProc(hWnd,uMsg,wParam,lParam); break; case WM_SETCURSOR: case WM_NCACTIVATE: return DefWindowProc( hWnd, uMsg, wParam, lParam ); break; case WM_COMMAND: if(wParam == EN_KILLFOCUS) return DefWindowProc( hWnd, uMsg, wParam, lParam ); break; case WM_MOUSEMOVE: { RECT rct = { 0,0,0,0 }; POINTS pos = MAKEPOINTS(lParam); GetClientRect(hWnd,&rct); if(pos.x <= rct.right) { if(pos.y <= rct.bottom) { ShowCursor(FALSE); break; } } ShowCursor(TRUE); return DefWindowProc(hWnd,uMsg,wParam,lParam); } case WM_MOUSELEAVE: return DefWindowProc(hWnd,uMsg,wParam,lParam); break; case WM_SYSCOMMAND: // Intercept System Commands { switch (wParam) // Check System Calls { case SC_SCREENSAVE: // Screensaver Trying To Start? case SC_MONITORPOWER: // Monitor Trying To Enter Powersave? return 0; // Prevent From Happening } break; // Exit } default: if(uMsg == SWM_TRAYMSG) { if(lParam == WM_LBUTTONDOWN) { Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData); ShowWindow(g_Window.m_hWnd, SW_SHOW); g_Window.m_Hidden = FALSE; } } break; } /* switch(uMsg) { case WM_DESTROY: case WM_CLOSE: return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam); break; case WM_COMMAND: if(wParam != EN_KILLFOCUS) return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam); break; case WM_MOUSEMOVE: { RECT rct = { 0,0,0,0 }; POINTS pos = MAKEPOINTS(lParam); GetWindowRect(hWnd,&rct); if(pos.x <= rct.right) if(pos.y <= rct.bottom) return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam); break; } default: if(uMsg == SWM_TRAYMSG) { if(lParam == WM_LBUTTONDOWN) { Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData); ShowWindow(g_Window.m_hWnd, SW_SHOW); g_Window.m_Hidden = FALSE; } } break; }*/ //Flesh out the function pending implimentation //return DefWindowProc(hWnd,uMsg,wParam,lParam); return CallWindowProc((WNDPROC)g_Window.m_OrigWndProc,hWnd,uMsg,wParam,lParam); } HOOKDLL_API BOOL IH() { g_KBHook = SetWindowsHookEx(WH_KEYBOARD, KBHookProc, ghModule, 0); if( g_KBHook == NULL ){ return FALSE; } return TRUE; } HOOKDLL_API BOOL UIH() { if(g_InUse) RestoreWindowProc(); return UnhookWindowsHookEx(g_KBHook); } HICON GetFileIconHandle(LPCTSTR lpszFileName, BOOL bSmallIcon) { UINT uFlags = SHGFI_ICON | SHGFI_USEFILEATTRIBUTES; if (bSmallIcon) uFlags |= SHGFI_SMALLICON; else uFlags |= SHGFI_LARGEICON; SHFILEINFO sfi; SHGetFileInfo(lpszFileName, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), uFlags); return sfi.hIcon; } BOOL SubClassWindowProc(HWND hWnd) { char szText[255]; GetWindowText(hWnd, szText, 255); // prepare a NotifyData struct for this window ZeroMemory(&(g_Window.m_niData), sizeof(NOTIFYICONDATA)); g_Window.m_niData.cbSize = sizeof(NOTIFYICONDATA); g_Window.m_niData.hWnd = hWnd; HICON hIcon = (HICON)SendMessage(hWnd, WM_GETICON, ICON_SMALL,0); if(!hIcon){ char szPath[255]; HMODULE hModule = (HMODULE)OpenProcess(0, FALSE, GetWindowThreadProcessId(hWnd, 0)); GetModuleFileName(hModule, szPath, 255); hIcon = GetFileIconHandle(szPath, TRUE); } if(hIcon){ g_Window.m_niData.hIcon = CopyIcon(hIcon); } else{ g_Window.m_niData.hIcon = LoadIcon(NULL, IDI_QUESTION); } g_Window.m_niData.uID = TRAYICONID; g_Window.m_niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; strcpy(g_Window.m_niData.szTip, szText); g_Window.m_niData.uCallbackMessage = SWM_TRAYMSG; g_Window.m_hWnd = hWnd; g_Window.m_Hidden = FALSE; g_Window.m_OrigWndProc = GetWindowLongPtr(hWnd,GWL_WNDPROC); if(SetWindowLongPtr(hWnd,GWL_WNDPROC,(LONG)SCWinProc) == g_Window.m_OrigWndProc) g_Window.m_Subclassed = TRUE; else g_Window.m_Subclassed = FALSE; return g_Window.m_Subclassed; } BOOL RestoreWindowProc() { g_Window.m_Subclassed = FALSE; g_Window.m_Hidden = FALSE; Shell_NotifyIcon(NIM_DELETE, &g_Window.m_niData); ShowWindow(g_Window.m_hWnd, SW_SHOW); g_Window.m_Hidden = FALSE; g_InUse = FALSE; return ( SetWindowLongPtr(g_Window.m_hWnd,GWL_WNDPROC,(LONG)g_Window.m_OrigWndProc) >= 0); } VOID SetWindowRect(HWND hWnd) { RECT rct = { 0,0 ,g_XRES,g_YRES }; BOOL bHasMenu = TRUE; SetWindowLongPtr(hWnd,GWL_STYLE,(LONG)WS_HOOKEDWINDOW); SetWindowLongPtr(hWnd,GWL_EXSTYLE,(LONG)WS_EX_OVERLAPPEDWINDOW); if(GetMenu(g_Window.m_hWnd) == NULL) bHasMenu = FALSE; AdjustWindowRectEx(&rct,WS_HOOKEDWINDOW,bHasMenu,WS_EX_OVERLAPPEDWINDOW); SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,rct.right - rct.left,rct.bottom-rct.top,SWP_HOOKED); ShowCursor(TRUE); } HOOKDLL_API VOID SR(INT Width,INT Height) { g_XRES = Width; g_YRES = Height; } BOOL WindowValid() { HWND hWnd = GetWindow(g_Window.m_hWnd,GW_HWNDFIRST); // QUICKHACK: to check if window is still valid DWORD ErrorCode = GetLastError(); if(ErrorCode == ERROR_INVALID_WINDOW_HANDLE) return FALSE; return TRUE; } VOID CALLBACK TimerProc( HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { if(idEvent == IDT_RESET) { if(!WindowValid()) { KillTimer(g_Window.m_hWnd,IDT_RESET); MessageBox(g_Window.m_hWnd,"Timer killed","TIMER",MB_OK); } if(!g_Window.m_Hidden) { RECT rct = { 0,0, g_XRES,g_YRES }; BOOL bHasMenu = TRUE; if(GetMenu(g_Window.m_hWnd) == NULL) bHasMenu = FALSE; AdjustWindowRectEx(&rct,WS_HOOKEDWINDOW,bHasMenu,WS_EX_OVERLAPPEDWINDOW); SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,rct.right - rct.left,rct.bottom-rct.top,SWP_HOOKED); //ShowCursor(TRUE); } } } BOOL IsMu(HWND hWnd) { char szText[255]=""; char szPath[255]=""; char szTokS[] = "\\/"; char *szTokC = NULL; char szTokO[255]=""; int Len = 0; HMODULE hModule = (HMODULE)OpenProcess(0, FALSE, GetWindowThreadProcessId(hWnd, 0)); Len = GetWindowText(hWnd, szText, 255); if(strcmp(strlwr(szText),"mu") != 0 ) return FALSE; GetModuleFileName(hModule, szPath, 255); CloseHandle(hModule); szTokC = strtok(szPath,szTokS); while(szTokC != NULL) { strcpy(szTokO,szTokC); szTokC = strtok(NULL,szTokS); } if(strcmp(strlwr(szTokO),"main.exe") != 0) return FALSE; return TRUE; }// The following ifdef block is the standard way of creating macros which make exporting // from a DLL simpler. All files within this DLL are compiled with the HOOKDLL_EXPORTS // symbol defined on the command line. this symbol should not be defined on any project // that uses this DLL. This way any other project whose source files include this file see // HOOKDLL_API functions as being imported from a DLL, whereas this DLL sees symbols // defined with this macro as being exported. #ifdef HOOKDLL_EXPORTS // dont decorate the exports #define HOOKDLL_API extern "C" __declspec(dllexport) #else #define HOOKDLL_API extern "C" __declspec(dllimport) #endif #define IDT_RESET (WM_USER+WM_TIMER+0xff) #define SC_SENDTOTRAY (-90) #define TRAYICONID 4 #define WS_HOOKEDWINDOW (WS_CAPTION | \ WS_SYSMENU) #define SWP_HOOKED (SWP_DRAWFRAME | \ SWP_FRAMECHANGED | \ SWP_NOMOVE | \ SWP_NOZORDER | \ SWP_SHOWWINDOW) struct WNDDATA{ HWND m_hWnd; LRESULT m_OrigWndProc; NOTIFYICONDATA m_niData; BOOL m_Subclassed; BOOL m_Hidden; }; #pragma data_seg(".SHARE") HHOOK g_KBHook = NULL; WNDDATA g_Window; BOOL g_InUse = FALSE; BOOL g_bKeyF12 = FALSE; BOOL g_bKeyF11 = FALSE; INT g_XRES = 800; INT g_YRES = 600; // default to 800 * 600 UINT SWM_TRAYMSG; #pragma data_seg() #pragma comment(linker,"/SECTION:.SHARE,RWS") HINSTANCE ghModule = NULL; HOOKDLL_API BOOL IH(); HOOKDLL_API BOOL UIH(); HICON GetFileIconHandle(LPCTSTR lpszFileName, BOOL bSmallIcon); BOOL SubClassWindowProc(HWND hWnd); BOOL RestoreWindowProc(); BOOL IsMu(HWND hWnd); LRESULT CALLBACK SCWinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); // subclassed window proc LRESULT CALLBACK KBHookProc(INT nCode,WPARAM wParam,LPARAM lParam); // the KeyBoard proc VOID CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime); VOID SetWindowRect(HWND hWnd); HOOKDLL_API VOID SR(INT Width,INT Height); BOOL WindowValid();Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.