Не вздумайте отправить в HELHEIM :-)

Тема в разделе "WASM.WIN32", создана пользователем Asterix, 30 сен 2004.

  1. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Короче, что-то прога пашет только в win98, а в 2k окно не масштабируется и

    позиция не устанавливается.. Что я не учёл?


    Код (Text):
    1.  
    2. format PE GUI 4.0
    3. entry start
    4.  
    5. include '%fasminc%\win32a.inc'
    6.  
    7.  
    8. section '.code' code readable executable
    9.  
    10. align 4
    11. start:
    12.   mov edi, sBuff
    13.   invoke GetWindowsDirectory, edi, 260
    14.   test eax, eax
    15.   jz @exit
    16.   invoke lstrcat, edi, szFileName
    17.   test eax, eax
    18.   jz @exit
    19.   xor esi, esi
    20.   mov ebx, 5
    21. align 4
    22. @@:
    23.   invoke CreateProcess, esi, edi, esi, esi, esi, NORMAL_PRIORITY_CLASS,\
    24.                         esi, esi, StartupInfo, ProcessInfo
    25.   test eax, eax
    26.   jz @exit
    27.   invoke CloseHandle, [ProcessInfo.hThread]
    28.   invoke CloseHandle, [ProcessInfo.hProcess]
    29.   dec ebx
    30.   jnz @B
    31. @exit:
    32.   invoke ExitProcess, esi
    33.  
    34.  
    35. section '.data' data readable writeable
    36.  
    37. szFileName     db  '\notepad.exe',0
    38. StartupInfo:
    39.   cb               dd sizeof.STARTUPINFO
    40.   lpReserved       dd NULL
    41.   lpDesktop        dd NULL
    42.   lpTitle          dd NULL
    43.   dwX              dd 5
    44.   dwY              dd 5
    45.   dwXSize          dd 400
    46.   dwYSize          dd 300
    47.   dwXCountChars    dd 0
    48.   dwYCountChars    dd 0
    49.   dwFillAttribute  dd 0
    50.   dwFlags          dd STARTF_USESHOWWINDOW or STARTF_USEPOSITION or STARTF_USESIZE
    51.   wShowWindow      dw SW_SHOW
    52.   cbReserved2      dw 0
    53.   lpReserved2      dd NULL
    54.   hStdInput        dd 0
    55.   hStdOutput       dd 0
    56.   hStdError        dd 0
    57.  
    58.  
    59. section '.udata' readable writeable
    60.  
    61. ProcessInfo    PROCESSINFO
    62. sBuff          rb  260
    63.  
    64.  
    65. section '.idata' import data readable
    66.  
    67. library kernel32,'KERNEL32.DLL'
    68. include '%fasminc%\APIA\KERNEL32.INC'
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    <ol type=1><li>прежде чем задать вопрос, проанализируй результат GetLastError после CreateProcess;<li>в w2k блокнот располагается в GetSystemDirectory, а не в GetWindowsDirectory;<li>неплохо бы проверять есть ли слеш в конце полученного пути и достаточно ли в буфере места для добавления имени запускаемой программы.</ol>



    PS если еще добавить неудачный, на мой взгляд, выбор заголовка, то этой теме самое место в WASM.HELHEIM
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    q_q

    2) ничего подобного, у меня он есть и в Windows директории, да скорее и у тебя тоже..

    1),3) разве я сказал что блокнот не запускается, я говорил что не выставляются размеры и положение окна notepad'а



    в HELHEIM ему не место :derisive:
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    , да скорее и у тебя тоже

    У меня в winnt нет, возможно, я его удалил. Посмотрел на соседней xp’шке – действительно два раза, и еще раз в dllcache.



    разве я сказал что блокнот не запускается, я говорил что не выставляются размеры

    Хорошо. Тогда так. В реестре w2k есть ключик HKEY_CURRENT_USER\Software\Microsoft\Notepad, а в нем есть iWindowPosX, iWindowPosY, iWindowPosDX, iWindowPosDY.
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    q_q

    > У меня в winnt нет, возможно, я его удалил.



    У тебя винда неправильная, потому что я когда-то в какой-то из двух Windows 2k или XP пытался удалить notepad.exe, но он всё время появлялся снова, хотя может это был calc.exe, точно не помню. Если его там не будет могут быть проблемы с совместимостью с прогами написанными для win98 и вызывающими notepad.exe



    > Хорошо. Тогда так. В реестре w2k есть ключик HKEY_CURRENT_USER\Software\Microsoft\Notepad



    Спасибо. Я догадывался что ключик есть раз уж блокнот запоминает позицию, но всё-же это неправильно, должен же быть приоритет параметров передаваемых через структуру STARTUPINFO, перед теми параметрами что содержаться в реестре..
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    должен же быть приоритет параметров передаваемых через структуру STARTUPINFO

    Ты, в своих программах, хоть раз использовал GetStartupInfo для получения координат окна? Часто ли используешь overlapped window в комплекте с CW_USEDEFAULT?
     
  7. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    А если попробовать запустить блокнот без поиска в виндовой папке, а просто "notepad"? ShellExecuteEx спокойно запускает блокнот и не жужжит. Вобще, все, что лежит в виндовой или системной папках, запускается без указания пути - это стандартный путь поиска проги. Но вот насчет CreateProcess не знаю, может он не ищет автоматом.. В любом случае, если надо запустить прогу и все, то лучше юзать ShellExecute (кстати, запускает не только проги).
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    n0p

    Речь не шла о простом запуске, нужно было запустить с заданными, вполне конкретными, параметрами окна, мне показалось что ShellExecute этого не умеет. Насколько я помню ShellExecute тоже сводится к CreateProcess.. может и ошибаюсь, смотреть лень сейчас.





    q_q

    > Ты, в своих программах, хоть раз использовал GetStartupInfo для получения координат окна?



    По-моему есть разница я в своих программах или MS, у них должно быть всё правильно и всё учитываться и уж тем более учитываться что структура STARTUPINFO содержит информацию о положении окна.
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    По-моему есть разница я в своих программах или MS

    Только не говори, что все программы от MS, кроме блокнота, учитывают все нюансы. Там тоже люди работают. Почему они должны быть лучше тебя? Например, мне нравится, когда программа помнит "свое место".



    PS и все таки WASM.HELHEIM :)
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    q_q

    > Например, мне нравится, когда программа помнит "свое место".



    Пусть помнит, если структура STARTUPINFO содержит нули в координатных и размерных параметрах, иначе пусть берет параметры из этой структуры, но не из реестра.
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    если структура STARTUPINFO содержит нули в координатных и размерных параметрах

    Вот и ты ошибаешься (а хочешь от MS'овцев правильности). Сначала надо проверять STARTUPINFO.dwFlags на наличие STARTF_USEPOSITION и STARTF_USESIZE.



    Пусть помнит ... иначе пусть берет ...

    Imho только личным примером ты сможешь убедить сообщество программистов в жизнеспособности такого подхода.
     
  12. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    q_q

    > Вот и ты ошибаешься (а хочешь от MS'овцев правильности)



    Я не ошибаюсь, я знаю что нужно сначала флаги проверять, просто я не стал глубоко вдаваться в описание процедуры проверки и немного утрировал её :derisive:



    > Imho только личным примером ты сможешь убедить сообщество программистов в жизнеспособности такого подхода.



    Смысла нет, я же не пишу системное приложение, которое должно учитывать потребности любого пользователя, и программиста в том числе, пусть об этом MS заботится.

    Короче это у них баг и точка >:)
     
  13. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asterix

    я же не пишу системное приложение ... это у них баг

    Легко обвинять других. Покажи всему миру как правильно писать системное приложение, возможно MS задумается, изменит свой подход и будет выпускать только качественное ПО, обладающее настройками, удовлетворяющими любые потребности любых пользователей. :)
     
  14. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Вы, должно быть, шутите! Какие еще STARTUPINFO? Лично я об этом первый раз слышу, а люди, которые пишут программы путем мышевожения по экрану и тыканья в три кнопки (а таких 75%) вобще не поймут о чем речь. А ведь именно они задают моду на программы, а не всякие дядьки из М$. Ну и что, что где-то в спецификации что-то написано? Никто их все-равно не читает.



    Хранить настройки в инишнике тоже не рекомендуется - для этого реестр есть. Но тем не менее большинство людей пользуются инишниками, потому что это удобнее, проще, а еще они не знают как в реестре гадить правильно. Ну что их за это, расстрелять теперь? Гринпис не одобрит.



    Так что не тисипите айпи и делайте все так, чтобы только работало (это я про запуск блокнота). Естественно, что в более серьезных прогах следует начихать на моду и советы пьяных товарищей и делать все по уму, а тут можно и не надо.
     
  15. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    n0p

    Хранить настройки в инишнике тоже не рекомендуется

    Imho с точки зрения кроссплатформенности нет ничего лучше текстового файла с настройками.



    более серьезных прогах следует

    Ознакомь, хотя бы меня, с критериями, определяющими серьезность программы. Imho если в мелочах привык "делать на отстаньте", то и в серьезном поведешь себя так же.
     
  16. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    если позволите, выскажусь :)



    Imho с точки зрения кроссплатформенности нет ничего лучше текстового файла с настройками.

    вообще пора на xml переходить (я без всякой иронии)

    кто-нибудь считает, что это будет тормозить работу программы ?



    что касается STARTUPINFO, я считаю, что

    эту структуру M$ должна была обработать,

    notepad все-таки, не calc ведь...
     
  17. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Во-во, даже MS рекомендует использовать вместо "хрупкого реестра" manifest
     
  18. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Funbit

    > вообще пора на xml переходить



    Понятия не имею как их юзать, особенно в асм'е.

    С ini попроще работать и гораздо надёжнее чем с реестром.
     
  19. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Понятия не имею как их юзать, особенно в асм'е.



    Funbit, в общем-то, прав. Юзать их просто. Только не самому код писать, а заюзать библиотеку. Нормальная библиотека - это expat. Его API выучить и юзать. И все будет ОК :)
     
  20. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    Asterix

    в MSDN посмотри XML DOM

    ms-help://MS.MSDNQTR.2002JUL.1033/dnxml/html/beginner.htm



    а юзать - создать пару объектов используя ф-ции COM и работать с ними, или через какую-нибудь thirdparty (т.е. не msxml) дллку.

    надо бы как-нибудь оформить поудобнее это дело для асма :)