Код (Text): invoke GetStdHandle,STD_INPUT_HANDLE mov [stdi],eax mov [sinfo.hStdInput],eax invoke GetStdHandle,STD_OUTPUT_HANDLE mov [stdo],eax mov [sinfo.hStdOutput],eax invoke GetCommandLine mov [sci],eax mov [sinfo.cb],sizeof.STARTUPINFO mov [sinfo.dwFlags],STARTF_USESHOWWINDOW ; + STARTF_USESIZE ; STARTF_USESTDHANDLES mov dword [sinfo.dwX],0 mov dword [sinfo.dwY],0 invoke ExpandEnvironmentStrings,'%systemroot%\system32\cmd.exe',exec,MAX_PATH invoke CreateProcess,exec,[sci],NULL,NULL,\ TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,sinfo,pinfo ; DETACHED_PROCESS cmp eax,NULL je exit invoke WaitForSingleObject,[pinfo.hProcess],INFINITE ; INFINITE dd 0xffffffff exit: section '.data' readable writable sinfo STARTUPINFO <> pinfo PROCESS_INFORMATION <> ... Почему sinfo.dwX = 0 не реагирует? bInheritHandles и dwCreationFlags ?
Так и есть, убрал директиву format PE Console и окно прыгнуло в левый угол 0,0 Интересно это не будет мешать для запуска far.exe итп, может так и оставить format PE GUI ?
А каким образом? Мне вобще-то нужно по заданным координатам открыть. Я сначала пробовал записывать настройки консоли в реестр, но это срабатывает только при вторичном открытии консоли. GUI вариант не удобен тем, что при стартде из консоли открывается в новом окне.
Semiono Потому что sinfo.dwX - это лишь благое пожелание, удовлетворять которое должна не ОС, а запускаемый процесс, проверяя, какие параметры ему передали. Абсолютное большинство разработчиков эти параметры игнорируют.
Попробую два модуля слепить, один пишет реестр, а другой открывает консоль, ламерское решение похоже единственное что поможет.
а хендл окна получить и сделать MoveWindow пробовали? или SetWindowPos? потому что в глубине души консоль в целом от обычного окна не особо отличается. Хендл у консольного окна точно есть.
А есть способ два модуля склеить в один exe? Я где-то что-то такое видел, но не помню. Чтобы из одного EXE два exe появлялось и исчезало? =) Кстати, у Руссиновича 64 модули из обычных типа filemon.exe выскакивают и после закрытия проги опять исчезают, хотя можно сохранить и вполне юзать filemon64.exe. Но фитча красивая, может кто знает как? Нашёл https://wasm.ru/forum/viewtopic.php?id=28236 хотя не ясно, есть ли решение. Решений много! =)
MoveWindow реагирует! invoke FindWindow,'ConsoleWindowClass',NULL ; eax = hWnd Очень неудобно, что функции заставляют nWidth, nHeight, или cx, cy указывать. CMD привязанно к текстовому режиму и там какие-то свои раскладки, 800x600 открывается в плющеном окне, и вообще другие размеры окна не воспринимаются. Ещё вариант, пока не пойму, вроде нормально работает, хотя размеры консоли устанавливать пикселями как-то сомнительно, шрифты же там не ttf, вообщем фиг его знает. Код (Text): wp WINDOWPLACEMENT mov [wp.showCmd],SW_SHOW mov [wp.rcNormalPosition.left],0 mov [wp.rcNormalPosition.top],30 mov [wp.rcNormalPosition.right],800 mov [wp.rcNormalPosition.bottom],600 invoke FindWindow,'ConsoleWindowClass',NULL invoke SetWindowPlacement,eax,wp Я хоть правильно под.структуру указал через две точки? Всегда пугает встреча всяких UNIT внутри структуры, может кто скажет в двух словах как это в fasm записывать, общий принцып? Или я уже разобрался с этим?
Код (Text): mov [wp.showCmd],SW_SHOWNORMAL ; SW_SHOW mov [wp.rcNormalPosition.top],4 mov [wp.rcNormalPosition.left],130 mov [wp.rcNormalPosition.right],0x7fffffff mov [wp.rcNormalPosition.bottom],0x00007fff Похоже что на консоль только малые значения влияют, так как она не растягивается 7fff - это что максимальный long unasinged? Т.к. дальше окно падает, или это задумка cmd?
offtop: у меня есть такой инклюд: Код (Text): ; %FasmDir%/const.inc: HKCU equ HKEY_CURRENT_USER HKLM equ HKEY_LOCAL_MACHINE который я прописал в win32ax.inc между include 'win32a.inc' и include 'macro/if.inc' Посути баловство, но я хотел в дальнейшем наростить его полезным контентом по возможности. Но какие-то глюки возникают необъяснимые! Только что я кампилил RegOpenKeyEx с хендлом HKCU и были ошибки, пока я не додумался указать кавычки во включаемом файле. Получилось так HKCU equ 'HKEY_CURRENT_USER', причём в HKLM это пофигу, а именно HKCU выдавал ошибку памяти... Я так же попробовал внутри функции указывать скобки 'HKCU' и всё как бы стало кампилиться. Но вот читаю статью и опять RegOpenKeyEx, теперь уже наоборот кавычки не воспринимает, кампилиться только с чистым HKEY_CURRENT_USER либо HKCU equ HKEY_CURRENT_USER бред какой-то! Может тут есть рациональное зерно? Я лично не понял.