• Thứ Năm, 25/12/2003 16:20 (GMT+7)

    Câu hỏi :
    Trong VB, sử dụng lệnh Shell để gọi một chương trình bên ngoài. Xin hỏi làm sao để biết khi nào kết thúc chương trình được gọi? Nếu dùng nhiều Shell thì khi chạy kiểm tra trong Visual Basic, các chương trình được gọi từ Shell chạy lần lượt, còn khi biên dịch thành file EXE để chạy, thì tất cả các chương trình đó lại cùng chạy một lúc. Muốn chạy xong một chương trình (bởi Shell) rồi mới chạy tiếp chương trình khác (cũng bởi Shell) thì phải dùng phương pháp nào?

    Trả lời :

    Windows là môi trường đa nhiệm và đa luồng (multiprocess & multithread), nó cho phép nhiều ứng dụng chạy song hành với nhau. Lệnh Shell của VB cho phép khởi động chạy 1 ứng dụng nào đó chứ không bị kẹt chờ cho đến khi ứng dụng kết thúc (khác với cơ chế gọi hàm), kết quả là ứng dụng sau sẽ chạy song hành với ứng dụng của bạn, do đó nếu trong chương trình của bạn có nhiều lệnh Shell liên tiếp để chạy nhiều ứng dụng thì các ứng dụng này sẽ chạy đồng thời với ứng dụng của bạn. Để điều khiển các ứng dụng này chạy tuần tự, bạn phải thực hiện tuần tự việc khởi động ứng dụng rồi chờ ứng dụng kết thúc trước khi khởi động ứng dụng khác. Ví dụ đoạn code VB sau đây cho phép chạy tuần tự các ứng dụng:

     

    ‘ Khai báo hàm API FindWindow

    Private Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

    Dim wHandle As Integer

    ‘ Khởi động wordpad

    ret = Shell(“””c:\Program Files\Accessories\wordpad.exe”””)

    ‘ và chờ nó kết thúc

    wHandle = 1

    While wHandle

      wHandle = FindWindow(“WordPadClass”, “Document - WordPad”)

    Wend

     

    ‘ Chạy tiếp ứng dụng khác

    ....

    Bạn có thể đọc tài liệu trong CD-ROM MSDN để biết chi tiết về việc dùng hàm API FindWindow().

    Chuyên mục: Lập trình