• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Giúp về cách tryền tham số cho chương trình

Góc trao đổi, hỏi đáp của ngôn ngữ Visual Basic 6 và Visual Basic Script

Moderator: tungblt

newbi
Thành viên chính thức
Thành viên chính thức
Posts: 46
Joined: Thu 20/11/2008 8:01 am

Giúp về cách tryền tham số cho chương trình

Postby newbi » Fri 10/04/2009 7:39 am

Có ai biết nhiều về cách truyền tham số cho chương trình khi open không. Khi chọn 1 file để mở bằng chương trình của mình thì tui làm được( dùng lệnh command() để lấy tham số đường dẫn, và chỉ lấy được 1 đường dẫn thôi. Tui muốn chọn cùng một lúc nhiều file rồi open nhưng không biết dùng lệnh gì để truyền tham số cho chương trình hết. Ai biết giúp dum. Search rồi.



User avatar
Tunes
Thành viên tích cực
Thành viên tích cực
Posts: 116
Joined: Sun 13/04/2008 6:13 pm
Location: Atlanta, USA
Been thanked: 2 times
Contact:

Re: Giúp về cách tryền tham số cho chương trình

Postby Tunes » Fri 10/04/2009 7:54 am

16bit dùng WinExec
32bit dùng CreateProcess
Development means Challenge

newbi
Thành viên chính thức
Thành viên chính thức
Posts: 46
Joined: Thu 20/11/2008 8:01 am

Re: Giúp về cách tryền tham số cho chương trình

Postby newbi » Fri 10/04/2009 12:08 pm

Cho mình hàm hay thủ tục luôn đi anh bạn.Tiết kiệm lời nói vậy.

User avatar
Tunes
Thành viên tích cực
Thành viên tích cực
Posts: 116
Joined: Sun 13/04/2008 6:13 pm
Location: Atlanta, USA
Been thanked: 2 times
Contact:

Re: Giúp về cách tryền tham số cho chương trình

Postby Tunes » Fri 10/04/2009 9:12 pm

Đối với windows 16 bit (địa chỉ 16 bit) thì dùng hàm API WinExec

Code: Select all

  1. Public Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
  2. 'lpCmdLine là đương dẫn + khoảng trống + thông số, nCmdShow là hành động làm ngay khi vừa chạy file exe,  có thể là:
  3. SW_FORCEMINIMIZE : minimize xuống khay
  4. SW_HIDE : ẩn window
  5. SW_SHOW : hiện window
  6. ... : tự tìm nha
  7.  

Đối với windows 32 bit (địa chi32 bit) thì dùng hàm API CreateProccess (dùng cái này)

Code: Select all

  1.  
  2. Public Type STARTUPINFO
  3.   cb As Long
  4.   lpReserved As String
  5.   lpDesktop As String
  6.   lpTitle As String
  7.   dwX As Long
  8.   dwY As Long
  9.   dwXSize As Long
  10.   dwYSize As Long
  11.   dwXCountChars As Long
  12.   dwYCountChars As Long
  13.   dwFillAttribute As Long
  14.   dwFlags As Long
  15.   wShowWindow As Integer
  16.   cbReserved2 As Integer
  17.   lpReserved2 As Long
  18.   hStdInput As Long
  19.   hStdOutput As Long
  20.   hStdError As Long
  21. End Type
  22. Public Type SECURITY_ATTRIBUTES
  23.   nLength As Long
  24.   lpSecurityDescriptor As Long
  25.   bInheritHandle As Long
  26. End Type
  27. Public Type PROCESS_INFORMATION
  28.   hProcess As Long
  29.   hThread As Long
  30.   dwProcessId As Long
  31.   dwThreadId As Long
  32. End Type
  33. Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
  34.  
  35. ' lpApplicationName : đường dẫn
  36. ' lpCommandLine : "thông số"
  37. ' lpProcessAttributes : cấu trúc dạng SECURITY_ATTRIBUTES cho process
  38. ' lpThreadAttributes : cấu trúc dạng SECURITY_ATTRIBUTES cho main thread
  39. ' bInheritHandles : các handle của process hiện thời có được dùng bởi process khác không ?
  40. ' dwCreationFlags : các cờ tạo, nên dùng CREATE_DEFAULT_ERROR_MODE = &H4000000
  41. ' lpEnvironment : đặt vbNULL
  42. ' lpCurrentDirectory : đặt vbNULL
  43. ' lpStartupInfo : info của struct StartUp, các thông số khởi tạo window, tự tìm hiểu nha.
  44. ' lpProcessInformation : cái này khai báo 1 struct để nhận giá trị của Process như processid khi tạo process, chỉ cần khai báo rồi chuyền vào thôi, không cần đổi
  45.  
  46.  

Nếu không được báo lại nha, mấy cái này hơi rắc rối.
PS: ai chỉ dùm cách highlight code với, lười tìm hiểu wá.
Development means Challenge

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: Giúp về cách tryền tham số cho chương trình

Postby clarkkent » Sun 12/04/2009 2:52 pm

mình coi ko hiểu gì cả... :D
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

newbi
Thành viên chính thức
Thành viên chính thức
Posts: 46
Joined: Thu 20/11/2008 8:01 am

Re: Giúp về cách tryền tham số cho chương trình

Postby newbi » Sun 12/04/2009 11:07 pm

Ừ, rắc rối thật. Sao lệnh Command() đơn giản vậy mà cái hàm này phức tạp vậy. Mình đang học thi nên chưa thử được cách của anh bạn có được không. Nhưng mới nhìn qua có vẻ như không ổn.

newbi
Thành viên chính thức
Thành viên chính thức
Posts: 46
Joined: Thu 20/11/2008 8:01 am

Re: Giúp về cách tryền tham số cho chương trình

Postby newbi » Sat 18/04/2009 6:57 am

Cảm ơn bác đã giúp!
Nhưng bác đọc kĩ lại đi, hình như bác hiểu nhầm ý em rồi.
Ví dụ nhé: khi bác bôi đen 5 bài hát trong máy tính(chọn), xong kích chuột phải, Open With Media Player thì Media Player sẽ mở và trong list của nó sẽ có 5 bài hát bác vừa chọn(cái này ai cũng biết).
Ý em hỏi là làm sao truyền tham số của 5 bài hát vào cho chương trình của mình, hay là làm sao để nhận những tham số mà windows truyền cho nó.
Hàm command() chỉ cho đường dẫn 1 file thôi.

User avatar
Tunes
Thành viên tích cực
Thành viên tích cực
Posts: 116
Joined: Sun 13/04/2008 6:13 pm
Location: Atlanta, USA
Been thanked: 2 times
Contact:

Re: Giúp về cách tryền tham số cho chương trình

Postby Tunes » Sat 18/04/2009 9:23 am

heh, quả thật đầu óc mình ngu si không hiểu nổi câu hỏi của bạn.
hàm command trong vb dùng để lấy tham số mà windows hoặc CT khác truyền cho mình, có phải bạn hỏi là lấy tham số của CT khác không phải CT của mình không? Nếu vậy thì dùng hàm GetCommandLine(), nhưng hàm này chỉ dùng để lấy tham số của process gọi hàm này nên bạn phải tạo thread hay ép DLL có code gọi hàm GetCommandLine() vào process lúc thực thi.
Biểu đạt mình không tốt, nhưng quả thực chỉ làm những gì nhỏ nhỏ trong lập trình thì mất vài chục dòng code rồi!
Development means Challenge

newbi
Thành viên chính thức
Thành viên chính thức
Posts: 46
Joined: Thu 20/11/2008 8:01 am

Re: Giúp về cách tryền tham số cho chương trình

Postby newbi » Sat 18/04/2009 11:22 pm

Ý của mình ở đây là tham số do Windows tryền cho chương trình.
Có một số hàm mình search được trên mạng cũng dùng getcommandline() nhưng mà mình thử thì không được.
Quả thực mình không biết nhiều về DLL nên bảo viết một cái dll dùng tryền tham số thì pó tay.
Có một cách không hay lắm, nhưng làm được, mình không muốn thử vì chắc chắn là chạy chậm và phản khoa học:khi chọn nhiều file thì windows cũng sẽ mở nhiều file bằng chương tình của mình, mỗi lần chương trình mở sẽ nhận 1 tham số. Cách của mình là: lần mở chương trình thứ nhất, để yên đó. Những lần sau thì sendmesage dến lần mở trước và tự động end. Lần mở đầu tiên sẽ nhận thông điệp và sưu tập tất cả thông tin mà windows truyền vào( thông qua các thông điệp mà chương trình mở các lần sau). Thật rắc rối nhưng làm được.

newbi
Thành viên chính thức
Thành viên chính thức
Posts: 46
Joined: Thu 20/11/2008 8:01 am

Re: Giúp về cách tryền tham số cho chương trình

Postby newbi » Sat 18/04/2009 11:24 pm

Àh ra là dzậy !Có một anh chàng trùng tên với mình. Không biết ý của anh Newbi.vs là sao nữa. Mình có ví dụ trên rồi mà. nếu không làm được thì chắc mấy chương trình nghe nhạc như winamp, media player... đi về vườn hết rồi. Chắc chắn làm được, chỉ có điều chưa tìm ra cách thôi.
Mấy cao thủ VB đâu hết rồi nhỉ ? Cứu keo này cho em với !

newbi
Thành viên chính thức
Thành viên chính thức
Posts: 46
Joined: Thu 20/11/2008 8:01 am

Re: Giúp về cách tryền tham số cho chương trình

Postby newbi » Sun 19/04/2009 12:55 pm

Bạn nói vậy cũng có lí. Nhưng mình search trong registry hình như nó không dẫn tới dll mà dẫn thẳng tới chương trình chính thì phải.


Return to “Visual Basic 6 và Visual Basic Script (VB & VBS)”

Who is online

Users browsing this forum: No registered users and 5 guests