博客
i780长按快捷方式解决办法及源码
i780长按开始,OK及GPS的快捷方式是指定启动程序文件的而不是跟相机及短信那样,可以在按键中进行设置,长期以来,大家都只能让这几个按键映射到默认的几个程序上。三星的任务管理器虽然不咋的,但一直以来没有用其他的任务管理器,用着还行,所以,一直没有去解决这几个键的快捷方式问题。最近有机油提出来想可以自定义,看到雨夜的ROM也解决了这个问题,所以,就下来解开看了一下。解决方案很巧妙:
首先,把默认映射的几个程序重命名。
再创建一个程序替换上去。比如长换开始的程序对应的是Launcher.exe。
替换上去的程序也很简单,只需要从注册表中读相应的键的值,然后调用就可以了。
自己动手写了个程序,C++的,运行速度飞快,完全可以忽略这个中间程序的延迟,当然,雨夜ROM中的应该也是一样的,不过,我没有试过。下面是代码:
// HotkeyRelay.cpp : Defines the entry point for the console application.
//
#include <windows.h>
#include <malloc.h>
#include "stdafx.h"
#define MAX_LENGTH 256
int _tmain(int argc, _TCHAR* argv[])
{
HKEY hkey;
DWORD dwRet;
DWORD dwDisposition;
DWORD dwType;
DWORD dwSize;
LPTSTR m_szApplication = (LPTSTR)malloc( MAX_LENGTH );
SHELLEXECUTEINFO shExecInfo = {0};
dwRet = RegCreateKeyEx( HKEY_LOCAL_MACHINE,
TEXT("Software\\Microsoft\\Shell\\Keys\\40C7"),
0,
NULL,
0,
0,
NULL,
&hkey,
&dwDisposition );
if(dwRet == ERROR_SUCCESS)
{
dwType = REG_SZ;
dwSize = MAX_LENGTH - 1;
// Query registry value.
//
dwRet = RegQueryValueEx( hkey,
TEXT(""),
NULL,
&dwType,
(PBYTE)m_szApplication,
&dwSize );
if(dwRet == ERROR_SUCCESS)
{
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = SEE_MASK_FLAG_NO_UI;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = _T("open");
shExecInfo.lpFile = m_szApplication;
shExecInfo.lpParameters = _T("");
shExecInfo.lpDirectory = _T("");
shExecInfo.nShow = SW_SHOW;
shExecInfo.hInstApp = GetModuleHandle(NULL);
// Startup the application.
//
ShellExecuteEx(&shExecInfo);
}
RegCloseKey(hkey);
}
return 0;
}
水村,常用论坛ID:chimeny,现就职上海,每天起早探黑,主要从事.NET开发。业余爱好摄影及手机应用。