· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Не вздумайте отправить в HELHEIM :-)

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Сен 30, 2004 03:30:25

Короче, что-то прога пашет только в win98, а в 2k окно не масштабируется и
позиция не устанавливается.. Что я не учёл?
format PE GUI 4.0
entry start

include '%fasminc%\win32a.inc'


section '.code' code readable executable

align 4
start:
  mov edi, sBuff
  invoke GetWindowsDirectory, edi, 260
  test eax, eax
  jz @exit
  invoke lstrcat, edi, szFileName
  test eax, eax
  jz @exit
  xor esi, esi
  mov ebx, 5
align 4
@@:
  invoke CreateProcess, esi, edi, esi, esi, esi, NORMAL_PRIORITY_CLASS,\
                        esi, esi, StartupInfo, ProcessInfo
  test eax, eax
  jz @exit
  invoke CloseHandle, [ProcessInfo.hThread]
  invoke CloseHandle, [ProcessInfo.hProcess]
  dec ebx
  jnz @B
@exit:
  invoke ExitProcess, esi


section '.data' data readable writeable

szFileName     db  '\notepad.exe',0
StartupInfo:
  cb               dd sizeof.STARTUPINFO
  lpReserved       dd NULL
  lpDesktop        dd NULL
  lpTitle          dd NULL
  dwX              dd 5
  dwY              dd 5
  dwXSize          dd 400
  dwYSize          dd 300
  dwXCountChars    dd 0
  dwYCountChars    dd 0
  dwFillAttribute  dd 0
  dwFlags          dd STARTF_USESHOWWINDOW or STARTF_USEPOSITION or STARTF_USESIZE
  wShowWindow      dw SW_SHOW
  cbReserved2      dw 0
  lpReserved2      dd NULL
  hStdInput        dd 0
  hStdOutput       dd 0
  hStdError        dd 0


section '.udata' readable writeable

ProcessInfo    PROCESSINFO
sBuff          rb  260


section '.idata' import data readable

library kernel32,'KERNEL32.DLL'
include '%fasminc%\APIA\KERNEL32.INC'


Дата: Сен 30, 2004 04:15:58

Asterix
  1. прежде чем задать вопрос, проанализируй результат GetLastError после CreateProcess;
  2. в w2k блокнот располагается в GetSystemDirectory, а не в GetWindowsDirectory;
  3. неплохо бы проверять есть ли слеш в конце полученного пути и достаточно ли в буфере места для добавления имени запускаемой программы.


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


Дата: Сен 30, 2004 04:24:10 · Поправил: Asterix

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

в HELHEIM ему не место ;-)


Дата: Сен 30, 2004 06:00:54

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

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


Дата: Сен 30, 2004 06:19:00 · Поправил: Asterix

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

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

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

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


Дата: Сен 30, 2004 06:54:07

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


Дата: Сен 30, 2004 11:20:51

А если попробовать запустить блокнот без поиска в виндовой папке, а просто "notepad"? ShellExecuteEx спокойно запускает блокнот и не жужжит. Вобще, все, что лежит в виндовой или системной папках, запускается без указания пути - это стандартный путь поиска проги. Но вот насчет CreateProcess не знаю, может он не ищет автоматом.. В любом случае, если надо запустить прогу и все, то лучше юзать ShellExecute (кстати, запускает не только проги).


Дата: Сен 30, 2004 11:48:15

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


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

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


Дата: Окт 1, 2004 03:58:22

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

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


Дата: Окт 1, 2004 04:39:17

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

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


Дата: Окт 1, 2004 05:40:18

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

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


Дата: Окт 1, 2004 06:13:53

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

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

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

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


Дата: Окт 1, 2004 06:37:18

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


Дата: Окт 1, 2004 10:58:00

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

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

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


Дата: Окт 1, 2004 12:13:23

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

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

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.081