大虾们,帮忙啦,救救初学者呀!!!!50分

cfeisw 2003-09-02 02:51:52
我想在我写的一个程序,这个程序运行后要在其它的程序(例如:记事本)输出一个字符串(ss),我该用那些函数呢??我知道输入法的程序就可以在其它程序里面显示的.
具体一点的问题:
  1,运行的一个记事本程序,怎么得到它的句柄(HIMC ),用那些函数,包含     那些头文件
  2,我在我的程序里面用什么来存放我要向notepad输出的字符串.是不是申请    一个内存块,然后把串放进去.(如果是,用什么函数申请内存,用那些结    构体,怎么把串放到内存中)
  3,如果串在内存中我用什么函数把它发送到我想发送的程序中(notepade),    用什么函数.因为notepad程序不是我写的,是不是我把串发过去它就会显    示出来呢!!

希望大家不吝赐教
...全文
113 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cfeisw 2003-09-02
  • 打赏
  • 举报
回复
谢谢各位的指教,但是我还有些疑问.
1,FindWindow()这个函数不熟,我想第二个参数是从那里来的呢,是不是文件名字.
  我照你们的方法试了一下,并打开了一个名为"1.txt"的记事本,然后运行我的程序
   其中包括这样的语句
hw=::FindWindow(0,"1.txt - 记事本");
SendMessage(hw,WM_CHAR,'A',0);
但是发现记事本里面没有出现应有的字符.???我那地方出错了吗.


我在写的程序是一个相当与输入法的程序,先用鼠标在我的程序里面写出汉字,由我的程序模糊识别出是那个汉字,然后我想把这个汉字发送到打开的一个可以输入的某个程序中.
我查了一下资料:
LRESULT MyGenerateMesage(HIMC hIMC, UINT msg, WPARAM wParam, LPARAM lParam)
{
LPINPUTCONTEXT lpIMC;
//HGLOBAL hTemp;
LPCOMPOSITIONSTRING lpCompStr;
LPDWORD lpdwMsgBuf;
DWORD dwMyNumMsg = 1;

// Lock the input context.
if (hIMC)
{
// It is not NULL context.
lpIMC = ImmLockIMC(hIMC);


lpCompStr = (LPCOMPOSITIONSTRING) ImmLockIMCC(lpIMC->hCompStr);
ImmUnlockIMCC(lpIMC->hCompStr);
// Lock the memory for the message buffer.
lpdwMsgBuf = (LPDWORD)ImmLockIMCC(lpIMC->hMsgBuf);
// Set the number of the messages.
lpIMC->dwNumMsgBuf += 100;

//Set the messages that the IME needs to generate.
*lpdwMsgBuf++ = (DWORD) msg;
*lpdwMsgBuf++ = (DWORD) wParam;
*lpdwMsgBuf++ = (DWORD) lParam;


// Unlock the memory for the message buffer and the input context.

//ImmUnlockIMCC(lpIMC->hMsgBuf);
ImmLockIMC(hIMC);

// Call ImmGenerateMessage function.
ImmGenerateMessage(hIMC);
}
return 0;


我对这些函数不熟,这些函数需要包含什么头文件才能运行呢,我只包含了<windows.h>,发现不能运行这些函数,出现这样的提示
error LNK2001: unresolved external symbol _ImmUnlockIMC@4

在我的程序里面我是想发送汉字或符号到其它程序去的(不知道这个程序的classname 和 windowname)SendMessage(hw,WM_CHAR,'A',0);也许可以发送但个字符,那我怎么发送汉字呢?汉字用什么存储呢?
akiko 2003-09-02
  • 打赏
  • 举报
回复
以notepad举例:
BOOL CALLBACK Proc(HWND hw, long lParam)
{
char ch[80];
if(hw)::GetClassName(hw,ch,80);
else return FALSE;
if(strcmp(ch,"Edit")==0)::PostMessage(hw,WM_CHAR,'A',0);
return TRUE;
}
HWND hw=::FindWindow(0,"1.txt - 记事本");
::EnumChildWindows(hw,Proc,0);
SlayerCarrier 2003-09-02
  • 打赏
  • 举报
回复
先用FindWindow(),WindowFromPoint()找到窗口句柄,然后用SendMessage 发消息
ajn_sailing 2003-09-02
  • 打赏
  • 举报
回复
up

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧