我有一个记事本 123.txt 。不在当前窗口。我想发送命令写入 abcd 。
用SendMessage函数怎么实现?
 我用
HWND   hwnd;   
hwnd=::FindWindow(NULL,"123.txt - 记事本"); 
  
函数取得了句柄,请问,下来代码该如何写?
给源代码的加倍给分。

解决方案 »

  1.   

    直接用ofstrem  或者 fwriet 等方法把abcd写入到文本不是更方便吗?当然如果发送消息可行的,我也想知道到底是什么消息。 
      

  2.   

    有一个笨方法,取得窗口句柄之后,再取得里面edit控件的句柄,然后发送WM_KEYDOWN, WM_CHAR, WM_KEYUP就可以模拟键盘输入英文字符了。
      

  3.   

    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 );
      

  4.   

    // 取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;
    }
    }
      

  5.   


    提示 error C2660: 'SendMessageA' : function does not take 4 parameters
      

  6.   

    你用的MFC???
    改成::SendMessage试试
      

  7.   

    #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; 

      

  8.   

    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);