C++ mfc学习之路二 网页按钮启动应用程序
(2011-09-30 14:26:48)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\DDIT]
@="IMHelpProtocol"
"URL Protocol"="要启动的程序的绝对路径"
[HKEY_CLASSES_ROOT\DDIT\DefaultIcon]
@="要启动的程序的绝对路径,2"(后面的数字控制的是当你点击按钮启动本地程序的时候弹出的提示框上边显示的你的程序的ICO 图标)。
[HKEY_CLASSES_ROOT\DDIT\shell]
[HKEY_CLASSES_ROOT\DDIT\shell\open]
[HKEY_CLASSES_ROOT\DDIT\shell\open\command]
@="\"要启动的程序的绝对路径" \"%1\""
把这些东西写好到记事本里面,修改他的扩展名为.reg 这样你就在注册表里面注册了一个DDIT://开头的协议了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~可爱的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
然后开始写html 代码<a href=ddit://123&456&789&0123>Click
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~可爱的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
但是这是需要用户点击注册表文件才能使文件注册到注册表里面,但是怎么才能实现不点击注册文件就实现呢,那我们只能把这段修改注册表的代码写入到要启动的程序,的初始化部门。具体代码如下:
HKEY RegKey=NULL;
CString fullName="IMHelpProtocol";
RegCreateKey(HKEY_CLASSES_ROOT,"DDIT",&RegKey);
RegSetValueEx(RegKey,NULL,0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());
fullName="要启动的文件的绝对路径";
RegSetValueEx(RegKey,"URL Protocol",0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());
fullName="要启动的文件的绝对路径,1";
设置图标的
RegCreateKey(HKEY_CLASSES_ROOT,"DDIT\\DefaultIcon",&RegKey);
RegSetValueEx(RegKey,NULL,0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());
RegCreateKey(HKEY_CLASSES_ROOT,"DDIT\\shell",&RegKey);
RegCreateKey(HKEY_CLASSES_ROOT,"DDIT\\shell\\open",&RegKey);
fullName="\"要启动的文件的绝对路径" \"%1\"";
RegCreateKey(HKEY_CLASSES_ROOT,"DDIT\\shell\\open\\command",&RegKey);
RegSetValueEx(RegKey,NULL,0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());
下面的的代码为MFC 内代码等同于上边的注册表文件代码。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~可爱的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
但是还有一些变态的 客户需要获取网页上的数据,传递给程序,这时候ddit://123&456&789&0123就是你发送的参数你可以需改//后面的字符串作为参数传递进来 中间可以用特殊符号标识,但是怎么接收呢,当然需要强大的API拉:CString text=AfxGetApp()->m_lpCmdLine;
其中的text的值就等于ddit://123&456&789&0123拉
剩下就截取拉 懒人请继续往下看:由于作为初学者代码写的比较麻烦,高手请路过,代码如下
int p1,p2,p3,p4;
这个就写把用&特殊符号隔开的字符串获取出来分别存放在数组listmessage[0]到listmessage[3]中应为只用了4个参数所以长度只定义4个。
补充一点:可以使用一下代码获取当前程序的绝对路径
TCHAR szPath[MAX_PATH];
GetModuleFileName( NULL, szPath, MAX_PATH )
CString load=(CString)szPath;
load就是程序的绝对路径。