как запустить 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'
789789 Ну так например Код (Text): #include <windows.h> DWORD myThread(LPVOID) { /// Тут выполняется одна задача return 0; } int main() { DWORD ThreadId; HANDLE hThread = CreateThread(NULL,0,myThread,0,0,&ThreadId); WaitForSingleObject(hThread , INFINITE); // Ждем пока выполнится myThread() // Тут мы как только выполнится myThread() // Можно запускать вторую задачу }
Вам, батенька, к Iczelion's Win32 Assembly Tutorial part 15. Написать, ещё полдела, вам же ещё объяснять.
я асм 2 ой день изучаю. я без примера не смогу. спасибо за тутториал я там ничего не пойму. напишите пож-та код полностью. последующие команды я добавлю сам. если смогу
Код (Text): ; example of simplified Windows programming using complex macro features include 'win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here ;include 'd:\fasmw\include\macro\if.inc' .data ThreadId dd 0 hThread dd 0 INFINITE equ -1 .code proc myThread Param invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK ret endp start: invoke CreateThread, NULL,0,myThread,0,0,ThreadId mov [hThread], eax invoke WaitForSingleObject,[hThread] , INFINITE invoke ExitProcess,0 .end start
paralvic все что смог понять= запускаются все строки invoke сразу после нажатия -ок- MessageBox. какого параметра не хватает в моих invoke.
замените пожалуйста строку invoke MessageBox,HWND_DESKTOP,"Hi! I'm example program!",invoke GetCommandLine,MB_OK на задежку в 2 секунды. не могу же нажимать ок каждый раз. или добавтье в этоку строку паузу на 2 секунды. я этого не умею/
Да вам программирование под ДОС учить надо, как текстовые строки в консоль выводить, а не системное программирование под 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. Только заметил, а нафига было-то создавать три одинаковые темы, еще и в разных разделах?
789789 На сколько я понимаю, вам это надо: Код (Text): format PE console entry start include 'win32a.inc' section 'qweasd' readable writeable executable data import library kernel32,'kernel32.dll' include 'api\kernel32.inc' end data _cmd1 db 'C:\WINDOWS\system32\cmd.exe /C ping 127.0.0.1',0 _cmd2 db 'C:\WINDOWS\system32\cmd.exe /C calc.exe',0 procinf PROCESS_INFORMATION startupinf STARTUPINFO start: invoke CreateProcessA,0,_cmd1,0,0,0,0,0,0,startupinf,procinf invoke CloseHandle,[procinf.hThread] invoke WaitForSingleObject,[procinf.hProcess],-1;INFINITE invoke CloseHandle,[procinf.hProcess] invoke CreateProcessA,0,_cmd2,0,0,0,0,0,0,startupinf,procinf invoke CloseHandle,[procinf.hThread] invoke CloseHandle,[procinf.hProcess] retn PS calc.exe можно запускать как 'calc.exe', а не как 'C:\WINDOWS\system32\cmd.exe /C calc.exe'.
qwe8013 О, значил я почти правильно помнил.... Помню, что хэндлы от тредов можно использовать как евенты.... А что то же самое можно использовать и с процессами не знал/забыл.... Кстати, может скажете могу ли я использовать хэндл процесса для ожидания закрытия, но если хэндл я получу не в результате CreateProcess???