как запустить 2 ую команду после 1ой

Тема в разделе "WASM.ASSEMBLER", создана пользователем 789789, 18 янв 2011.

  1. 789789

    789789 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    12
    как запустить 2 ую команду после 1 ой. они запускаются почти одновременно. . т.е. я бы хотел запустить calc после окончания пинга. сам не смог. помогите пож-та

    format PE Console
    entry start
    include 'win32a.inc'

    section '.data' readable writeable
    szShell db "C:\WINDOWS\system32\cmd.exe",0
    szCommandLine1 db "/C ping 127.0.0.1",0
    szCommandLine2 db "/C calc.exe",0
    _open db "open",0

    section '.code' code readable executable
    start:
    invoke GetModuleHandle,0
    invoke ShellExecute, eax, _open, szShell, szCommandLine1, NULL, 1
    invoke ShellExecute, eax, _open, szShell, szCommandLine2, NULL, SW_HIDE
    invoke ExitProcess,NULL

    section '.idata' import data readable

    library kernel,'kernel32.dll', shell32, 'shell32.dll'

    import kernel,\
    GetModuleHandle,'GetModuleHandleA',\
    ExitProcess,'ExitProcess'

    import shell32,\
    ShellExecute,'ShellExecuteA'
     
  2. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    789789
    Ну так например
    Код (Text):
    1. #include <windows.h>
    2. DWORD myThread(LPVOID)
    3. {
    4.  /// Тут выполняется одна задача
    5.  return 0;  
    6. }
    7. int main()
    8. {
    9.    DWORD ThreadId;
    10.    HANDLE hThread = CreateThread(NULL,0,myThread,0,0,&ThreadId);
    11.    WaitForSingleObject(hThread , INFINITE); // Ждем пока выполнится myThread()
    12.    // Тут мы как только выполнится myThread()
    13.    // Можно запускать вторую задачу  
    14. }
     
  3. artkar

    artkar New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2005
    Сообщения:
    400
    Адрес:
    Russia
    Странная задача?
    А результат пинга не важен?
    Это просто учебная задача?
     
  4. 789789

    789789 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    12
    результат пинга не важен. напишите пожта код полностью =я ноль в асме.
     
  5. 789789

    789789 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    12
    напишите пожта код полностью =я ноль в асме.
     
  6. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    Вам, батенька, к Iczelion's Win32 Assembly Tutorial part 15.
    Написать, ещё полдела, вам же ещё объяснять.
     
  7. 789789

    789789 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    12
    я асм 2 ой день изучаю. я без примера не смогу. спасибо за тутториал я там ничего не пойму. напишите пож-та код полностью. последующие команды я добавлю сам. если смогу
     
  8. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    "Многа букаф, ни асилил?"

    Окошко там, конечно в нагрузку для начинающего.
     
  9. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    Код (Text):
    1. ; example of simplified Windows programming using complex macro features
    2.  
    3. include 'win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
    4. ;include 'd:\fasmw\include\macro\if.inc'
    5.  
    6. .data
    7. ThreadId dd 0
    8. hThread dd 0
    9. INFINITE equ -1
    10. .code
    11. proc myThread Param
    12.         invoke  MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK
    13.         ret
    14. endp
    15.  
    16.   start:
    17.         invoke  CreateThread, NULL,0,myThread,0,0,ThreadId
    18.         mov [hThread], eax
    19.         invoke  WaitForSingleObject,[hThread] , INFINITE
    20.         invoke  ExitProcess,0
    21. .end start
     
  10. 789789

    789789 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    12
    paralvic

    все что смог понять= запускаются все строки invoke сразу после нажатия -ок- MessageBox.
    какого параметра не хватает в моих invoke.
     
  11. 789789

    789789 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    12
    замените пожалуйста строку

    invoke MessageBox,HWND_DESKTOP,"Hi! I'm example program!",invoke GetCommandLine,MB_OK

    на задежку в 2 секунды. не могу же нажимать ок каждый раз. или добавтье в этоку строку паузу на 2 секунды. я этого не умею/
     
  12. 0xJace

    0xJace New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2010
    Сообщения:
    54
    Да вам программирование под ДОС учить надо, как текстовые строки в консоль выводить, а не системное программирование под Win и работу с потоками.

    Как это понять? Что бы программа просто не выполнялась 2 секунды, затем продолжила? Вот только какой в этом толк?
    WinApi функция sleep();

    VOID WINAPI Sleep(
    __in DWORD dwMilliseconds ;миллисекунды
    );

    http://msdn.microsoft.com/en-us/library/ms686298%28v=vs.85%29.aspx

    P.S. Только заметил, а нафига было-то создавать три одинаковые темы, еще и в разных разделах?
     
  13. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    789789
    На сколько я понимаю, вам это надо:
    Код (Text):
    1. format PE console
    2. entry start
    3. include 'win32a.inc'
    4.  
    5. section 'qweasd' readable writeable executable
    6. data import
    7. library kernel32,'kernel32.dll'
    8. include 'api\kernel32.inc'
    9. end data
    10.  
    11. _cmd1 db 'C:\WINDOWS\system32\cmd.exe /C ping 127.0.0.1',0
    12. _cmd2 db 'C:\WINDOWS\system32\cmd.exe /C calc.exe',0
    13.  
    14. procinf PROCESS_INFORMATION
    15.  
    16. startupinf STARTUPINFO
    17.  
    18. start:
    19.  
    20. invoke CreateProcessA,0,_cmd1,0,0,0,0,0,0,startupinf,procinf
    21. invoke CloseHandle,[procinf.hThread]
    22.  
    23. invoke WaitForSingleObject,[procinf.hProcess],-1;INFINITE
    24. invoke CloseHandle,[procinf.hProcess]
    25.  
    26. invoke CreateProcessA,0,_cmd2,0,0,0,0,0,0,startupinf,procinf
    27. invoke CloseHandle,[procinf.hThread]
    28. invoke CloseHandle,[procinf.hProcess]
    29.  
    30. retn
    PS calc.exe можно запускать как 'calc.exe', а не как 'C:\WINDOWS\system32\cmd.exe /C calc.exe'.
     
  14. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    qwe8013
    О, значил я почти правильно помнил....
    Помню, что хэндлы от тредов можно использовать как евенты.... А что то же самое можно использовать и с процессами не знал/забыл....
    Кстати, может скажете могу ли я использовать хэндл процесса для ожидания закрытия, но если хэндл я получу не в результате CreateProcess???
     
  15. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    Z3N
    Да, OpenProcess например.