winApi при взятии значения из edit всё крашится

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cepera666, 15 May 2013.

  1. cepera666

    cepera666 New Member

    Joined:
    22 Jan 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Всем привет! Есть exe-шник программы, написанной на delphi. Я пишу на с++. При помощи spy++ нашёл все нужные edit'ы, пытаюсь украсть значения, но

    1) программа почти всегда крашится по непонятной мне причине

    2) когда значения всё же получается получить, они не те, что есть в той программе в данный момент, а те, которые прописаны там при запуске этой программы, что мне так же непонятно.

    Code:
    HWND hWnd = FindWindow(NULL, L"Reliability"); // ищем наше окошко
    				
    if (hWnd) // если нашли окошко
    {
    	HWND TPageControl = FindWindowEx(hWnd, NULL, L"TPageControl", NULL); 
    	// берём второй по счёту TPageControl
    	TPageControl = FindWindowEx(hWnd, TPageControl, L"TPageControl", NULL);
    
    
    	HWND TTabSheet = FindWindowEx(TPageControl, NULL, L"TTabSheet", NULL); 
    
    	HWND TEdit = FindWindowEx(TTabSheet, NULL, L"TEdit", NULL);
    
    	int editlength = GetWindowTextLength(TEdit);
    	TCHAR* Targets = new TCHAR( editlength + 1 );
    	GetWindowText( TEdit, Targets, editlength + 1 ); // targets
    	textBox2->Text = gcnew String(Targets);
    }
    
    Наверное, я делаю что-то не так, но делаю это впервые, так что сильно не ругайте :)
    Спасибо!
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms633520%28v=vs.85%29.aspx

     
    _________________________
  3. cepera666

    cepera666 New Member

    Joined:
    22 Jan 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Спасибо, я идиот:)

    Code:
    int editlength = GetWindowTextLength(TEdit);
    TCHAR* Targets = new TCHAR( editlength + 1 );
    int count = SendMessage(TEdit, WM_GETTEXT, editlength + 1, (LPARAM) Targets);					
    textBox3->Text = gcnew String(Targets);
    
    всё работает.
     
  4. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А удалять Targets кто будет? Или утечка памяти это норм? И вообще, так на плюсах не программируют, где смартпоинтер для переменной Targets?
     
  5. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Нельзя просто так взять и использовать везде смарт поинтеры. Подход такой ведёт на тёмную сторону Силы.
     
    _________________________