#include "common.h" #pragma hdrstop extern HINSTANCE hInst; #define MAXLBUTS 32 LBUTOPT LBUTS[MAXLBUTS]; static int LButCnt = 0; extern char *AS(char *str, const char *setting, char *addstr); //wparam -id INT_PTR LaunchService(WPARAM wParam, LPARAM lParam) { PROCESS_INFORMATION pi; STARTUPINFO si = {0}; si.cb = sizeof(si); if ( lParam < 0 || lParam >= MAXLBUTS ) return -1; if ( CreateProcess(NULL, LBUTS[lParam].lpath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } Sleep(20); CallService(MS_TTB_SETBUTTONSTATE, LBUTS[lParam].hframe, TTBST_RELEASED); return 0; } //wparam -id //lparam &LBTOPT INT_PTR GetLButton(WPARAM wParam, LPARAM lParam) { if ( wParam < 0 || wParam >= MAXLBUTS ) return -1; LBUTOPT *lbo = ( LBUTOPT* )lParam; if (lbo == NULL) return -1; if (LBUTS[wParam].hframe == 0) return -1; *lbo = LBUTS[wParam]; return 0; } //wparam -id //lparam &LBTOPT INT_PTR ModifyLButton(WPARAM wParam, LPARAM lParam) { if ( wParam < 0 || wParam >= LButCnt ) return -1; LBUTOPT *lbo = ( LBUTOPT* )lParam; if (lbo == NULL) return -1; if (LBUTS[wParam].hframe == 0) return -1; DeleteLBut(wParam, 0); if (LBUTS[wParam].lpath != NULL){free(LBUTS[wParam].lpath);} if (LBUTS[wParam].name != NULL){free(LBUTS[wParam].name);} LBUTS[wParam].name = NULL; LBUTS[wParam].lpath = NULL; if (lbo->name != NULL) LBUTS[wParam].name = _strdup(lbo->name); if (lbo->lpath != NULL) LBUTS[wParam].lpath = _strdup(lbo->lpath); LBUTS[wParam].hframe = InsertLBut(wParam); SaveAllLButs(); return 0; } int InsertLBut(int id) { HBITMAP DefLUp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_LAUNCHDN)); HBITMAP DefLDn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_LAUNCHUP)); TTBButton ttb = { 0 }; ttb.cbSize = sizeof(ttb); ttb.hbBitmapDown = DefLDn; ttb.hbBitmapUp = DefLUp; ttb.dwFlags = TTBBF_VISIBLE|TTBBF_ISLBUTTON; ttb.pszServiceDown = TTB_LAUNCHSERVICE; ttb.lParamDown = id; ttb.name = LBUTS[id].name; LButCnt++; return TTBAddButton(( WPARAM )&ttb, 0); } INT_PTR DeleteLBut(WPARAM id, LPARAM lParam) { if (LBUTS[id].hframe != 0) { TTBRemoveButton(LBUTS[id].hframe, 0); LBUTS[id].hframe = 0; if (LBUTS[id].name != NULL){free(LBUTS[id].name);} if (LBUTS[id].lpath != NULL){free(LBUTS[id].lpath);} LBUTS[id].name = NULL; LBUTS[id].lpath = NULL; LButCnt--; } return 0; } int LoadAllLButs() { char buf[255]; char buf1[10]; char fixname[255]; int id, i; // char *oldtb; //must be locked memset(buf, 0, sizeof(buf)); memset(LBUTS, 0, sizeof(LBUTS)); for (i = 0;i