WIN32編寫Warkey 實現改建

2021-06-22 20:19:19 字數 3887 閱讀 4191

下面介紹下,利用win32編寫自己的warkey,實現改鍵,編譯出的**更小巧,希望對感興趣的朋友有些幫助。主要利用低階鍵盤和滑鼠鉤子,無需額外的dll,程式很小巧,主要**如下。

#ifndef winver

#define winver 0x0500

#endif

#ifndef _win32_winnt

#define _win32_winnt 0x0500

#endif

#include

#include

#include

#include

#definews_mywinws_caption | ws_minimizebox | ws_sysmenu & (~ws_thickframe)//視窗樣式

#define wm_mytray (wm_user + 0x64) //定義使用者托盤訊息

#define id_mytray 0x64//定義使用者托盤id

#define id_timer 0x01

#define sec_mytime 0x78

#define vk_oem_3 0xc0//~鍵對應鍵碼

hinstance hinst=null;

hhook keyhook = null;

hhook mousehook=null;

hwnd war3_hwnd = null;//war3視窗控制代碼

notifyicondata notifyicondata;

hwnd hwndhot[6]=;//熱鍵控制代碼

word item[6]=;//儲存改建熱鍵鍵碼

atom myregisterclass(hinstance hinstance);

bool initinstance(hinstance, int);

lresult callback wndproc(hwnd, uint, wparam, lparam);

void winapi initializehotkey(hwnd hwnddlg,hwnd hwndhot);

lresult callback lowlevelmouseproc(int, wparam , lparam );

lresult callback lowlevelkeyboardproc(int, wparam, lparam);

voidwinapi sethook(void);

void winapi unhook(void);

void winapi showhp(void);

void winapi addtrayicon(hwnd);

void winapi deltrayicon(void);

int apientry winmain(hinstance hinstance,

hinstance hprevinstance,

lpstr lpcmdline,

int ncmdshow)

while (getmessage(&msg, null, 0, 0))

return msg.wparam;

}atom myregisterclass(hinstance hinstance)

bool initinstance(hinstance hinstance, int ncmdshow)//構建程式

hwnd = createwindow("microperation", "microperation", ws_mywin,

300, 250, 255, 230, null, null, hinstance, null);

if (!hwnd)

showwindow(hwnd, ncmdshow);

updatewindow(hwnd);

return true;

}lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)//訊息迴圈主程式

return defwindowproc(hwnd, message, wparam, lparam);

case wm_create:

initializehotkey(hwnd,hwndhot);

addtrayicon(hwnd);

settimer (hwnd, id_timer, sec_mytime, null);

break;

case wm_mytray:

switch (lparam)

break;

case wm_timer://計時器顯示血條

showhp();

break;

case wm_destroy:

unhook();

deltrayicon();

postquitmessage(0);

break;

default:

return defwindowproc(hwnd, message, wparam, lparam);

} return 0;

}void winapi initializehotkey(hwnd hwnddlg,hwnd hwndhot) //新增hotkey編輯框

lresult callback lowlevelmouseproc(int ncode, wparam wparam, lparam lparam)//處理滑鼠事件

}return callnexthookex(mousehook, ncode, wparam, lparam);

}lresult callback lowlevelkeyboardproc(int ncode, wparam wparam, lparam lparam)//處理鍵盤事件

if (item[0]!=0 && (code==item[0]))//處理物品欄1,對應小鍵盤7,以下類似

return false;//不遮蔽其他鍵,以免影響打字聊天

}if (item[1]!=0 && (code==item[1]))

return false;

}if (item[2]!=0 && (code==item[2]))

return false;

}if (item[3]!=0 && (code==item[3]))

return false;

}if (item[4]!=0 && (code==item[4]))

return false;

}if (item[5]!=0 && (code==item[5]))

return false;

}default:

break;

}

}return callnexthookex(keyhook, ncode, wparam, lparam);

}void winapi sethook(void)//安裝鍵盤、滑鼠鉤子

void winapi unhook(void)//解除安裝鉤子

if(mousehook != null)

}void winapi showhp(void)//顯血

}void winapi addtrayicon(hwnd hwnd)//新增托盤

void winapi deltrayicon(void)//刪除托盤

彙編寫Win32 彈窗

1.暫存器 32位cpu一共提供8個通用暫存器 eax 傳遞返回結果 ecx 進行計數 esi 進行源指標 edi 進行目的指標 eip 當前指令指標暫存器 efl 浮點暫存器 2.開發 對於彙編來說開發者要注意棧幀的平衡 資料先進後出 為什麼用棧結構進行程式設計 例 int myadd int x...

win32實現檔案追加

實現原理 開啟兩個檔案,迴圈讀取要追加的檔案內容,然後寫入到要被追加檔案的末尾 相關api createfile setfilepointerex readfile writefile funname filecat param szexistsfilepath 要被追加的檔案路徑 szaddfil...

Win32程式設計

win32 malloc函式的底層實現是win32api utf 16編碼以16位無符號整數為單位,注意是16位為乙個單位,不是乙個字元就只有16位,這個要看字元的unicode編碼處於什麼範圍而定,有可能是2個位元組,也可能是4個位元組現在機器上的unicode編碼一般就是指utf 16 以兩個位...