int main( int argc, char *argv[ ], char *envp[ ] ) { HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; /* hDevInfo = SetupDiGetClassDevs(NULL, REGSTR_KEY_PCIENUM, // Enumerator 0, DIGCF_PRESENT | DIGCF_ALLCLASSES ); */ // Create a HDEVINFO with all present devices. hDevInfo = SetupDiGetClassDevs( &GUID_DEVINTERFACE_TAPE, 0, // Enumerator 0, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT); // DIGCF_PRESENT | DIGCF_ALLCLASSES ); if (hDevInfo == INVALID_HANDLE_VALUE) { // Insert error handling here. return 1; } // Enumerate through all devices in Set. DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i=0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) { show_property(hDevInfo, &DeviceInfoData, SPDRP_DEVTYPE, "Type"); show_property(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, "Description"); show_property(hDevInfo, &DeviceInfoData, SPDRP_PHYSICAL_DEVICE_OBJECT_NAME, "PhysDevName"); } if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS ) { // Insert error handling here. return 1; } // Cleanup SetupDiDestroyDeviceInfoList(hDevInfo); return 0; }
static enum shell_reply shell_exec_download_show(struct gnutella_shell *sh, int argc, const char *argv[]) { fileinfo_t *fi; struct guid guid; const char *id, *property; gnet_fi_status_t status; gnet_fi_info_t *info; int i; shell_check(sh); g_assert(argv); g_assert(argc > 0); if (argc < 3) { shell_set_msg(sh, "parameter missing"); goto error; } id = argv[2]; if (!hex_to_guid(id, &guid)) { shell_set_msg(sh, "Unparsable ID"); goto error; } fi = file_info_by_guid(&guid); if (NULL == fi) { shell_set_msg(sh, "Invalid ID"); goto error; } info = guc_fi_get_info(fi->fi_handle); guc_fi_get_status(fi->fi_handle, &status); for (i = 3; i < argc; i++) { property = argv[i]; if (0 == strcmp(property, "id")) { show_property(sh, property, guid_to_string(info->guid)); } else if (0 == strcmp(property, "filename")) { show_property(sh, property, info->filename); } else if (0 == strcmp(property, "pathname")) { show_property(sh, property, fi->pathname); } else if (0 == strcmp(property, "size")) { show_property(sh, property, filesize_to_string(info->size)); } else if (0 == strcmp(property, "sha1")) { show_property(sh, property, info->sha1 ? sha1_to_urn_string(info->sha1) : ""); } else if (0 == strcmp(property, "tth")) { show_property(sh, property, info->tth ? tth_to_urn_string(info->tth) : ""); } else if (0 == strcmp(property, "bitprint")) { show_property(sh, property, (info->sha1 && info->tth) ? bitprint_to_urn_string(info->sha1, info->tth) : ""); } else if (0 == strcmp(property, "created")) { show_property(sh, property, info->created ? timestamp_to_string(info->created) : ""); } else if (0 == strcmp(property, "modified")) { show_property(sh, property, status.modified ? timestamp_to_string(status.modified) : ""); } else if (0 == strcmp(property, "downloaded")) { show_property(sh, property, filesize_to_string(status.done)); } else if (0 == strcmp(property, "uploaded")) { show_property(sh, property, uint64_to_string(status.uploaded)); } else if (0 == strcmp(property, "paused")) { show_property(sh, property, boolean_to_string(status.paused)); } else if (0 == strcmp(property, "seeding")) { show_property(sh, property, boolean_to_string(status.seeding)); } else if (0 == strcmp(property, "verifying")) { show_property(sh, property, boolean_to_string(status.verifying)); } else if (0 == strcmp(property, "finished")) { show_property(sh, property, boolean_to_string(status.finished)); } else if (0 == strcmp(property, "complete")) { show_property(sh, property, boolean_to_string(status.complete)); } else if (0 == strcmp(property, "magnet")) { char *magnet = file_info_build_magnet(fi->fi_handle); show_property(sh, property, EMPTY_STRING(magnet)); HFREE_NULL(magnet); } } guc_fi_free_info(info); return REPLY_READY; error: return REPLY_ERROR; }
/* * set_tool_proc - ツール設定のプロシージャ */ BOOL CALLBACK set_tool_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { LV_COLUMN lvc; TOOL_INFO *ti; TCHAR buf[BUF_SIZE]; int cnt; int i; BOOL enable; #ifdef OP_XP_STYLE static long hThemeUp, hThemeDown; #endif // OP_XP_STYLE switch (uMsg) { case WM_INITDIALOG: // D&Dを受け付ける SetWindowLong(hDlg, GWL_EXSTYLE, GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_ACCEPTFILES); #ifdef OP_XP_STYLE // XP hThemeUp = open_theme(GetDlgItem(hDlg, IDC_BUTTON_UP), L"SCROLLBAR"); hThemeDown = open_theme(GetDlgItem(hDlg, IDC_BUTTON_DOWN), L"SCROLLBAR"); #endif // OP_XP_STYLE // リストビューのカラムの設定 i = 0; lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvc.fmt = LVCFMT_LEFT; lvc.cx = 110; lvc.pszText = message_get_res(IDS_TOOL_LIST_TITLE); lvc.iSubItem = i++; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST_TOOL), lvc.iSubItem, &lvc); lvc.fmt = LVCFMT_LEFT; lvc.cx = 70; lvc.pszText = message_get_res(IDS_TOOL_LIST_DLL); lvc.iSubItem = i++; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST_TOOL), lvc.iSubItem, &lvc); lvc.fmt = LVCFMT_LEFT; lvc.cx = 70; lvc.pszText = message_get_res(IDS_TOOL_LIST_FUNC); lvc.iSubItem = i++; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST_TOOL), lvc.iSubItem, &lvc); lvc.fmt = LVCFMT_LEFT; lvc.cx = 80; lvc.pszText = message_get_res(IDS_TOOL_LIST_HOTKEY); lvc.iSubItem = i++; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST_TOOL), lvc.iSubItem, &lvc); // リストビューのスタイルの設定 SetWindowLong(GetDlgItem(hDlg, IDC_LIST_TOOL), GWL_STYLE, GetWindowLong(GetDlgItem(hDlg, IDC_LIST_TOOL), GWL_STYLE) | LVS_SHOWSELALWAYS); SendDlgItemMessage(hDlg, IDC_LIST_TOOL, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_ONECLICKACTIVATE | LVS_EX_FULLROWSELECT | SendDlgItemMessage(hDlg, IDC_LIST_TOOL, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)); for (i = 0; i < option.tool_cnt; i++) { listview_set_tool(GetDlgItem(hDlg, IDC_LIST_TOOL), option.tool_info + i, TRUE); } SendMessage(hDlg, WM_LV_EVENT, LVN_ITEMCHANGED, 0); break; case WM_DESTROY: listview_free_tool(GetDlgItem(hDlg, IDC_LIST_TOOL)); #ifdef OP_XP_STYLE // XP if (hThemeUp != 0 && hThemeDown != 0) { close_theme(hThemeUp); close_theme(hThemeDown); } #endif // OP_XP_STYLE break; case WM_DRAWITEM: switch ((UINT)wParam) { case IDC_BUTTON_UP: i = DFCS_SCROLLUP; break; case IDC_BUTTON_DOWN: i = DFCS_SCROLLDOWN; break; default: return FALSE; } // ボタンの描画 #ifdef OP_XP_STYLE if (hThemeUp != 0 && hThemeDown != 0) { draw_theme_scroll((LPDRAWITEMSTRUCT)lParam, i, (i == DFCS_SCROLLUP) ? hThemeUp : hThemeDown); } else { draw_scroll_sontrol((LPDRAWITEMSTRUCT)lParam, i); } #else // OP_XP_STYLE draw_scroll_sontrol((LPDRAWITEMSTRUCT)lParam, i); #endif // OP_XP_STYLE break; #ifdef OP_XP_STYLE case WM_THEMECHANGED: // テーマの変更 if (hThemeUp != 0 && hThemeDown != 0) { close_theme(hThemeUp); close_theme(hThemeDown); } hThemeUp = open_theme(GetDlgItem(hDlg, IDC_BUTTON_UP), L"SCROLLBAR"); hThemeDown = open_theme(GetDlgItem(hDlg, IDC_BUTTON_DOWN), L"SCROLLBAR"); break; #endif // OP_XP_STYLE case WM_DROPFILES: cnt = DragQueryFile((HANDLE)wParam, 0xFFFFFFFF, NULL, 0); for (i = 0; i < cnt; i++) { DragQueryFile((HANDLE)wParam, i, buf, BUF_SIZE - 1); if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG_SELECT_FUNC), hDlg, select_tools_proc, (LPARAM)buf) == FALSE) { break; } } DragFinish((HANDLE)wParam); break; case WM_SHOWWINDOW: if (wParam == FALSE) { for (i = 0; i < option.tool_cnt; i++) { mem_free(&((option.tool_info + i)->title)); mem_free(&((option.tool_info + i)->lib_file_path)); mem_free(&((option.tool_info + i)->func_name)); mem_free(&((option.tool_info + i)->cmd_line)); } mem_free(&option.tool_info); option.tool_info = listview_get_tool(GetDlgItem(hDlg, IDC_LIST_TOOL), &option.tool_cnt); } break; case WM_NOTIFY: if (listview_notify_proc(hDlg, lParam, GetDlgItem(hDlg, IDC_LIST_TOOL)) == 0) { return OptionNotifyProc(hDlg, uMsg, wParam, lParam); } break; case WM_LV_EVENT: switch (wParam) { case LVN_ITEMCHANGED: enable = (ListView_GetSelectedCount(GetDlgItem(hDlg, IDC_LIST_TOOL)) <= 0) ? FALSE : TRUE; EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_UP), enable); EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_DOWN), enable); EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_EDIT), enable); EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_DELETE), enable); EnableWindow(GetDlgItem(hDlg, IDC_BUTTON_PROP), enable); break; } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_BUTTON_UP: if ((i = ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST_TOOL), -1, LVNI_SELECTED)) == -1) { break; } if (i == 0) { break; } listview_move_item(GetDlgItem(hDlg, IDC_LIST_TOOL), i, -1); SetFocus(GetDlgItem(hDlg, LOWORD(wParam))); break; case IDC_BUTTON_DOWN: if ((i = ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST_TOOL), -1, LVNI_SELECTED)) == -1) { break; } if (i == ListView_GetItemCount(GetDlgItem(hDlg, IDC_LIST_TOOL)) - 1) { break; } listview_move_item(GetDlgItem(hDlg, IDC_LIST_TOOL), i, 1); SetFocus(GetDlgItem(hDlg, LOWORD(wParam))); break; case IDC_BUTTON_ADD: DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG_TOOL_SET), hDlg, set_tool_item_proc, 0); break; case IDC_BUTTON_EDIT: if ((i = ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST_TOOL), -1, LVNI_SELECTED)) == -1) { break; } DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG_TOOL_SET), hDlg, set_tool_item_proc, listview_get_lparam(GetDlgItem(hDlg, IDC_LIST_TOOL), i)); listview_set_text(GetDlgItem(hDlg, IDC_LIST_TOOL), i); break; case IDC_BUTTON_DELETE: if ((i = ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST_TOOL), -1, LVNI_SELECTED)) == -1) { break; } if (MessageBox(hDlg, message_get_res(IDS_OPTION_DELETE), WINDOW_TITLE, MB_ICONQUESTION | MB_YESNO) == IDNO) { break; } if ((ti = (TOOL_INFO *)listview_get_lparam(GetDlgItem(hDlg, IDC_LIST_TOOL), i)) != NULL) { mem_free(&ti->title); mem_free(&ti->lib_file_path); mem_free(&ti->func_name); mem_free(&ti->cmd_line); mem_free(&ti); } ListView_DeleteItem(GetDlgItem(hDlg, IDC_LIST_TOOL), i); ListView_SetItemState(GetDlgItem(hDlg, IDC_LIST_TOOL), i, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); break; case IDC_BUTTON_PROP: if ((i = ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST_TOOL), -1, LVNI_SELECTED)) == -1) { break; } show_property(hDlg, (TOOL_INFO *)listview_get_lparam(GetDlgItem(hDlg, IDC_LIST_TOOL), i)); break; case IDOK: for (i = 0; i < option.tool_cnt; i++) { mem_free(&((option.tool_info + i)->title)); mem_free(&((option.tool_info + i)->lib_file_path)); mem_free(&((option.tool_info + i)->func_name)); mem_free(&((option.tool_info + i)->cmd_line)); } mem_free(&option.tool_info); option.tool_info = listview_get_tool(GetDlgItem(hDlg, IDC_LIST_TOOL), &option.tool_cnt); listview_free_tool(GetDlgItem(hDlg, IDC_LIST_TOOL)); prop_ret = 1; break; case IDPCANCEL: break; } break; case WM_GET_VERSION: // バージョン取得 return APP_VAR; case WM_GET_WORKPATH: // 作業ディレクトリ取得 if (lParam == 0) { break; } lstrcpy((TCHAR *)lParam, work_path); break; default: return FALSE; } return TRUE; }