<MenuItem>
<MenuItem.Icon>
<Image>
<Image.Source>
<BitmapImage UriSource="/your_assembly;component/your_path_here/Image.png" />
</Image.Source>
</Image>
</MenuItem.Icon>
</MenuItem>
Просто удостоверяются Ваше изображение в также включенном в файл проекта и отмеченном как ресурс, и Вы хороши для движения:)
Доступно несколько вариантов:
Вызвать QueryDosDevice с NULL lpDeviceName для вывода списка всех устройств DOS. Затем используйте CreateFile и GetCommConfig с каждым именем устройства по очереди, чтобы выяснить, является ли он последовательным портом.
Вызовите SetupDiGetClassDevs с ClassGuid GUID_DEVINTERFACE_COMPORT.
Идут разговоры о группе новостей win32 и проекте CodeProject, например, .
I только что создал следующее, основываясь на чтении исходного кода C ++ до EnumSerialPorts и просмотре функции GetDefaultCommConfig ()
. Это выглядело как простейший метод, использующий простой ANSI C и один вызов API для каждого возможного COM-порта.
#include <stdio.h>
#include <windows.h>
#include <winbase.h>
BOOL COM_exists( int port)
{
char buffer[7];
COMMCONFIG CommConfig;
DWORD size;
if (! (1 <= port && port <= 255))
{
return FALSE;
}
snprintf( buffer, sizeof buffer, "COM%d", port);
size = sizeof CommConfig;
// COM port exists if GetDefaultCommConfig returns TRUE
// or changes <size> to indicate COMMCONFIG buffer too small.
return (GetDefaultCommConfig( buffer, &CommConfig, &size)
|| size > sizeof CommConfig);
}
int main()
{
int i;
for (i = 1; i < 256; ++i)
{
if (COM_exists( i))
{
printf( "COM%d exists\n", i);
}
}
return 0;
}