个人的 windows 下小程序
简介:
个人写的一些windows下小程序,主要用于解决自己用windows时候遇到的一些问题。
一、关闭显示器
用途:一行代码用于解决自己的笔记本fn键没有关闭显示器这一个选项。
用法:直接双击运行即可。
下载:https://pan.baidu.com/s/1CfElLW6NNTaFhcUpz-5wDw
#include <Windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { SendMessage((HWND)0xffff, 0x112, 0xF170, 2); return 0; }
二、GTA5 键盘开飞机
用途:用于解决在没有小键盘的笔记本电脑上,使用键盘开飞机的问题。
用法:打开GTA5后,运行 inst.exe 安装,使用:O、K、L、; 四个键开飞机:O->8,K->4,L->5,;->6,程序运行完即卸载。
下载:https://pan.baidu.com/s/1sXfbnmSNOl94BFWYR1iDCg
//inst.exe #include <stdio.h> #include <Windows.h> int main() { Sleep(2000); HWND gta5_wnd = ::FindWindow("grcWindow", "Grand Theft Auto V"); if (gta5_wnd == NULL) { puts("GTA 5 没有运行!\n"); } else { DWORD id = ::GetWindowThreadProcessId(gta5_wnd, NULL); printf("找到了 GTA5 主线程,线程 id 为: %d\n\n", id); if (id != NULL) { HMODULE DllModuleHandle = ::LoadLibrary("Dll1.dll"); if (DllModuleHandle == NULL) { puts("钩子 DLL 丢失!\n"); goto END; } HOOKPROC FuncAddress = (HOOKPROC)GetProcAddress(DllModuleHandle, "KeyboardProc"); if (FuncAddress == NULL) { puts("找不到钩子函数!\n"); goto END; } HHOOK HookHandle = SetWindowsHookEx(WH_KEYBOARD, FuncAddress, DllModuleHandle, id); if (HookHandle == NULL) { puts("安装钩子 Dll 失败了!建议关闭杀毒软件!\n"); UnhookWindowsHookEx(HookHandle); } else { puts("钩子 Dll 安装已经成功!按任意键卸载!\n"); system("pause"); UnhookWindowsHookEx(HookHandle); } } else { puts("出错了! \n"); } } END: puts("程序已经结束,按任意键关闭这个窗口\n"); system("pause"); return 0; }
// dllmain.cpp : 定义 DLL 应用程序的入口点。 //Dll1.dll #include "stdafx.h" void sendKey(int keycode, bool tag) { INPUT key; memset(&key, 0, sizeof(INPUT)); key.type = INPUT_KEYBOARD; key.ki.dwExtraInfo = GetMessageExtraInfo(); key.ki.wScan = static_cast<WORD>(MapVirtualKeyEx(keycode, MAPVK_VK_TO_VSC, GetKeyboardLayout(0))); key.ki.dwFlags = KEYEVENTF_SCANCODE; if (!tag) { SendInput(1, &key, sizeof(INPUT)); //按下 } else { key.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; //弹起 SendInput(1, &key, sizeof(INPUT)); } } extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode < 0) { return ::CallNextHookEx(NULL, nCode, wParam, lParam); } switch (wParam) { case 0x4F: //O key 下 8 sendKey(VK_NUMPAD8, lParam & 0x80000000); break; case 0x4C: //L key 上 5 sendKey(VK_NUMPAD5, lParam & 0x80000000); break; case 0x4B: //K key 左 4 sendKey(VK_NUMPAD4, lParam & 0x80000000); break; case 0xBA: //; key 右 6 sendKey(VK_NUMPAD6, lParam & 0x80000000); break; default: break; } return ::CallNextHookEx(NULL, nCode, wParam, lParam); } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
三、WindowX
https://github.com/hyzhangzhy/WindowX