private static IntPtr MessageCallback(int nCode, IntPtr wParam, ref WinApi.MSG lParam) { if (nCode == 0 && lParam.message == WinApi.WM_DROPFILES) { IntPtr hDrop = lParam.wParam; uint num = WinApi.DragQueryFile(hDrop, 0xFFFFFFFF, null, 0); string[] files = new string[num]; uint bufferSize = 1024; StringBuilder path = new StringBuilder((int)bufferSize); for (uint i = 0; i < num; i++) { //uint size = WinApi.DragQueryFile(hDrop, i, path, bufferSize); WinApi.DragQueryFile(hDrop, i, path, bufferSize); files[i] = path.ToString(); path.Length = 0; } WinApi.DragFinish(hDrop); IntPtr hwnd = lParam.hwnd; if (hwnd != IntPtr.Zero) { int instanceCount = 0; // 存在するインスタンス内を検索 foreach (UniWinApi uniwin in instances) { // 該当するウィンドウであった場合 if (uniwin.hWnd == hwnd) { // ファイルドロップ時のイベントを実行 if (uniwin.OnFilesDropped != null) { uniwin.OnFilesDropped(files); } instanceCount++; } } // もしインスタンスが見つからなければおかしいのでログ出力 if (instanceCount < 1) { Debug.Log("File dropped, but no UniWinApi instances were found."); } } } return(WinApi.CallNextHookEx(IntPtr.Zero, nCode, wParam, ref lParam)); }