SendMessage的问题。怎么给不在当前的窗口发送命令?

tht228 2009-07-10 08:59:09
我有一个记事本 123.txt 。不在当前窗口。我想发送命令写入 abcd 。
用SendMessage函数怎么实现?
我用
HWND   hwnd;   
hwnd=::FindWindow(NULL,"123.txt - 记事本");

函数取得了句柄,请问,下来代码该如何写?
给源代码的加倍给分。
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
WaistCoat17 2009-07-11
  • 打赏
  • 举报
回复
你用的MFC???
改成::SendMessage试试
  • 打赏
  • 举报
回复
unicode的话
HWND mainhwnd,hwnd;
mainhwnd=::FindWindow(NULL,_T("123.txt - 记事本")); //类名空,窗口名要加_T("")
hwnd = ::FindWindowEx (mainhwnd, NULL, "Edit", NULL);
CString str;
str=abcd;
::SendMessage (hwnd, WM_SETTEXT, NULL,(LPARAM)(LPCTSTR)str); //如果不是unicode(LPCSTR)
::UpdateWindow (mainhwnd);


  • 打赏
  • 举报
回复
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd;
HWND mainhwnd;
mainhwnd=::FindWindow("Notepad",NULL);
if(mainhwnd != NULL)
{
hwnd = ::FindWindowEx (mainhwnd, NULL, "Edit", NULL);
if (hwnd != NULL)
{
char str[] = "写到记事本";
::SendMessage (hwnd, WM_SETTEXT, NULL,(LPARAM)str);
::UpdateWindow (mainhwnd);
}
}
return 0;
}
summericeyl 2009-07-11
  • 打赏
  • 举报
回复
4楼的方法好是好, 好像就是不能制定制定文本文件的窗口吧
tht228 2009-07-10
  • 打赏
  • 举报
回复
有变量没定义啊
tht228 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 WaistCoat17 的回复:]
C/C++ code// 取Notepad句柄
HWND hNotePad = FindWindowEx( NULL, NULL, _T("Notepad"), _T("123.txt - 记事本"));

if (hNotePad)
{
// 取Edit句柄
HWND hEdit = FindWindowEx(hNotePad, NULL, _T("Edit"), NULL);
if (hEdit)
{
// 取当前内容长度
LRESULT dwSize = SendMessage(hEdit, WM_GETTEXTLENGTH, 0L, 0L );
dwSize += lstrlen("abcd");
TCHAR* pszText …
[/Quote]

提示 error C2660: 'SendMessageA' : function does not take 4 parameters
WaistCoat17 2009-07-10
  • 打赏
  • 举报
回复
// 取Notepad句柄
HWND hNotePad = FindWindowEx( NULL, NULL, _T("Notepad"), _T("123.txt - 记事本"));

if (hNotePad)
{
// 取Edit句柄
HWND hEdit = FindWindowEx(hNotePad, NULL, _T("Edit"), NULL);
if (hEdit)
{
// 取当前内容长度
LRESULT dwSize = SendMessage(hEdit, WM_GETTEXTLENGTH, 0L, 0L );
dwSize += lstrlen("abcd");
TCHAR* pszText = new TCHAR[dwSize+1];

// 取当前内容
SendMessage(hEdit, WM_GETTEXT, dwSize, (LPARAM)pszText);

lstrcat(pszText, _T("abcd"));

// 设置内容
SendMessage(hEdit, WM_SETTEXT, 0L, (LPARAM)pszText);
delete pszText;
}
}
用户 昵称 2009-07-10
  • 打赏
  • 举报
回复
	for( i = 0; i < l; i++ )
{
t = *( str + i );
if( t >= 'a' && t <= 'z' )
{
::SendMessage( hwnd, WM_KEYDOWN, ( WPARAM )( t + 0x20 ), 0x001f0001 );
}
else
{
::SendMessage( hwnd, WM_KEYDOWN, ( WPARAM )( t ), 0x001f0001 );
}
::SendMessage( hwnd, WM_CHAR, ( WPARAM )( t ), 0x001f0001 );
::SendMessage( hwnd, WM_KEYUP, ( WPARAM )( t ), 0xc01f0001 );
}
::SendMessage( hwnd, WM_KEYDOWN, ( WPARAM )( 13 ), 0x001f0001 );
::SendMessage( hwnd, WM_CHAR, ( WPARAM )( 13 ), 0x001f0001 );
::SendMessage( hwnd, WM_KEYUP, ( WPARAM )( 13 ), 0xc01f0001 );
用户 昵称 2009-07-10
  • 打赏
  • 举报
回复
有一个笨方法,取得窗口句柄之后,再取得里面edit控件的句柄,然后发送WM_KEYDOWN, WM_CHAR, WM_KEYUP就可以模拟键盘输入英文字符了。
xylicon 2009-07-10
  • 打赏
  • 举报
回复
直接用ofstrem 或者 fwriet 等方法把abcd写入到文本不是更方便吗?当然如果发送消息可行的,我也想知道到底是什么消息。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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