Копирование текста из MAXScript Listener в GMax
Внимание! Этот документ ещё не опубликован.
Автор: antropod
Многие знакомы с 3D редактором GMax - это бесплатный и легкий редактор, по сути - сильно облегченная версия 3ds Max.
Но, у него есть существенный минус - ограниченные возможности MAXScript Listener. Да, можно написать скрипт, который
экспортирует объекты сцены. Но, отсутствует возможность нормального сохранения результатов работы этого скрипта:
нельзя создать ни log файл, ни файловый поток. Единственный выход из ситуации - обычный Copy+Paste.
И тут опять загвоздка - текст из окна Listener'a копируется сильно урезаными кусками.
Конечно это не проблема для того, кто знаком с WinAPI:
#include <windows.h> void ErrorMessage(string text, int code) { MessageBoxA( 0, text, "MAXScript Listener Capture", MB_OK | MB_ICONERROR); exit( code); } int main( ) { HWND listener = FindWindowA( 0, "MAXScript Listener"); if ( !listener) ErrorMessage( "Listener window is not found", 1); HWND editor = FindWindowExA( listener, 0, "RICHEDIT", 0); if ( !editor) ErrorMessage( "Editor window is not found", 2); DWORD text_length = ( DWORD)SendMessageA( editor, WM_GETTEXTLENGTH, 0, 0); if ( !text_length) ErrorMessage( "Nothing to copy", 3); char* buffer = new char[text_length+1]; buffer[text_length-1] = 0; DWORD num_chars = ( DWORD)SendMessageA( editor, WM_GETTEXT, text_length, ( LPARAM)buffer); HANDLE console = GetStdHandle( STD_OUTPUT_HANDLE); DWORD written = 0; WriteFile( console, buffer, num_chars, &written, 0); delete[] buffer; if ( num_chars != written) ErrorMessage( "Failed to write all data", 4); return 0; }
Что этот код делает? Находит окно Listener'a и просто выводит его содержимое в консоль.
Используется следующим образом:
max_capture > out.txt
То есть, просто перенаправляем STDOUT в файл out.txt.
Теперь про copy+paste можно забыть.
27 июня 2010