cmd.exe's окно вообще можно подвинуть?

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 14 окт 2010.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1.         invoke GetStdHandle,STD_INPUT_HANDLE
    2.         mov [stdi],eax
    3.         mov [sinfo.hStdInput],eax
    4.  
    5.         invoke GetStdHandle,STD_OUTPUT_HANDLE
    6.         mov [stdo],eax
    7.         mov [sinfo.hStdOutput],eax
    8.  
    9.         invoke GetCommandLine
    10.         mov [sci],eax
    11.  
    12.         mov [sinfo.cb],sizeof.STARTUPINFO
    13.         mov [sinfo.dwFlags],STARTF_USESHOWWINDOW ; + STARTF_USESIZE ; STARTF_USESTDHANDLES
    14.         mov dword [sinfo.dwX],0
    15.         mov dword [sinfo.dwY],0
    16.  
    17.         invoke ExpandEnvironmentStrings,'%systemroot%\system32\cmd.exe',exec,MAX_PATH
    18.         invoke CreateProcess,exec,[sci],NULL,NULL,\
    19.                TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,sinfo,pinfo ; DETACHED_PROCESS
    20.         cmp eax,NULL
    21.         je exit
    22.  
    23.         invoke WaitForSingleObject,[pinfo.hProcess],INFINITE    ; INFINITE dd 0xffffffff
    24. exit:
    25.  
    26. section '.data' readable writable
    27.  
    28.         sinfo STARTUPINFO <>
    29.         pinfo PROCESS_INFORMATION <>
    30. ...
    Почему sinfo.dwX = 0 не реагирует? bInheritHandles и dwCreationFlags ?
     
  2. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Так и есть, убрал директиву format PE Console и окно прыгнуло в левый угол 0,0
    Интересно это не будет мешать для запуска far.exe итп, может так и оставить format PE GUI ?
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    рандом не помогает, да?
     
  4. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    А каким образом?
    Мне вобще-то нужно по заданным координатам открыть.
    Я сначала пробовал записывать настройки консоли в реестр, но это срабатывает только при вторичном открытии консоли.
    GUI вариант не удобен тем, что при стартде из консоли открывается в новом окне.
     
  5. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Semiono
    Потому что sinfo.dwX - это лишь благое пожелание, удовлетворять которое должна не ОС, а запускаемый процесс, проверяя, какие параметры ему передали. Абсолютное большинство разработчиков эти параметры игнорируют.
     
  6. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Попробую два модуля слепить, один пишет реестр, а другой открывает консоль, ламерское решение похоже единственное что поможет.
     
  7. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    а хендл окна получить и сделать MoveWindow пробовали? или SetWindowPos? потому что в глубине души консоль в целом от обычного окна не особо отличается. Хендл у консольного окна точно есть.
     
  8. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    А есть способ два модуля склеить в один exe? Я где-то что-то такое видел, но не помню.
    Чтобы из одного EXE два exe появлялось и исчезало? =)
    Кстати, у Руссиновича 64 модули из обычных типа filemon.exe выскакивают и после закрытия проги
    опять исчезают, хотя можно сохранить и вполне юзать filemon64.exe. Но фитча красивая, может кто знает как?

    Нашёл https://wasm.ru/forum/viewtopic.php?id=28236
    хотя не ясно, есть ли решение. Решений много! =)
     
  9. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    MoveWindow реагирует! :) invoke FindWindow,'ConsoleWindowClass',NULL ; eax = hWnd
    Очень неудобно, что функции заставляют nWidth, nHeight, или cx, cy указывать.
    CMD привязанно к текстовому режиму и там какие-то свои раскладки, 800x600 открывается в плющеном окне, и вообще другие размеры окна не воспринимаются.

    Ещё вариант, пока не пойму, вроде нормально работает, хотя размеры консоли устанавливать
    пикселями как-то сомнительно, шрифты же там не ttf, вообщем фиг его знает. :)

    Код (Text):
    1.         wp WINDOWPLACEMENT
    2.         mov [wp.showCmd],SW_SHOW
    3.         mov [wp.rcNormalPosition.left],0
    4.         mov [wp.rcNormalPosition.top],30
    5.         mov [wp.rcNormalPosition.right],800
    6.         mov [wp.rcNormalPosition.bottom],600
    7.         invoke FindWindow,'ConsoleWindowClass',NULL
    8.         invoke SetWindowPlacement,eax,wp
    Я хоть правильно под.структуру указал через две точки?
    Всегда пугает встреча всяких UNIT внутри структуры, может кто скажет в двух словах
    как это в fasm записывать, общий принцып? Или я уже разобрался с этим?
     
  10. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1.         mov [wp.showCmd],SW_SHOWNORMAL ; SW_SHOW
    2.         mov [wp.rcNormalPosition.top],4
    3.         mov [wp.rcNormalPosition.left],130
    4.         mov [wp.rcNormalPosition.right],0x7fffffff
    5.         mov [wp.rcNormalPosition.bottom],0x00007fff
    Похоже что на консоль только малые значения влияют, так как она не растягивается :)
    7fff - это что максимальный long unasinged? Т.к. дальше окно падает, или это задумка cmd?
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    SetWindowPos + SWP_NOSIZE не помогает?
     
  12. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    +1 недоглядел!
     
  13. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    offtop: у меня есть такой инклюд:
    Код (Text):
    1. ; %FasmDir%/const.inc:
    2. HKCU equ HKEY_CURRENT_USER
    3. 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
    бред какой-то! Может тут есть рациональное зерно? Я лично не понял.