не работат GetWindowText
От: narik1985  
Дата: 22.09.09 23:03
Оценка:
// AnaliseCircuit.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "AnaliseCircuit.h"
#include "winbase.h"
#define AnliseCircuitMain WinMain
#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                     // current instance
TCHAR szTitle[MAX_LOADSTRING];       // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name

// Forward declarations of functions included in this code module:
ATOM             MyRegisterClass(HINSTANCE hInstance);
BOOL             InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

LPTSTR *lpsz;

HWND    hWnd;

int WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
)
{
    MSG         msg;
    WNDCLASSEX  wc;

    static LPCTSTR lpszAppName = (LPCTSTR)L"123";
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = (WNDPROC)WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(hInstance, lpszAppName);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_MENU+10);
    wc.lpszMenuName  = lpszAppName;
    wc.lpszClassName = lpszAppName;
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.hIconSm       = NULL;

    if ( RegisterClassEx( &wc ) == 0 ) {return 3;}


    /*окно без заголовка*/
    hWnd = CreateWindow(lpszAppName,(LPCTSTR)L"test_module",WS_OVERLAPPEDWINDOW,0,0,450,450,NULL,NULL,hInstance,NULL);            
    if ( hWnd == NULL )
        return( FALSE );
    ShowWindow( hWnd, SW_SHOW );
    int size_of_byte;
    LPWSTR lpString;
    lpString = L"Word.Application";
    size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));

    while( GetMessage( &msg, NULL, 0, 0) )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return( msg.wParam );
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
    {
    case WM_CREATE:
        break;
    case WM_DESTROY:
        delete lpsz;
         PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}


вызов size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));
дает 0, если мы вызываем потом GetLastError() выдает 1400 ошибка хэндела, в чем я не прав?

добавил разметку и исправил табуляцию — Кодт
23.09.09 13:45: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: не работат GetWindowText
От: Fwiffo Россия  
Дата: 22.09.09 23:28
Оценка:
Здравствуйте, narik1985, Вы писали:

N>LPWSTR lpString;

N>lpString = L"Word.Application";
N>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));

Так делать категорически нельзя. Строковые константы в c++ имеют тип char* по историческим причинам, но это настоящие константы, и компилятор имеет полное право положить их в read-only память. Что он и сделал в вашем случае.
Re: не работат GetWindowText
От: abrec Россия  
Дата: 23.09.09 09:12
Оценка:
Здравствуйте, narik1985, Вы писали:


N>int size_of_byte;
N>LPWSTR lpString;
N>lpString = L"Word.Application";
N>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));
N>вызов size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));


А память под буфер кто будет выделять?
Re[2]: не работат GetWindowText
От: narik1985  
Дата: 23.09.09 09:26
Оценка:
Здравствуйте, abrec, Вы писали:

A>Здравствуйте, narik1985, Вы писали:



A>
N>>int size_of_byte;
N>>LPWSTR lpString;
N>>lpString = L"Word.Application";
N>>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));
N>>вызов size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));
A>


A>А память под буфер кто будет выделять?


int size_of_byte;
LPWSTR *lpString;
lpString = new LPWSTR(GetWindowTextLength(hWnd));
size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));

так?
Re[3]: не работат GetWindowText
От: narik1985  
Дата: 23.09.09 09:29
Оценка:
A>>А память под буфер кто будет выделять?

N>int size_of_byte;

N>LPWSTR *lpString;
N>lpString = new LPWSTR(GetWindowTextLength(hWnd));
N>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));

size_of_byte = GetWindowText(hWnd,*lpString,GetWindowTextLength(hWnd));

N>так?
Re[3]: не работат GetWindowText
От: abrec Россия  
Дата: 23.09.09 09:33
Оценка:
Здравствуйте, narik1985, Вы писали:

N>Здравствуйте, abrec, Вы писали:


A>>Здравствуйте, narik1985, Вы писали:



A>>
N>>>int size_of_byte;
N>>>LPWSTR lpString;
N>>>lpString = L"Word.Application";
N>>>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));
N>>>вызов size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));
A>>


A>>А память под буфер кто будет выделять?


N>int size_of_byte;

N>LPWSTR *lpString;
N>lpString = new LPWSTR(GetWindowTextLength(hWnd));
N>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));

N>так?

да
Re[3]: не работат GetWindowText
От: abrec Россия  
Дата: 23.09.09 09:35
Оценка:
Здравствуйте, narik1985, Вы писали:

просмотрел
так
N>int size_of_byte;
N>LPWSTR lpString;
это уже указатель
N>lpString = new LPWSTR(GetWindowTextLength(hWnd));
N>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));

N>так?
Re[4]: не работат GetWindowText
От: Voinov Россия http://www.svoinov.ru
Дата: 23.09.09 19:31
Оценка:
Здравствуйте, abrec, Вы писали:

A>Здравствуйте, narik1985, Вы писали:


A>просмотрел

A>так
N>>int size_of_byte;
N>>LPWSTR lpString;
A>это уже указатель
N>>lpString = new LPWSTR(GetWindowTextLength(hWnd));
N>>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));

N>>так?


lpString = new WCHAR[GetWindowTextLength(hWnd) + 1];
size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd) + 1);

Вы же ведь должны выделить буфер для строки. Строка состоит из символов, поэтому буфер надо выделять для символов, а не для указателей на них. Также нужно предусмотреть место для завершающего NULL.
Re[5]: не работат GetWindowText
От: narik1985  
Дата: 23.09.09 19:55
Оценка:
Здравствуйте, Voinov, Вы писали:

V>Здравствуйте, abrec, Вы писали:


A>>Здравствуйте, narik1985, Вы писали:


A>>просмотрел

A>>так
N>>>int size_of_byte;
N>>>LPWSTR lpString;
A>>это уже указатель
N>>>lpString = new LPWSTR(GetWindowTextLength(hWnd));
N>>>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd));

N>>>так?


V>lpString = new WCHAR[GetWindowTextLength(hWnd) + 1];

V>size_of_byte = GetWindowText(hWnd,lpString,GetWindowTextLength(hWnd) + 1);

V>Вы же ведь должны выделить буфер для строки. Строка состоит из символов, поэтому буфер надо выделять для символов, а не для указателей на них. Также нужно предусмотреть место для завершающего NULL.


Спасибо, все заработало)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.