下面介紹下,利用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 以兩個位...