Huryo 发表于 2015-7-31 15:28:42

[C++初学]让Win8虚拟键盘透明

本帖最后由 Huryo 于 2015-7-31 15:35 编辑

Win8的虚拟键盘是非常难看的。而且不透明,也就是说,鸡肋的键盘挡住了大半屏幕,键盘下的东西完全看不到。。没用过win平板的可能都不知道有这个东西。。。。

就像这样。所以我花了半天时间研究。写了下面的代码
#include <iostream>
#include <windows.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

int main(int argc, char** argv)
{
        int rtn;
        HWND h_Keyboard=FindWindowA("IPTip_Main_Window","");//得到键盘的窗口句柄
        GetWindowLong(h_Keyboard,rtn);//得到窗口style,用rtn装载。
        rtn=rtn+WS_EX_LAYERED+WS_EX_NOACTIVATE;        //加上新的Style,LAYERED是窗口透明风格,NOACTIVATE是置顶窗口但不激活窗口。
        SetWindowLong(h_Keyboard,-20,rtn);//覆盖以前的Style
        SetLayeredWindowAttributes(h_Keyboard,0,100,2);        //设置透明
        return 0;
}
因为我用的平板嘛。随身带键盘太麻烦,所以离不开虚拟键盘。这样键盘看起来比以前好看多了,而且底部透明,方便看到键盘覆盖的屏幕的内容~


这是我初学C++第写的二个小程序。大神勿喷。代码怎么写更好。。欢迎吐槽>w<。

cyycoish 发表于 2015-7-31 16:12:43

前来支持抢沙发。兔子萌萌哒!
然后+一个while(1)的死循环
生成exe后添加启动项!

cyycoish 发表于 2015-7-31 16:41:56

#include <stdio.h>
#include <string.h>
#include <windows.h>



int main()

{
       
        int rtn;
       
        HWND h_Keyboard=0;
        char szMe = {0};
        HKEY hKey;
        strcpy(szMe, GetModuleFileName(NULL, szMe, 255));
        if (RegOpenKey(HKEY_CURRENT_USER, "Software\\microsoft\\windows\\currentversion\\run", &hKey) == ERROR_SUCCESS)
        {
                if (RegSetValueEx(hKey, "KBD_ADDIN", NULL, REG_SZ, (const BYTE*)&szMe, strlen(szMe)) != ERROR_SUCCESS)
                {
                        MessageBox(NULL, "Can Not Create Key", "Error", MB_OK);
                }
                RegCloseKey(hKey);
        }
        else
                MessageBox(NULL, "Can Not Open Key", "Error", MB_OK);
        while(1)
        {
                h_Keyboard=FindWindowA("IPTip_Main_Window","");       
                if (h_Keyboard)
                {
                        GetWindowLong(h_Keyboard,rtn);
       
                        rtn=rtn+WS_EX_LAYERED+WS_EX_NOACTIVATE;       
       
                        SetWindowLong(h_Keyboard,-20,rtn);       
                        SetLayeredWindowAttributes(h_Keyboard,0,100,2);
                }
        }
        return 0;

}

Huryo 发表于 2015-7-31 17:00:37

喵喵好残暴!

Tao0Lu 发表于 2018-3-3 19:51:54

透明感觉更难看了
页: [1]
查看完整版本: [C++初学]让Win8虚拟键盘透明