תגובה: CMD פרמטר גרירה ושחרור ל exe שלא מקבל את הפרמטר הרגיל
-
@yossiz כתב בCMD פרמטר גרירה ושחרור, ל exe שלא מקבל את הפרמטר הרגיל, של פתח באמצעות:
@חגי אמר בCMD פרמטר גרירה ושחרור, ל exe שלא מקבל את הפרמטר הרגיל, של פתח באמצעות:
אני לא בא לתפוס את מקומו של @yossiz
אני לא יודע פתרון לבעיה מה שאני יכול להוסיף פה לדיון הוא הסבר למה יש כזה בעיה.
משתמשי ווינדוס מורגלים שגרירה של קובץ על גבי תוכנה מריצה את התוכנה עם שם הקובץ כפרמטר, זו באמת התנהגות ברירת המחדל, ולכן הקושיא למה פה זה עובד בגרירה ולא בשורת הפקודה.
התשובה היא שאפשר להגדיר ברגיסטרי פעולה מותאמת אישית עבור קובץ EXE במקום התנהגות ברירת המחדל וזה מה שעשו עבור תוכנה זו.
עיין רג'יסטרי ערך:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\fsquirt.exe
ועיין כאן בתיעוד של MS:
DropTarget: Is a class identifier (CLSID). The DropTarget entry contains the CLSID of an object (usually a local server rather than an in-process server) that implements IDropTarget. By default, when the drop target is an executable file, and no DropTarget value is provided, the Shell converts the list of dropped files into a command-line parameter and passes it to ShellExecuteEx through lpParameters.
יש אפשרות אולי להוסיף לקובץ bat שישלח את הקובץ לכתובת שמוגדרת ברג'יסטורי, או לחילופין להוסיף ערך ברג'יסטורי בשביל סקריפט?
נפק"מ למה שכתבתי כאן
בתודה מראש -
@האדם-החושב הקוד שהבאתי אמור להציג לך את נתיב הקובץ שגררת לbat, זה מציג לך משהו?
-
@האדם-החושב קוד זה (קרדיט ל-chatGPT) אמור לעשות מה שאתה מבקש, הבעיה היא שכרגע היא לא עובדת ועוד לא הבנתי למה
זה קוד של EXE ש(לכאורה) מקבל שם קובץ/ים כפרמטר ומעביר אותו לאשף שליחת קבצים בבלוטוסאולי תצליח איכשהו להבין למה זה לא עובד
using System; using System.Collections.Specialized; using System.Runtime.InteropServices; using System.Windows.Forms; [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("00000122-0000-0000-C000-000000000046")] public interface IDropTarget { void DragEnter([In] System.Runtime.InteropServices.ComTypes.IDataObject pDataObj, [In] uint grfKeyState, [In] System.Drawing.Point pt, [In, Out] ref uint pdwEffect); void DragOver([In] uint grfKeyState, [In] System.Drawing.Point pt, [In, Out] ref uint pdwEffect); void DragLeave(); void Drop([In] System.Runtime.InteropServices.ComTypes.IDataObject pDataObj, [In] uint grfKeyState, [In] System.Drawing.Point pt, [In, Out] ref uint pdwEffect); } class Program { [DllImport("shell32.dll", CharSet = CharSet.Unicode)] public static extern void SHDoDragDrop(IntPtr hwnd, System.Runtime.InteropServices.ComTypes.IDataObject dataObject, IDropTarget dropTarget, uint keyState, uint effect); static void Main(string[] args) { if (args.Length == 0) return; StringCollection fileDropList = new StringCollection(); fileDropList.AddRange(args); DataObject dataObject = new DataObject(); dataObject.SetFileDropList(fileDropList); IDropTarget dropTarget = (IDropTarget)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("047ea9a0-93bb-415f-a1c3-d7aeb3dd5087"))); SHDoDragDrop(IntPtr.Zero, dataObject, dropTarget, 0, 0); } }