void showUserMenu(HWND hwnd, HWND hwndClicked, int xPos, int yPos, int btn, int clk) { LPMALLOC pMalloc; UNREFERENCED_PARAMETER(hwndClicked); if(SHGetMalloc(&pMalloc) == NOERROR) { HMENU hMenu; UINT uID; PLISTIDL pScan; char fname[1024]; char entry[20]; wsprintf(entry, "%d%dFile", btn, clk); GetMyRegStr("Mouse", entry, fname, 1024, ""); del_title(fname); hMenu = CreatePopupMenu(); if(hMenu == NULL) { return; } uItemID = 100; if ( AddUserMenu(hMenu, pMalloc, fname)) { if(hMenu != NULL) { if(!getODFlg++) GetODMenuState(); SetForegroundWindow98(hwnd); uID = (UINT)TrackPopupMenu( hMenu, TPM_RIGHTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, xPos, yPos, 0, hwnd, NULL); if(uID != 0) { pScan = g_ptListIDL; while(pScan != NULL) { if(pScan->uMenuID == uID) { ExecFile(hwnd, pScan->path); break; } pScan = pScan->next; } } } } DestroyUserMenu(); DestroyMenu(hMenu); } pMalloc->lpVtbl->Release(pMalloc); }
/*------------------------------------------------------------------ ---------------------------------- open dialog to browse sound files ------------------------------------------------------------------*/ BOOL BrowseSoundFile(HWND hDlg, const char* deffile, char* fname) { char filter[1024], mmfileexts[1024]; char ftitle[MAX_PATH], initdir[MAX_PATH]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(ofn)); // Initialize OPENFILENAME ofn.lStructSize = sizeof(ofn); filter[0]=filter[1]='\0'; str0cat(filter, MyString(IDS_MMFILE)); GetMMFileExts(mmfileexts); str0cat(filter, mmfileexts); str0cat(filter, MyString(IDS_ALLFILE)); str0cat(filter, "*.*"); if(!deffile[0] || IsMMFile(deffile)) ofn.nFilterIndex = 1; else ofn.nFilterIndex = 2; memcpy(initdir, api.root, api.root_len+1); if(deffile[0]) { WIN32_FIND_DATA fd; HANDLE hfind; hfind = FindFirstFile(deffile, &fd); if(hfind != INVALID_HANDLE_VALUE) { FindClose(hfind); strncpy_s(initdir,sizeof(initdir),deffile,_TRUNCATE); del_title(initdir); } } *fname = '\0'; ofn.hwndOwner = hDlg; ofn.hInstance = NULL; ofn.lpstrFilter = filter; ofn.lpstrFile = fname; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = ftitle; ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrInitialDir = initdir; ofn.Flags = OFN_HIDEREADONLY|OFN_EXPLORER|OFN_FILEMUSTEXIST; if(GetOpenFileName(&ofn)) { size_t tlen=api.root_len; if(!strncmp(fname,api.root,tlen)) { // make relative to waves/ if possible if(!strncmp(fname+tlen,"\\waves\\",7)) { memmove(fname,fname+tlen+7,strlen(fname)-tlen-6); } } return 1; } return 0; }
/*------------------------------------------------ select file --------------------------------------------------*/ BOOL SelectMyFile(HINSTANCE hInst, HWND hDlg, const char *filter, DWORD nFilterIndex, const char *deffile, char *retfile) { OPENFILENAME ofn; char fname[MAX_PATH], ftitle[MAX_PATH], initdir[MAX_PATH]; BOOL r; memset(&ofn, '\0', sizeof(OPENFILENAME)); GetModuleFileName(hInst, initdir, MAX_PATH); del_title(initdir); if(deffile[0] && IsFile(deffile)) { strcpy(initdir, deffile); del_title(initdir); } fname[0] = 0; ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hDlg; ofn.hInstance = hInst; ofn.lpstrFilter = filter; ofn.nFilterIndex = nFilterIndex; ofn.lpstrFile= fname; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = ftitle; ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrInitialDir = initdir; ofn.Flags = OFN_HIDEREADONLY|OFN_EXPLORER|OFN_FILEMUSTEXIST; // ofn.FlagsEx = 0; r = GetOpenFileName(&ofn); if(!r) return r; strcpy(retfile, ofn.lpstrFile); return r; }
/*------------------------------------------- initialize ---------------------------------------------*/ void InitTCPlayer(void) { GetModuleFileName(g_hInst, g_mydir, MAX_PATH); del_title(g_mydir); strcpy(g_inifile, g_mydir); add_title(g_inifile, "tclock.ini"); g_bIniSetting = TRUE; // common/langcode.c FindFileWithLangCode(g_langfile, GetUserDefaultLangID(), TCLANGTXT); g_hfontDialog = CreateDialogFont(); g_hwndClock = GetClockWindow(); SetOnContextMenu(); }
/*------------------------------------------------ ショートカットの作成 --------------------------------------------------*/ BOOL CreateLink(LPCSTR fname, LPCSTR dstpath, LPCSTR name) { HRESULT hres; IShellLink* psl; CoInitialize(NULL); hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, &psl); if(SUCCEEDED(hres)) { IPersistFile* ppf; char path[MAX_PATH]; /* path[0] = '\"'; strcpy(path+1, fname); strcat(path, "\"");*/ psl->lpVtbl->SetPath(psl, fname); psl->lpVtbl->SetDescription(psl, name); strcpy(path, fname); del_title(path); psl->lpVtbl->SetWorkingDirectory(psl, path); hres = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, &ppf); if(SUCCEEDED(hres)) { WORD wsz[MAX_PATH]; char lnkfile[MAX_PATH]; strcpy(lnkfile, dstpath); add_title(lnkfile, (char*)name); strcat(lnkfile, ".lnk"); MultiByteToWideChar(CP_ACP, 0, lnkfile, -1, wsz, MAX_PATH); hres = ppf->lpVtbl->Save(ppf, wsz, TRUE); ppf->lpVtbl->Release(ppf); } psl->lpVtbl->Release(psl); } CoUninitialize(); if(SUCCEEDED(hres)) return TRUE; else return FALSE; }
/*------------------------------------------- initialize ---------------------------------------------*/ void InitTCProp(void) { GetModuleFileName(g_hInst, g_mydir, MAX_PATH); del_title(g_mydir); strcpy(g_inifile, g_mydir); add_title(g_inifile, "tclock.ini"); g_bIniSetting = TRUE; // common/langcode.c FindFileWithLangCode(g_langfile, GetUserDefaultLangID(), TCLANGTXT); g_hfontDialog = CreateDialogFont(); g_winver = CheckWinVersion(); g_hIconPlay = LoadImage(g_hInst, MAKEINTRESOURCE(IDI_PLAY), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR|LR_SHARED); g_hIconStop = LoadImage(g_hInst, MAKEINTRESOURCE(IDI_STOP), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR|LR_SHARED); }
/*------------------------------------------------ select file --------------------------------------------------*/ BOOL SelectMyFile(HWND hDlg, const char *filter, DWORD nFilterIndex, const char *deffile, char *retfile) { char fname[MAX_PATH], ftitle[MAX_PATH], initdir[MAX_PATH]; OPENFILENAME ofn; BOOL r; memset(&ofn, '\0', sizeof(OPENFILENAME)); strcpy(initdir, g_mydir); if(deffile[0]) { WIN32_FIND_DATA fd; HANDLE hfind; hfind = FindFirstFile(deffile, &fd); if(hfind != INVALID_HANDLE_VALUE) { FindClose(hfind); strcpy(initdir, deffile); del_title(initdir); } } fname[0] = 0; ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hDlg; ofn.hInstance = GetModuleHandle(NULL); ofn.lpstrFilter = filter; ofn.nFilterIndex = nFilterIndex; ofn.lpstrFile= fname; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = ftitle; ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrInitialDir = initdir; ofn.Flags = OFN_HIDEREADONLY|OFN_EXPLORER|OFN_FILEMUSTEXIST; r = GetOpenFileName(&ofn); if(!r) return r; strcpy(retfile, ofn.lpstrFile); return r; }
//========================== //--+++--> Create Launch T-Clock on Windows Startup ShortCut: int CreateLink(LPCSTR fname, LPCSTR dstpath, LPCSTR name) { HRESULT hres; IShellLink* psl; CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, (void**)&psl); if(SUCCEEDED(hres)) { IPersistFile* ppf; char path[MAX_PATH]; psl->lpVtbl->SetPath(psl, fname); psl->lpVtbl->SetDescription(psl, name); strncpy_s(path,MAX_PATH,fname,_TRUNCATE); del_title(path); psl->lpVtbl->SetWorkingDirectory(psl, path); hres = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, (void**)&ppf); if(SUCCEEDED(hres)) { WORD wsz[MAX_PATH]; char lnkfile[MAX_PATH]; strncpy_s(lnkfile, MAX_PATH, dstpath, _TRUNCATE); add_title(lnkfile, (char*)name); strcat(lnkfile, ".lnk"); MultiByteToWideChar(CP_ACP, 0, lnkfile, -1, wsz, MAX_PATH); hres = ppf->lpVtbl->Save(ppf, wsz, TRUE); ppf->lpVtbl->Release(ppf); } psl->lpVtbl->Release(psl); } CoUninitialize(); if(SUCCEEDED(hres)) return 1; return 0; }
/*------------------------------------------- Show "TClock Help" ---------------------------------------------*/ void MyHelp(HWND hwnd, const char *section) { char helpurl[MAX_PATH], title[MAX_PATH]; if(!g_langfile[0]) return; GetMyRegStr(NULL, "HelpURL", helpurl, MAX_PATH, ""); if(helpurl[0] == 0) { if(GetPrivateProfileString("Main", "HelpURL", "", helpurl, MAX_PATH, g_langfile) == 0) return; } if(GetPrivateProfileString(section, "HelpURL", "", title, MAX_PATH, g_langfile) == 0) return; if(strlen(helpurl) > 0 && helpurl[ strlen(helpurl) - 1 ] != '/') del_title(helpurl); add_title(helpurl, title); ShellExecute(hwnd, NULL, helpurl, NULL, "", SW_SHOW); }
// 2002/11/26 - H.N. Neri-uma added. // 2002/11/27 - 635 modified. //------------------------------------------------- // GetTooltipText // Tooltipのテキストを、レジストリからではなく、テキストファイルから読み込みます。 // 引数: [char * pszText] 読み込んだ文字列を格納する変数へのポインタ // 戻り値:0 エラー。テキストファイルが存在しなかった。ファイルは存在したが、空だった。など // 0以外 成功 //------------------------------------------------- static BOOL GetTooltipText(PSTR pszText) { HANDLE hFile; char szFilePath[MAX_PATH]; // テキストファイルのパス DWORD dwReadSize; DWORD dwFileSize; size_t len; BOOL bAbsPath; // { // GetCurrentDirectory(MAX_PATH, pszText); // return TRUE; // } if(!pszText) { // 値を格納するアドレスが存在しないので、FALSEを返して終了 return FALSE; } // テキストファイルのパス作成 //GetModuleFileName(hmod, szFilePath, sizeof(szFilePath)); //del_title(szFilePath); //add_title(szFilePath, TIPTEXTFILENAME); // \\NAME\C\path\path\filename.txt // C:\path\path\filename.txt // 以上の絶対パス以外を相対パスと判断して // その前にTClockのパスを基準ディレクトリとして付加 bAbsPath = FALSE; len = strlen(pszText); if (len >= 2) { if ((*pszText == '\\') && (*(pszText + 1) == '\\')) { //UNC name bAbsPath = TRUE; } else if (*(pszText + 1) == ':') { bAbsPath = TRUE; } } if (bAbsPath == FALSE) { // TClockの位置を基準パスとして指定文字列を相対パスとして追加 GetModuleFileName(hmod, szFilePath, sizeof(szFilePath)); del_title(szFilePath); if (len + strlen(szFilePath) >= MAX_PATH) { return FALSE; } add_title(szFilePath, pszText); *pszText = '\0'; } else { //635@p5 ファイル名を取得してツールチップをクリア。 strcpy(szFilePath, pszText); *pszText = '\0'; } // ファイルを読み込む hFile = CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE) { // ファイルが存在しないので、FALSEを返して終了 return FALSE; } dwFileSize = GetFileSize(hFile, NULL); if ( dwFileSize > (DWORD)LEN_TOOLTIP) dwFileSize = (DWORD)(LEN_TOOLTIP-1); // ファイル読み込み ReadFile(hFile, pszText, dwFileSize, &dwReadSize, NULL); // ファイルをクローズ CloseHandle(hFile); if(strcmp(pszText, "") == 0) { // 文字列取得に失敗。レジストリ取得へ走らせるためにFALSEを返して終了 return FALSE; } // 文字列の末尾に、強制的にNULL Stringを付加(^^; pszText[dwFileSize] = '\0'; // 成功したのでTRUEを返す return TRUE; }
/*------------------------------------------------ initialize the clock --------------------------------------------------*/ void InitClock(HWND hwnd) { RECT rc; if(g_bInitClock) return; g_bInitClock = TRUE; g_hInst = GetModuleHandle(DLLFILENAME); g_winver = CheckWinVersion(); // common/utl.c g_bVisualStyle = IsXPVisualStyle(); // common/utl.c #if 0 if(!(g_winver&WIN10RS1)) { // check subclassification if(IsSubclassed(hwnd)) { SendMessage(g_hwndTClockMain, TCM_CLOCKERROR, 0, 6); return; } } #endif GetModuleFileName(g_hInst, g_mydir, MAX_PATH); del_title(g_mydir); strcpy(g_inifile, g_mydir); add_title(g_inifile, "tclock.ini"); g_bIniSetting = TRUE; /* g_bIniSetting = FALSE; if(IsFile(g_inifile)) g_bIniSetting = TRUE; */ // Save the original window size GetWindowRect(hwnd, &rc); g_OrigClockWidth = rc.right - rc.left; g_OrigClockHeight = rc.bottom - rc.top; // Save taskbar direction g_bVertTaskbar = IsVertTaskbar(GetParent(GetParent(hwnd))); g_bTaskbarPosChanging = FALSE; // tell tclock.exe clock's HWND PostMessage(g_hwndTClockMain, TCM_HWNDCLOCK, 0, (LPARAM)hwnd); // read settings LoadSetting(hwnd); InitTooltip(hwnd); // tooltip.c InitUserStr(); // userstr.c // subclassfy the clock window !! if(g_winver&WIN10RS1) { SetWindowSubclass(GetParent(hwnd), SubclassTrayProc, SUBCLASSTRAY_ID, (DWORD_PTR)hwnd); } SetWindowSubclass(hwnd, SubclassProc, SUBCLASS_ID, 0); // don't accept double clicks SetClassLong(hwnd, GCL_STYLE, GetClassLong(hwnd, GCL_STYLE) & ~CS_DBLCLKS); #if TC_ENABLE_STARTBUTTON InitStartButton(hwnd); // startbtn.c #endif #if TC_ENABLE_STARTMENU InitStartMenu(hwnd); // startmenu.c #endif #if TC_ENABLE_TASKBAR InitTaskbar(hwnd); // taskbar.c #endif #if TC_ENABLE_TASKSWITCH InitTaskSwitch(hwnd); // taskswitch.c #endif #if TC_ENABLE_TRAYNOTIFY InitTrayNotify(hwnd); // traynotify.c #endif #if TC_ENABLE_VOLUME InitMixer(); // mixer.c #endif #if TC_ENABLE_SYSINFO InitSysInfo(hwnd); // sysinfo.c #endif #if TC_ENABLE_TASKBAR RefreshTaskbar(hwnd); // taskbar.c #else PostMessage(GetParent(GetParent(hwnd)), WM_SIZE, SIZE_RESTORED, 0); InvalidateRect(GetParent(GetParent(hwnd)), NULL, TRUE); #endif SetTimer(hwnd, IDTIMER_MAIN, 1000, NULL); #if TC_ENABLE_DESKTOPICON SetDesktopIcons(); // desktop.c #endif }