WLX: VisualStudio - пляска с бубном
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Написание плагинов для Total Commander

#1: WLX: VisualStudio - пляска с бубном Author: Wizard109 PostPosted: Fri Aug 10, 2012 13:02
    —
Не могу разобраться с wlx-плагином.

Сначала кусок кода:
Code:

void __stdcall ListCloseWindow(HWND ListWin)
{
    MessageBoxA(NULL, "Bye - bye", "Information", MB_OK | MB_ICONASTERISK);
}

HWND WINAPI ListLoad(HWND ParentWin,char* FileToLoad,int ShowFlags)
{
    MSG msg;
    HWND hWnd;
    WNDCLASSEX wcex;
    HINSTANCE hInst = GetModuleHandle(NULL);

    ZeroMemory(&wcex, sizeof(wcex));
    wcex.cbClsExtra = 0;
    wcex.cbSize = sizeof(wcex);
    wcex.cbWndExtra = 0;
    wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hIcon = 0;
    wcex.hIconSm = 0;
    wcex.hInstance = hInst;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.lpszClassName = PLUGIN_WNDCLASS_NAME;
    wcex.lpszMenuName = 0;
    wcex.style = CS_CLASSDC;

    RegisterClassEx(&wcex);

    hWnd = CreateWindow(PLUGIN_WNDCLASS_NAME, PLUGIN_WNDCLASS_NAME, WS_CHILD, 0, 0, 80, 60, ParentWin, 0, hInst, 0);
    ShowWindow(hWnd, 1);
    UpdateWindow(hWnd);

    /*while(true)
    {
        if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
            if(msg.message == WM_QUIT)
                break;
        }
        else
        {
            break;
        }
    }*/

    return hWnd;
}


1. Если цикл с PeekMessage закомментирован - никаких ошибок не возникает, сразу же вызывается ListCloseWindow.
2. На основании п.1 возникло предположение что цикл обработки сообщений все-таки должен быть в теле ListLoad. Ок. Убираем комментарии и получаем:
* плагин работает нормально, взаимодействует с DirectX, по Esc получаем сообщение Bye-bye и lister закрывается. В ListCloseWindow пробовал закрывать окно, убивать HANDLE и ... n-вариантов.
* второй раз lister открывается но при отображении сразу же вываливает
Quote:

System Error. Code: 1400.
Недопустимый дескриптор окна.

* при закрытии Тотала имеем крэш:
Quote:

Имя события проблемы: APPCRASH
Имя приложения: TOTALCMD.EXE
...
Имя модуля с ошибкой: GSALister.wlx
...
Код исключения: c0000005
Смещение исключения: 00003202
Версия ОС: 6.1.7601.2.1.0.256.1


В OllyDbg лезть как-то совсем не хочется. Кто-нибудь знает что я не так делаю ?[/code]

#2:  Author: MaximusLocation: Украина, Кировоградская обл., г. Знаменка PostPosted: Fri Aug 10, 2012 23:59
    —
Попробуй так:
Code:
hWnd = CreateWindow(PLUGIN_WNDCLASS_NAME, PLUGIN_WNDCLASS_NAME, WS_OVERLAPPEDWINDOW, 0, 0, 80, 60, 0, 0, hInst, 0);
if(hWnd)
{
   SetWindowLong(hWnd,GWL_STYLE,WS_CHILD | WS_MAXIMIZE & !WS_CAPTION & !WS_BORDER);
   SetParent(hWnd,ParentWin);
}


#3:  Author: Wizard109 PostPosted: Sat Aug 11, 2012 00:14
    —
Maximus wrote:
Попробуй так:
Код:
hWnd = CreateWindow(PLUGIN_WNDCLASS_NAME, PLUGIN_WNDCLASS_NAME, WS_OVERLAPPEDWINDOW, 0, 0, 80, 60, 0, 0, hInst, 0);
if(hWnd)
{
SetWindowLong(hWnd,GWL_STYLE,WS_CHILD | WS_MAXIMIZE & !WS_CAPTION & !WS_BORDER);
SetParent(hWnd,ParentWin);
}



Пасиб. попробую завтра.
Сейчас оказалось что проблема была с тем, что у меня был установлен GSA Lister 1.02. Даже стандартный сэмпл с ним не работал. Кроме прочего он вываливает Дельфинский сепшн, но разбирать его на си совсем не хотелось.

Кстати если плагин использует "не бесплатную" длл, но найти ее можно во многих играх, его выложат или оставить его у себя и выкладывать неофициально ?

#4:  Author: CaptainFlintLocation: Москва PostPosted: Sun Aug 12, 2012 15:06
    —
Wizard109 wrote:
Кстати если плагин использует "не бесплатную" длл, но найти ее можно во многих играх, его выложат или оставить его у себя и выкладывать неофициально ?

Зависит от лицензии на эту DLL. Если такое выкладывание нарушает лицензию, то на wincmd.ru такой плагин публиковать нельзя.



Total Commander -> Написание плагинов для Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group