WWWCのShellOpenをFireFoxで使う
以下はFireBirdでローカルでの実験です。
moeweさん
http://moewe.xrea.jp/
の掲示板を見てみたら、FireFoxでShellOpenがうまくいかないみたいなことが書かれていました。そんなに難しいのかな?ということで「FireFox ShellOpen」で検索してみたら、こんなものが見つかった。
91 名前:名無しさん@お腹いっぱい。 :04/02/15 03:12 id:NyXdGKDB
リンク切れしてるのに何もしないから諦めてFirebird用に自作したよ。
作者のshopenを拾ってきてURLを|で繋げてFirebirdに渡すようにした。
暫く使ってたけど今はM2Hを使ってるから使ってない。
M2Hはなんだか分からないけど、とりあえず「|」で繋げれば複数URLを渡せるかもしれなさそうなので、コマンドラインから実行してみた。
"http://..."|"http://..."
成功。ということでこういう風にShellOpenを改造すればよさそうということでやってみた。
__declspec(dllexport) int CALLBACK ShellOpen(HWND hWnd, struct TPITEM **ToolItemList, int ToolItemListCnt, int type, int CheckType) { struct TPITEM *tpItemInfo; OPENFILENAME of; char *buf; char *p, *r; int len = 0; int i; //プロパティ if(type == TOOL_EXEC_PORP){ ZeroMemory(&of, sizeof(OPENFILENAME)); of.lStructSize = sizeof(OPENFILENAME); of.hwndOwner = hWnd; of.lpstrTitle = "アプリケーションの選択"; of.lpstrFilter = "*.*\0*.*\0\0"; of.lpstrFile = ExeFilePath; of.nMaxFile = BUF_SIZE - 1; of.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if(GetOpenFileName((LPOPENFILENAME)&of) == TRUE){ WritePrivateProfileString("APP", "path", ExeFilePath, ini_path); } return 1; } if(ToolItemListCnt <= 0 || ToolItemList == NULL){ return 0; } if(*ExeFilePath == '\0'){ if(MessageBox(hWnd, "起動するアプリケーションが設定されていません。\r\n" "OK を押すとアプリケーションを選択します。", "ShellOpen", MB_ICONEXCLAMATION | MB_OKCANCEL) == IDCANCEL){ return 0; } ShellOpen(hWnd, NULL, -1, TOOL_EXEC_PORP, 0); } //サイズ取得 for(i = 0; i < ToolItemListCnt; i++){ tpItemInfo = *(ToolItemList + i); if(tpItemInfo == NULL){ continue; } p = (tpItemInfo->ViewURL != NULL && *tpItemInfo->ViewURL != '\0') ? tpItemInfo->ViewURL : tpItemInfo->CheckURL; if(p == NULL || *p == '\0') continue; len++; len += lstrlen(p); } r = buf = (char *)LocalAlloc(LMEM_FIXED, len + 1); if(buf == NULL) return 0; //コマンドライン作成 for(i = 0; i < ToolItemListCnt; i++){ tpItemInfo = *(ToolItemList + i); if(tpItemInfo == NULL){ continue; } p = (tpItemInfo->ViewURL != NULL && *tpItemInfo->ViewURL != '\0') ? tpItemInfo->ViewURL : tpItemInfo->CheckURL; if(p == NULL || *p == '\0') continue; *(r++) = '"'; lstrcpy(r, p); r += lstrlen(p); *(r++) = '"'; *(r++) = '|'; } *(--r) = '\0'; //Directoryは指定したほうが良い。 ShellExecute(NULL, "open", ExeFilePath, buf, NULL, SW_SHOWNORMAL); LocalFree(buf); return 1; }
FireBirdで成功。一応バイナリ
http://cres.s28.xrea.com/soft/bin/main.dll
FireFoxでの動作確認求む