Exemplo n.º 1
0
void MRUSelChange(HWND hDlg)
{
    int nItem;
    HWND hCB;
    PSTARTINFO pStartInfo;
    LRESULT lresult;
    TCHAR    szCmd[MAX_PATH];

    hCB = GetDlgItem(hDlg, IDD_COMMAND);
    nItem = (int)SendMessage(hCB, CB_GETCURSEL, 0, 0L);
    if (nItem < 0)
    {
        return;
    }

    lresult = SendMessage(hCB, CB_GETITEMDATA, nItem, 0L);
    if ((lresult == 0) || (lresult == CB_ERR))
    {
        return;
    }
    pStartInfo = (PSTARTINFO)lresult;

#ifdef SHOWSTATES
    SendDlgItemMessage(hDlg, IDD_STATE, CB_SETCURSEL, pStartInfo->nState, 0L);
#endif

    lresult = SendMessage(hCB, CB_GETLBTEXT, nItem, (LPARAM)szCmd);
    PathRemoveBlanks(szCmd);
    EnableOKButton(hDlg, szCmd);
}
Exemplo n.º 2
0
void BrowsePushed(LPRUNDLG_DATA lprd)
{
    HWND hDlg = lprd->hDlg;
    TCHAR szText[MAX_PATH];

    // Get out of the "synchronized input queues" state
    if (lprd->dwThreadId)
    {
        AttachThreadInput(GetCurrentThreadId(), lprd->dwThreadId, FALSE);
        lprd->dwThreadId = 0;
    }

    GetDlgItemText(hDlg, IDD_COMMAND, szText, ARRAYSIZE(szText));
    PathUnquoteSpaces(szText);

    if (GetFileNameFromBrowse(hDlg, szText, ARRAYSIZE(szText), lprd->lpszWorkingDir,
            MAKEINTRESOURCE(IDS_EXE), MAKEINTRESOURCE(IDS_PROGRAMSFILTER),
            MAKEINTRESOURCE(IDS_BROWSE)))
    {
        PathQuoteSpaces(szText);
        SetDlgItemText(hDlg, IDD_COMMAND, szText);
        EnableOKButton(hDlg, szText);
        // place the focus on OK
        // SetFocus(GetDlgItem(hDlg, IDOK));
        SendMessage(hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg, IDOK), TRUE);
    }
}
Exemplo n.º 3
0
static void Login_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
	switch(id){
		case IDOK:
			if(IsPasswordValid(hwnd)){
				EndDialog(hwnd, IDOK);
			}
			break;
		case IDCANCEL:
			EndDialog(hwnd, IDCANCEL);
			break;
		case IDC_EDT_PWRD_MAIN:
		case IDC_EDT_PWRD_SECOND:
		case IDC_EDT_PWRD_NEW:
			if(codeNotify == EN_CHANGE)
				EnableOKButton(hwnd);
			break;

	}
}
Exemplo n.º 4
0
BOOL CALLBACK RunDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LPRUNDLG_DATA lprd;

    lprd = (LPRUNDLG_DATA)GetWindowLong(hDlg, DWL_USER);
    switch (uMsg)
    {
    case WM_INITDIALOG:
            /* The title will be in the lParam. */
            lprd = (LPRUNDLG_DATA)lParam;
            lprd->hDlg = hDlg;
            lprd->fDone = FALSE;
            InitRunDlg(hDlg, lprd);
            // Let the parent thread run on if it was waiting for us to
            // grab type-ahead.
            if (lprd->hEventReady)
            {
                // We need to grab the activation so we can process input.
                // DebugMsg(DM_TRACE, "s.rdp: Getting activation.");
                SetForegroundWindow(hDlg);
                SetFocus(GetDlgItem(hDlg, IDD_COMMAND));
                // Now it's safe to wake the guy up properly.
                // DebugMsg(DM_TRACE, "s.rdp: Waking sleeping parent.");
                SetEvent(lprd->hEventReady);
                CloseHandle(lprd->hEventReady);
            }
            else
            {
                SetForegroundWindow(hDlg);
                SetFocus(GetDlgItem(hDlg, IDD_COMMAND));
            }

            // InitRunDlg 2nd phase (must be called after SetEvent)
            InitRunDlg2(hDlg, lprd);

            // We're handling focus changes.
            return FALSE;

    case WM_DESTROY:
            break;

    case WM_HELP:
        WinHelp((HWND) ((LPHELPINFO) lParam)->hItemHandle, NULL, HELP_WM_HELP,
            (DWORD) (LPTSTR) aRunHelpIds);
        break;

    case WM_CONTEXTMENU:      // right mouse click
        WinHelp((HWND) wParam, NULL, HELP_CONTEXTMENU,
            (DWORD) (LPTSTR) aRunHelpIds);
        break;


    case WM_COMMAND:
            switch (GET_WM_COMMAND_ID(wParam, lParam))
            {
            case IDHELP:
                    break;

            case IDD_COMMAND:
                switch (GET_WM_COMMAND_CMD(wParam, lParam))
                {
                case CBN_SELCHANGE:
                    MRUSelChange(hDlg);
#ifdef WINNT
                    if ( g_hCheckNow )
                    {
                        SetEvent( g_hCheckNow );
                    }
#endif // WINNT
                    break;
                case CBN_EDITCHANGE:
                case CBN_SELENDOK:
                    EnableOKButton(hDlg, NULL);
#ifdef WINNT
                    if ( g_hCheckNow )
                    {
                        SetEvent( g_hCheckNow );
                    }
#endif // WINNT
                    break;
                }
                break;

            case IDOK:
            if (!OKPushed(lprd)) {
#ifdef WINNT
                if (!(lprd->dwFlags & RFD_NOSEPMEMORY_BOX))
                {
                    g_bCheckRunInSep = FALSE;
                    SetEvent( g_hCheckNow );
                }
#endif // WINNT
                break;
            }
            // fall through

            case IDCANCEL:
                ExitRunDlg(lprd, FALSE);
                break;

            case IDD_BROWSE:
                BrowsePushed(lprd);
#ifdef WINNT
                SetEvent( g_hCheckNow );
#endif // WINNT
                break;

            default:
                return FALSE;
            }
            break;

    default:
        return FALSE;
    }
    return TRUE;
}
Exemplo n.º 5
0
void InitRunDlg(HWND hDlg, LPRUNDLG_DATA lprd)
{
    HWND hCB;
    int i;
#ifdef WINNT
    HANDLE hThread = NULL;
    DWORD dwDummy;
#endif

    if (lprd->lpszTitle)
        SetWindowText(hDlg, lprd->lpszTitle);

    if (lprd->lpszPrompt)
    {
        SetDlgItemText(hDlg, IDD_PROMPT, lprd->lpszPrompt);
    }

    if (lprd->hIcon)
    {
        Static_SetIcon(GetDlgItem(hDlg, IDD_ICON), lprd->hIcon);
    }

    if (lprd->dwFlags & RFD_NOBROWSE)
    {
        HWND hBrowse;

        hBrowse = GetDlgItem(hDlg, IDD_BROWSE);

        ExchangeWindowPos(hBrowse, GetDlgItem(hDlg, IDCANCEL));
        ExchangeWindowPos(hBrowse, GetDlgItem(hDlg, IDOK));

        ShowWindow(hBrowse, SW_HIDE);
    }

    if (lprd->dwFlags & RFD_NOSHOWOPEN)
    {
        ShowWindow(GetDlgItem(hDlg, IDD_RUNDLGOPENPROMPT), SW_HIDE);
    }

#ifdef SHOWSTATES
    /* Note that we need to fill this list first so that the SELCHANGE
     * message sent below will do the right thing.
     */
    hCB = GetDlgItem(hDlg, IDD_STATE);
    for (i = 0; i < ARRAYSIZE(pnStates); ++i)
    {
        if (SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)(LPTSTR)szStates[i]) < 0)
        {
            break;
        }
    }
    SendMessage(hCB, CB_SETCURSEL, 0, 0L);
#endif

    hCB = GetDlgItem(hDlg, IDD_COMMAND);
    SendMessage(hCB, CB_LIMITTEXT, MAX_PATH-1, 0L);

    OpenRunDlgMRU();

    if (g_hMRURunDlg)
    {
        int nMax;
        TCHAR szCommand[MAX_PATH];

        for (nMax=EnumMRUList(g_hMRURunDlg, -1, NULL, 0), i=0; i<nMax; ++i)
        {
            if (EnumMRUList(g_hMRURunDlg, i, szCommand, ARRAYSIZE(szCommand)) > 0)
            {
                PSTARTINFO pStartInfo;

                /* Parse the line into the STARTINFO struct
                 */
                pStartInfo = ParseIniLine(szCommand);

                /* The command to run goes in the combobox.
                 */
                if (SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)(LPTSTR)szCommand)
                        != i)
                {
                    if (pStartInfo)
                    {
                        LocalFree((HLOCAL)pStartInfo);
                    }
                }
                else
                {
                    SendMessage(hCB, CB_SETITEMDATA, i, (LPARAM)(LPSTARTINFO)pStartInfo);
                }
            }
        }
    }

    if (!(lprd->dwFlags & RFD_NODEFFILE))
    {
        SendMessage(hCB, CB_SETCURSEL, 0, 0L);
    }
    SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDD_COMMAND, CBN_SELCHANGE), (LPARAM) hCB);

    SetWindowLong(hDlg, DWL_USER, (LONG)lprd);

    // Make sure the OK button is initialized properly
    EnableOKButton(hDlg, NULL);

#ifdef WINNT
    //
    // Create the thread that will take care of the
    // "Run in Separate Memory Space" checkbox in the background.
    //

    if (lprd->dwFlags & RFD_NOSEPMEMORY_BOX)
    {
        ShowWindow(GetDlgItem(hDlg, IDD_RUNINSEPARATE), SW_HIDE);
    }
    else
    {
        Assert( g_hCheckNow==NULL );
        g_hCheckNow = CreateEvent( NULL, TRUE, FALSE, NULL );
        if (g_hCheckNow) {

            g_bCheckRunInSep = TRUE;
            hThread = CreateThread( NULL,
                                    0,
                                    (LPTHREAD_START_ROUTINE)CheckRunInSeparateThread,
                                    (LPVOID)hDlg,
                                    0,
                                    &dwDummy
                                   );
        }

        if ((g_hCheckNow==NULL) || (!g_bCheckRunInSep) || (hThread==NULL)) {

            //
            // We've encountered a problem setting up, so make the user
            // choose.
            //

            CheckDlgButton( hDlg, IDD_RUNINSEPARATE, 1 );
            EnableWindow( GetDlgItem( hDlg, IDD_RUNINSEPARATE ), TRUE );
            g_bCheckRunInSep = FALSE;
        }

        //
        // These calls will just do nothing if either handle is NULL.
        //
        if (hThread)
            CloseHandle( hThread );
        if (g_hCheckNow)
            SetEvent( g_hCheckNow );
    }

#endif // WINNT


}
Exemplo n.º 6
0
STDMETHODIMP CRunDropTarget_Drop(LPDROPTARGET pdtgt, LPDATAOBJECT pdtobj,
                             DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
{
    LPRUNDLG_DATA this = IToClass(RUNDLG_DATA, _dtgt, pdtgt);
    TCHAR szPath[MAX_PATH + 2];
    LPTSTR lpszPath = szPath + 1;
    TCHAR szText[1024];
    FORMATETC fmte = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
    STGMEDIUM medium;

    DAD_DragLeave();

    szPath[0] = TEXT('"');
    lpszPath[0] = 0;
    *pdwEffect = 0;

    if (SUCCEEDED(pdtobj->lpVtbl->GetData(pdtobj, &fmte, &medium)))
    {
        DragQueryFile(medium.hGlobal, 0, lpszPath, ARRAYSIZE(szPath) -1);

        SHReleaseStgMedium(&medium);
    }

    if (lpszPath[0] == 0)
    {
#ifdef UNICODE
        fmte.cfFormat = CF_UNICODETEXT;

        if (SUCCEEDED(pdtobj->lpVtbl->GetData(pdtobj, &fmte, &medium)))
        {
            lstrcpyn(lpszPath, GlobalLock(medium.hGlobal), ARRAYSIZE(szPath) -1);
            GlobalUnlock(medium.hGlobal);

            SHReleaseStgMedium(&medium);
        }
        else
#endif
        {
            fmte.cfFormat = CF_TEXT;

            if (SUCCEEDED(pdtobj->lpVtbl->GetData(pdtobj, &fmte, &medium)))
            {
#ifdef UNICODE
                MultiByteToWideChar( CP_ACP, 0, GlobalLock(medium.hGlobal), -1, lpszPath, ARRAYSIZE(szPath) -1 );
#else
                lstrcpyn(lpszPath, GlobalLock(medium.hGlobal), ARRAYSIZE(szPath) -1);
#endif
                GlobalUnlock(medium.hGlobal);

                SHReleaseStgMedium(&medium);
            }
        }
    }

    if (lpszPath[0])
    {
        GetDlgItemText(this->hDlg, IDD_COMMAND, szText, ARRAYSIZE(szText) - (ARRAYSIZE(szPath) - 1));
        if (StrChr(lpszPath, TEXT(' '))) {
            // there's a space in the file... add qutoes
            lpszPath--;
            lstrcat(lpszPath, c_szQuote);
        }

        if (szText[0])
            lstrcat(szText, c_szSpace);
        lstrcat(szText, lpszPath);

        SetDlgItemText(this->hDlg, IDD_COMMAND, szText);

        EnableOKButton(this->hDlg, szText);

        *pdwEffect = DROPEFFECT_COPY;
    }

    return NOERROR;
}