程序是想启动默认的邮件编辑器然后把一些字符自动显示在"新邮件"窗口的编辑框里,现在只写了针对Outlook Express的代码.
可是问题出现了,直接运行程序的话用Spy++查看时什么也没有写进去;如果Debug的话能用Spy++看到字符串已经写到了控件里,可是什么也没有显示出来.#include <WINDOWS.H>#include <iostream>
#include <string>
using namespace std;LPCTSTR QueryReg ();
void FindReplace (string &str, const char *strFind, const char *strReplace);void main()
{
static PTSTR pString = "Gibson";
LPCTSTR fileLocation = QueryReg ();
string str = fileLocation;
FindReplace (str,"%ProgramFiles%","C:\\PROGRA~1");
WinExec (str.c_str(), SW_SHOW);
HWND hWindow = FindWindow("ATH_Note", "新邮件");
HWND hChildWindow = FindWindowEx(hWindow, NULL, "OE_Envelope", "");
HWND hControl = FindWindowEx(hChildWindow, NULL, "ComboBox", "");
hControl = GetNextDlgTabItem(hChildWindow,hControl,FALSE);
SetDlgItemText(hChildWindow, GetDlgCtrlID(hControl), pString);
}LPCTSTR QueryReg ()
{
LPCTSTR subKey = "mailto\\shell\\open\\command\\";
HKEY hKEY;
LPBYTE Data;
DWORD cbData = 80;
Data = new BYTE[80];
RegOpenKeyEx (HKEY_CLASSES_ROOT, subKey, 0, KEY_READ, &hKEY);
RegQueryValueEx (hKEY, NULL, NULL, NULL, Data,& cbData);
RegCloseKey (HKEY_CLASSES_ROOT);
char * value = (char*)Data;
return value;
}void FindReplace (string &str, const char *strFind, const char *strReplace)
{
int nIndex = 0;
while ( (nIndex = str.find (strFind, nIndex)) != -1 )
{
str.replace ( nIndex, strlen (strFind), strReplace );
nIndex += strlen (strFind);
}
}
可是问题出现了,直接运行程序的话用Spy++查看时什么也没有写进去;如果Debug的话能用Spy++看到字符串已经写到了控件里,可是什么也没有显示出来.#include <WINDOWS.H>#include <iostream>
#include <string>
using namespace std;LPCTSTR QueryReg ();
void FindReplace (string &str, const char *strFind, const char *strReplace);void main()
{
static PTSTR pString = "Gibson";
LPCTSTR fileLocation = QueryReg ();
string str = fileLocation;
FindReplace (str,"%ProgramFiles%","C:\\PROGRA~1");
WinExec (str.c_str(), SW_SHOW);
HWND hWindow = FindWindow("ATH_Note", "新邮件");
HWND hChildWindow = FindWindowEx(hWindow, NULL, "OE_Envelope", "");
HWND hControl = FindWindowEx(hChildWindow, NULL, "ComboBox", "");
hControl = GetNextDlgTabItem(hChildWindow,hControl,FALSE);
SetDlgItemText(hChildWindow, GetDlgCtrlID(hControl), pString);
}LPCTSTR QueryReg ()
{
LPCTSTR subKey = "mailto\\shell\\open\\command\\";
HKEY hKEY;
LPBYTE Data;
DWORD cbData = 80;
Data = new BYTE[80];
RegOpenKeyEx (HKEY_CLASSES_ROOT, subKey, 0, KEY_READ, &hKEY);
RegQueryValueEx (hKEY, NULL, NULL, NULL, Data,& cbData);
RegCloseKey (HKEY_CLASSES_ROOT);
char * value = (char*)Data;
return value;
}void FindReplace (string &str, const char *strFind, const char *strReplace)
{
int nIndex = 0;
while ( (nIndex = str.find (strFind, nIndex)) != -1 )
{
str.replace ( nIndex, strlen (strFind), strReplace );
nIndex += strlen (strFind);
}
}
解决方案 »
- 导出对话框模板时,如何进行模块状态切换
- 还要问两个函数的作用,只是播放列表类载主类里的两个函数
- 利用剪贴板进行通信的一个小问题:写入剪贴板中的内容是乱码?
- 如何用c大量的导出SQL数据到DBF文件,和将DBF文件迅速转入到SQL中
- 不在开始任务拦上显示着个应用程序?
- 一个简单问题,LoadLibrary(ICMP.dll)之后会引发什么消息??
- 请问哪里能下载F1Book报表控件?哪位大虾能介绍下用法?
- 请教CList和CMap的用法.
- 请教各位大侠一个问题,如何实现98下不用输密码退出屏保.......
- 求助: 是什么害死了我的 MSDN
- 进程间的通信问题,可以解决的来!
- 不好意思:问一个WORD的问题!
可是Debug时用Spy++查看时是:********"Gibson"RichEdit20W
__________________________________________________________________________________
有道理,我在WinExec (str.c_str(), SW_SHOW)后面加了个Sleep()就可以了.
可是往编辑框里写进去了数据了,为什么显示不出来呢?RichEdit20W不是""了,已经是"Gibson"了,可是什么也没有显示出来啊