PDA

View Full Version : حرفه ای: راهنمایی استفاده از خط فرمان در برنامه خود



Hashemvp
سه شنبه 12 بهمن 1395, 22:19 عصر
سلام

دوستان عزیز آیا کسی هست که بتونه راهنمایی کنه در مورد خط فرمان در برنامه های خودمون

من توی فروم های زیادی گشتم به نتیجه هایی هم رسیدم ک کار میکنه
بهترین مثال توی این لینک هست
http://www.vbforums.com/showthread.php?517473-Classic-VB-How-can-I-use-command-line-parameters-in-my-program

ولی مشکلی که وجود داره وقتی که روی فایلی که با پسوند مخصوص به برنامه خودم اجرا میکنم اگر
مسیر فایل داخل جایی غیر از روت درایو باشه(مثلا d:\1.hhh اینو به خوبی اجرا میکنه)
مسیر فایل رو اینطوری برمیگرده
D:\DES139~1\11944~1.HVP
که باعث میشه برنامه نتونه مسیر رو درست تشخیص بده و فایل رو اجرا کنه

ممنون میشم اگر کسی این مشکل رو داشته و حل شده
راهنمایی کنه

موفق باشید
یا علی(ع)

meys34
چهارشنبه 13 بهمن 1395, 17:49 عصر
سلام

توابعی هستند که آدرس رو کوتاه میکنن

ولی اگر بخوایید از فرم کوتاه نشده استفاده کنید باید آدرس رو داخل علامت " قرار بدید اینجوری

این هم برای آدرس هایی اهمیت داره که داخلش space داشته باشه

مثلا


D:\barname nevis.txt
باید تبدیل بشه به:


"D:\barname nevis.txt"
خود توابع VB هم باید داخل " باشه که کلا میشه اینجوری:

Shell """D:\barname nevis.txt"""

و یا

Shell "notepad.exe ""D:\barname nevis.txt"""

Hashemvp
چهارشنبه 13 بهمن 1395, 19:51 عصر
ممنون دوست عزیز از پاسخی که داده
منتها مشکل اینکه من ادرس رو خودم نمیدم
من یک برنامه مثل ورد درست کردم با فرمت مخصوص به خودش به طور مثال فرمت *.hhh
بعد در رجیستری هم تعریف کردم که وقتی روی فایلی با این فرمت کلیک میشه برنامه من باز بشه و اطلاعات اون فایل رو بخونه

همه ی قسمت کار درست انجام میشه به جز قمست command برنامه
که این رو هم من هیچ دسترسی و ادرس دهی بهش نمیکنم فقط مقدار تابع پیش فرضی که بهم میده رو تحویل میگیرم
ولی متاسفانه برای مسیر های طولانی به این صورت میشه

D:\DES139~1\11944~1.HVP

که برنامه نمیتونه فایلی رو که روش کلیک شده رو بخونه و اجرا کنه
الان مشکل من اینجاست که چیکار کنم ویژال بیسیک ادرس فایل رو اینطوری برنگردونه

امیدوارم که منظورمو خوب رسونده باشم.

Hashemvp
پنج شنبه 14 بهمن 1395, 17:00 عصر
راه حلش رو پیدا کردم .....میذارم برای کسانی که شاید به این مشکل بربخورن

باید از تابع API زیر استفاده کرد توضیحات بیشتر هم از سایت ماکروسافت بخونید

Private Declare Function GetLongPathName Lib "kernel32" Alias "GetLongPathNameA" (ByVal lpszShortPath As String, ByVal lpszLongPath As String, ByVal cchBuffer As Long) As Long



https://msdn.microsoft.com/en-us/library/windows/desktop/aa364980(v=vs.85).aspx