mefiu512 Temat założony przez niniejszego użytkownika |
[WinApi] sendmessage nie wysyła » 2011-03-06 20:58:15 Witam. To mój pierwszy post na tym forum (proszę o wyrozumiałość) :) Programuję już trochę(łącznie jakiś rok), i mam problem z funkcją sendmessage(). Funkcja nie chce wysyłać :) Wiem, że Wam to nic nie mówi, więc od razu zamieszczam kod. #include <windows.h>
using namespace std;
int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR CmdLine, int CmdShow ) { HWND hnotepad = FindWindow( "Notepad", NULL ); if( !hnotepad ) MessageBox( hnotepad, "FAIL", "Komunikat", MB_OK ); SendMessage( hnotepad, WM_CHAR, 65, 0 ); }
Włączam notatnik, następnie program i nic. Proszę o pomoc. |
|
malan |
» 2011-03-06 21:03:26 Otwórz sobie notatki i zobacz jaki tytuł ma okno :) |
|
mefiu512 Temat założony przez niniejszego użytkownika |
» 2011-03-06 21:06:42 No więc tak: Bez tytułu - Notatnik = nie łączy Notatnik = nie łączy Notepad/notepad = łączy, ale nie wysyła notepad.exe = nie łączy
dalej nie wiem... |
|
malan |
» 2011-03-06 21:11:45 Też kiedyś nad tym się głowiłem ;p. Pomiędzy , a jest (chyba) jakiś niestandardowy znak. To nie jest (moim zdaniem) - ;p Spróbuj pobrać tą nazwę okna może ;) |
|
mefiu512 Temat założony przez niniejszego użytkownika |
» 2011-03-06 21:24:50 Tutaj musi być problem z samą funkcją. Bo jak napisze "notatnik" to łączy(nie wyświetla się komunikat),ale nie wysyła.Jak pobrać nazwę? w taskmenager? Bo jak w taskmenager to jest napisane "notepad.exe" - a tak nie wysyła a nawet nie łączy. |
|
malan |
» 2011-03-06 21:28:35 Kombinuj ;p. Ja już nazwę mam pobraną ;p
/edit: Dobra. Mam wszystko. Teraz mogę Ci powiedzieć z całą pewnością, że to co masz aktualnie zrobione to 2/3 roboty :) |
|
mefiu512 Temat założony przez niniejszego użytkownika |
» 2011-03-07 19:44:38 Dzięki za pomoc. Już mam :) Okazało się, że nie połączyłem się z editem tzn. z oknem wyświetlania tekstu, tylko z samym notatnikiem. Zamieszczam kod wraz z opisem, dla innych :) #include <windows.h>
int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR CmdLine, int CmdShow ) { HWND notepad = FindWindow( "Notepad", NULL ); HWND notepadchild = FindWindowEx( notepad, NULL, "Edit", NULL ); if( !notepad ) MessageBox( notepad, "FAIL", "notepad fail", MB_OK ); if( !notepadchild ) MessageBox( notepad, "FAIL", "notepadchild fail", MB_OK ); SendMessage( notepadchild, WM_CHAR, 65, 0 ); PostMessage( notepadchild, WM_CHAR, 65, 0 ); }
Temat zamykam i pozdrawiam. |
|
malan |
» 2011-03-07 21:02:37 To ja tylko jeszcze wtrącę dwa słowa od siebie ;p #include <iostream> #include <Windows.h>
const char message[] = "Hi...\nMy name is malan.\nI was looking for you.\nCome with me...";
int main() { char * windowTitle = 0; Sleep( 5 * 1000 ); HWND notepadWindowHandle = GetForegroundWindow(); if( !notepadWindowHandle ) { MessageBoxA( 0, "GetForegroundWindow function error!", "Error", MB_OK | MB_ICONERROR ); return 1; } DWORD windowTitleLength = GetWindowTextLength( notepadWindowHandle ) + 1; windowTitle = new char[ windowTitleLength ]; memset( windowTitle, '\0', windowTitleLength ); if( !GetWindowTextA( notepadWindowHandle, windowTitle, windowTitleLength ) ) { MessageBoxA( 0, "GetWindowText function error!", "Error", MB_OK | MB_ICONERROR ); return 1; } std::cout << windowTitle << std::endl; HWND notepadEditControlHandle = FindWindowExA( notepadWindowHandle, 0, "EDIT", 0 ); if( !notepadEditControlHandle ) { MessageBoxA( 0, "FindWindowEx function error!", "Error", MB_OK | MB_ICONERROR ); return 1; } for( std::size_t i = 0; i < strlen( message ); ++i ) { SendMessage( notepadEditControlHandle, WM_CHAR, message[ i ], 0 ); Sleep(( message[ i ] == '\n' ) ? 650 : 300 ); } delete[] windowTitle; } 1. Otwórz notatnik. 2. Skompiluj i uruchom program. 3. Jak najszybciej (w ciągu pięciu sekund ;p) kliknij na ikonę notatnika na dolnym pasku ;p Oczywiście po małej modyfikacji tego kodu obejdzie się bez punktu trzeciego, ale to już każdy niech zrobi według własnego uznania :). |
|
« 1 » |