ShellExecute в Windows Embedded

я использую

ShellExecute(NULL,"open","control.exe","ncpa.cpl","c:\\windows\\system32\\",SW_NORMAL); 

чтобы открыть окно сетевых подключений. Это работает в моей системе, на которой установлена ​​​​Windows XP. Но когда я делаю сборку для машины, на которой должна работать эта программа, она не работает. На нем установлена ​​Windows Embedded. Я думаю, это потому, что в Windows Embedded нет control.exe.

Поэтому я попытался запустить

ShellExecute(NULL,"open","Rundll32.exe","ncpa.cpl","c:\\windows\\system32\\",SW_NORMAL);

но это не работает. Он возвращает 42, так что это успех, но все равно ничего не происходит. Я пробовал различные другие варианты, такие как использование «ncpa.cpl» и «Rundll32.exe Shell32.dll» вместо «Rundll32.exe», но это тоже не работает. Как я могу использовать ShellExecute, чтобы он работал как на моем компьютере, так и на Windows Embedded. Даже если есть решение, которое будет работать только на Windows Embedded, это нормально, поскольку я просто #определю его.


person user807665    schedule 21.06.2011    source источник


Ответы (1)


Один из вариантов — пропустить ShellExecute и просто напрямую загрузить и вызвать панель управления, используя ее CPlApplet. Протокол, которому необходимо следовать, задокументирован (с точки зрения панели управления) в MSDN. Тогда вам не понадобится какое-либо внешнее вспомогательное приложение для запуска панели управления; вы бы просто разместили его прямо в своем процессе.

person bdonlan    schedule 21.06.2011
comment
Извините, но я не совсем уверен, как это сделать, лол. Можете ли вы привести краткий пример того, как я могу использовать CPIApplet для реализации этого. Я в основном ищу одну строку кода, которая может вызвать это окно сетевых подключений. CPIApplet кажется слишком сложным, чтобы открыть одно окно. Можно ли сделать если не с функцией ShellExecute, то с любой другой функцией? - person user807665; 23.06.2011
comment
@user807665 user807665, если вам не хватает control.exe, для этого нет однострочника; вам нужно будет повторно реализовать часть того, что делает control.exe, что и документирует документация MSDN. - person bdonlan; 23.06.2011
comment
Я взглянул на CPIApplet, но думаю, что это слишком хлопотно. Я пытался использовать что-то еще на самом деле. Сделал командный файл для открытия ncpa.cpl. Затем я просто использовал ShellExecute(NULL,open,timepass.bat,NULL,NULL,SW_HIDE); который отлично работал в Windows XP, но не работал в Windows Embedded. В чем здесь может быть проблема? Я убедился, что timepass.bat находится в том месте, где он должен быть (в том же месте, что и исполняемый файл). Для Windows Embedded мне нужно добавить что-то дополнительное? - person user807665; 11.07.2011
comment
Скорее всего, в Windows Embedded отсутствует исполняемый файл, в котором обычно размещаются апплеты панели управления. Поэтому вам нужно напрямую использовать точку входа CPlApplet. - person bdonlan; 11.07.2011