Is there something wrong with my ShellExecute()?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = GetSysColorBrush(COLOR_3DFACE);

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */
#define ID_Save 1
#define ID_Load 1
#define ID_Exit 1
#define ID_Undo 1
#define ID_Redo 1
#define ID_VWS 1

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {   
        case WM_CREATE:{
             
             HMENU hMenubar = CreateMenu();
             HMENU hFile = CreateMenu();
             HMENU hEdit = CreateMenu();
             HMENU hHelp = CreateMenu();
             
             AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hFile, "File");           
             AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hEdit, "Edit");
             AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hHelp, "Help"); 
             
             AppendMenu(hFile, MF_STRING, ID_Save, "Save");
             AppendMenu(hFile, MF_STRING, ID_Load, "Load");
             AppendMenu(hFile, MF_STRING, ID_Exit, "Exit");
               
             AppendMenu(hEdit, MF_STRING, ID_Undo, "Undo");
             AppendMenu(hEdit, MF_STRING, ID_Redo, "Redo");
                
             AppendMenu(hHelp, MF_STRING, ID_VWS, "Visit website");
             
             SetMenu( hwnd, hMenubar);
             
             break;
             }
        case WM_COMMAND:{
             
             if (LOWORD(wParam) == ID_Exit){
                exit(0);
                                }
             if (LOWORD(wParam) == ID_VWS){
                ShellExecute(NULL, "Open", "http://www.youtube.com/", 
                NULL, NULL, SW_SHOWNORMAL);
                }
             
             break;
             }
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}


The following code is from the article in cplusplus, everything work quite fine. But just the ShellExecute(), can anyone check where is the problem, i did specified the url, but why the program just terminate when i the ID_VWS is 'run' .?
Can you really not see what the problem is??
But the problem isn't with the ShellExecute call itself! So the answer to the title of your thread is, No!

But there is problem close by!!

Andy
I am rather new to this window api programming stuff. I stared at my code, but i can't find the problem, it is seem that when i click on other dropdown option, the program also end out terminating itself. And when i switch the order of the code, i bring the shellexecute command line forward(above the ID_Exit), the youtube page is called to my broswer, but the program still terminate itself. Does this mean I linked the dropdown option wrongly and cause the Exit(0); called every time i click any of those option?

Edit: Oh not just that, every button do the same function( load youtube then terminate...)
Last edited on
Oh after changing all the #define ... (n) , the problem solved. Does this mean the function return the 'int' type value instead of the 'string' type??
Topic archived. No new replies allowed.