diff options
| author | Takamichi Horikawa <takamichiho@gmail.com> | 2017-01-25 21:08:29 +0900 | 
|---|---|---|
| committer | Takamichi Horikawa <takamichiho@gmail.com> | 2017-01-25 21:08:29 +0900 | 
| commit | 296ef17d3452e00a8d29f76493152fe7ea53665b (patch) | |
| tree | 77acdcd15b8f52d49d686472034581315235aa8f /win32 | |
| parent | 126f4858151487a2725c109f001c08ef8c59631e (diff) | |
enable command line (dnd to exe)
Diffstat (limited to 'win32')
| -rw-r--r-- | win32/main.c | 47 | 
1 files changed, 44 insertions, 3 deletions
| diff --git a/win32/main.c b/win32/main.c index efd1607..a7b5ba2 100644 --- a/win32/main.c +++ b/win32/main.c @@ -17,6 +17,9 @@ enum {    TIMER_FMDSP = 1,  }; +#define FMPLAYER_CLASSNAME L"myon_fmplayer_ym2608_win32" +#define FMPLAYER_CDSTAG 0xFD809800UL +  enum {    SRATE = 55467,    SECTLEN = 4096, @@ -460,6 +463,13 @@ static void on_paint(HWND hwnd) {    EndPaint(hwnd, &ps);  } +static LRESULT on_copydata(HWND hwnd, HWND hwndfrom, COPYDATASTRUCT *cds) { +  (void)hwndfrom; +  if (cds->dwData != FMPLAYER_CDSTAG) return FALSE; +  openfile(hwnd, cds->lpData); +  return TRUE; +} +  static LRESULT CALLBACK wndproc(    HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam  ) { @@ -469,6 +479,8 @@ static LRESULT CALLBACK wndproc(    HANDLE_MSG(hwnd, WM_COMMAND, on_command);    HANDLE_MSG(hwnd, WM_PAINT, on_paint);    HANDLE_MSG(hwnd, WM_TIMER, on_timer); +  case WM_COPYDATA: +    return on_copydata(hwnd, (HWND)wParam, (COPYDATASTRUCT *)lParam);  #ifdef ENABLE_WM_DROPFILES    HANDLE_MSG(hwnd, WM_DROPFILES, on_dropfiles);  #endif // ENABLE_WM_DROPFILES @@ -484,14 +496,41 @@ static ATOM register_class(HINSTANCE hinst) {    wc.hIcon = LoadIcon(g.hinst, MAKEINTRESOURCE(1));    wc.hCursor = LoadCursor(NULL, IDC_ARROW);    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); -  wc.lpszClassName = L"TWinc"; +  wc.lpszClassName = FMPLAYER_CLASSNAME;    return RegisterClass(&wc);  }  int CALLBACK wWinMain(HINSTANCE hinst, HINSTANCE hpinst, -                      wchar_t *cmdline, int cmdshow) { +                      wchar_t *cmdline_, int cmdshow) {    (void)hpinst; -  (void)cmdline; +  (void)cmdline_; + +  const wchar_t *argfile = 0; +  { +    wchar_t *cmdline = GetCommandLine(); +    if (cmdline) { +      int argc; +      wchar_t **argv = CommandLineToArgvW(cmdline, &argc); +      if (argc >= 2) { +        argfile = argv[1]; +      } +    } +  } + +  { +    HWND otherwnd = FindWindow(FMPLAYER_CLASSNAME, 0); +    if (otherwnd) { +      if (!argfile) ExitProcess(0); +      COPYDATASTRUCT cds; +      cds.dwData = FMPLAYER_CDSTAG; +      cds.cbData = (lstrlen(argfile)+1)*2; +      cds.lpData = (void *)argfile; +      FORWARD_WM_COPYDATA(otherwnd, 0, &cds, SendMessage); +      SetForegroundWindow(otherwnd); +      ExitProcess(0); +    } +  } +    g.hinst = hinst;    g.heap = GetProcessHeap();    ATOM wcatom = register_class(g.hinst); @@ -513,6 +552,8 @@ int CALLBACK wWinMain(HINSTANCE hinst, HINSTANCE hpinst,    );    ShowWindow(hwnd, cmdshow); +  openfile(hwnd, argfile); +    MSG msg = {0};    while (GetMessage(&msg, 0, 0, 0)) {      TranslateMessage(&msg); | 
