Esempio n. 1
0
//
// LSExecuteEx
//
HINSTANCE LSExecuteEx(HWND hOwner, LPCSTR pszOperation, LPCSTR pszCommand, LPCSTR pszArgs, LPCSTR pszDirectory, int nShowCmd)
{
    HINSTANCE hReturn = HINSTANCE(32);
    
    if (pszCommand != NULL)
    {
        if (pszCommand[0] == '!')
        {
            hReturn = ParseBangCommand(hOwner, pszCommand, pszArgs) ?
                HINSTANCE(33) : HINSTANCE(32);
        }
        else
        {
            TRACE("LSExecuteEx(%.8X, \"%s\", \"%s\", \"%s\", \"%s\", %d);",
                hOwner, pszOperation, pszCommand, pszArgs,pszDirectory,
                nShowCmd);
            
            if (PathIsDirectory(pszCommand))
            {
                hReturn = LSShellExecute(hOwner, pszOperation, pszCommand,
                    pszArgs, NULL, nShowCmd ? nShowCmd : SW_SHOWNORMAL);
            }
            else
            {
                SHELLEXECUTEINFO seiCommand = { 0 };
                seiCommand.cbSize = sizeof(SHELLEXECUTEINFO);
                seiCommand.hwnd = hOwner;
                seiCommand.lpVerb = pszOperation;
                seiCommand.lpFile = pszCommand;
                seiCommand.lpParameters = pszArgs;
                seiCommand.lpDirectory = pszDirectory;
                seiCommand.nShow = nShowCmd;
                seiCommand.fMask = SEE_MASK_DOENVSUBST | SEE_MASK_FLAG_NO_UI;
                
                LSShellExecuteEx(&seiCommand);
                
                hReturn = seiCommand.hInstApp;
            }
        }
    }
    
    return hReturn;
}
Esempio n. 2
0
File: hotkey.c Progetto: now/purels
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case LM_GETREVID:
		{
			char *buf = (char *) lParam;

			if (wParam == 0)
			{
				strcpy(buf, "hotkey.dll: ");
				strcat(buf, &rcsRevision[11]);
				buf[strlen(buf)-1] = '\0';
			}
			else if (wParam == 1)
			{
				strcpy(buf, &rcsId[1]);
				buf[strlen(buf)-1] = '\0';
			} else
			{
				strcpy(buf, "");
			}
			return strlen(buf);

		}
	case WM_ENDSESSION:
	case WM_QUERYENDSESSION:
		return SendMessage(parent,message,wParam,lParam);
	case WM_SYSCOMMAND:
		{
		switch (wParam)
			{
			case SC_CLOSE:
				PostMessage(parent,WM_KEYDOWN,LM_SHUTDOWN,0);
				return 0;
			default:
				return DefWindowProc(hwnd,message,wParam,lParam);
			}
		}

	case WM_CREATE:
		{
			int i;

			for (i=0;i<numHotkeys;i++)
			{
				RegisterHotKey(hwnd,i,hotkeys[i].sub,hotkeys[i].ch);
			}
			if (GetRCBool("HotkeyNoWinKeyPopup",FALSE)){
				if (!RegisterHotKey(hwnd, GlobalAddAtom("LWIN_KEY"),MOD_WIN, VK_LWIN)){
					MessageBox(NULL,"Error registering Win Key",szAppName,MB_OK);
				}
				if (!RegisterHotKey(hwnd, GlobalAddAtom("RWIN_KEY"),MOD_WIN, VK_RWIN)){
					MessageBox(NULL,"Error registering Win Key",szAppName,MB_OK);
				}
			}
			if (GetRCBool("LSNoShellWarning", FALSE) && GetRCBool("ExplorerNoWarn", FALSE)){
				if (!RegisterHotKey(hwnd, GlobalAddAtom("CTL_ESC"),MOD_CONTROL,VK_ESCAPE)){
					MessageBox(NULL,"Error registering Ctrl+Esc",szAppName,MB_OK);
				}
			} 
		}
		return 0;

	case WM_DESTROY:
		UnregisterHotKey(hwnd, GlobalFindAtom("LWIN_KEY"));
		UnregisterHotKey(hwnd, GlobalFindAtom("RWIN_KEY"));
		UnregisterHotKey(hwnd, GlobalFindAtom("CTL_ESC"));
		GlobalDeleteAtom(GlobalFindAtom("LWIN_KEY"));
		GlobalDeleteAtom(GlobalFindAtom("RWIN_KEY"));
		GlobalDeleteAtom(GlobalFindAtom("CTL_ESC"));
		return 0;

	case WM_ERASEBKGND: 
		return 0;

	case WM_PAINT:  
		return 0;

	case WM_HOTKEY:
		{
			if (wParam <  (WPARAM) numHotkeys)
			{
				int num = wParam;

				if (lstrlen(hotkeys[num].szCommand))
				{
					if (hotkeys[num].szCommand[0] == '!') {
						KillTimer(hwnd, 1);
						ParseBangCommand(hwnd, hotkeys[num].szCommand, hotkeys[num].szParameters);
					} else {
			            char workDirectory[_MAX_PATH], drive[_MAX_DRIVE], dir[_MAX_DIR];

						_splitpath(hotkeys[num].szCommand, drive, dir, NULL, NULL);
						strcpy(workDirectory, drive);
						strcat(workDirectory, dir);

						LSExecuteEx(GetDesktopWindow(), NULL, hotkeys[num].szCommand, hotkeys[num].szParameters, workDirectory, SW_SHOWNORMAL);

						KillTimer(hwnd, 1);
						/*
						SHELLEXECUTEINFO si;
						char workDirectory[MAX_PATH];
						char drive[_MAX_DRIVE];
						char dir[_MAX_DIR];
		
						_splitpath(hotkeys[num].szCommand, drive, dir, NULL, NULL);
						strcpy(workDirectory, drive);
						strcat(workDirectory, dir);
						memset(&si, 0, sizeof(si));
						si.cbSize = sizeof(SHELLEXECUTEINFO);
						si.lpDirectory = workDirectory;
						si.lpVerb = NULL;
						si.nShow = 1;
						si.fMask = SEE_MASK_DOENVSUBST;
						si.lpFile = hotkeys[num].szCommand;
						si.lpParameters = hotkeys[num].szParameters;
						ShellExecuteEx(&si);
						*/
					}
				}
			}
			else
			{
				char szCommand[1024];

				if (GlobalGetAtomName((ATOM)wParam, szCommand, 1024) > 0)
				{
					if (!strcmp(szCommand, "CTL_ESC"))
						SendMessage(parent, LM_POPUP, 0, 0);
					else if (!strcmp(szCommand, "REINIT") && GetRCBool("HotkeyLoadExplorerKeys", TRUE)) {
						drizzt_FreeHotKeys();
						drizzt_InitHotKeys();
					} else if (!strcmp(szCommand, "LWIN_KEY")) {
						SetTimer(hwnd, 1, 750, NULL);
					} else if (!strcmp(szCommand, "RWIN_KEY")) {
						SetTimer(hwnd, 1, 750, NULL);
					} else {
						KillTimer(hwnd, 1);
						if (GetRCBool("HotkeyLoadExplorerKeys", TRUE)){
							drizzt_execute(szCommand, NULL, NULL);
						}
					}
				}
			}

			break;
		}
	case WM_TIMER:
		if (wParam == 1) {
			ParseBangCommand(hwnd, "!Popup", NULL);
			KillTimer(hwnd, 1);
		}
	}
	return DefWindowProc(hwnd,message,wParam,lParam);
}