Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于循环的GetLogicalDrives()_C++_C_Winapi - Fatal编程技术网

C++ 用于循环的GetLogicalDrives()

C++ 用于循环的GetLogicalDrives(),c++,c,winapi,C++,C,Winapi,我是win32 api新手,需要帮助了解GetLogicalDrives()函数的工作原理。我正在尝试用所有未使用的可用驱动器填充cbs_dropdownlist。这是我到目前为止所拥有的。我将感谢任何帮助 void FillListBox(HWND hWndDropMenu) { DWORD drives = GetLogicalDrives(); for (int i=0; i<26; i++) { SendMessage(hWndDropMenu, CB_ADDSTRI

我是win32 api新手,需要帮助了解GetLogicalDrives()函数的工作原理。我正在尝试用所有未使用的可用驱动器填充cbs_dropdownlist。这是我到目前为止所拥有的。我将感谢任何帮助

void FillListBox(HWND hWndDropMenu)
{
 DWORD drives = GetLogicalDrives();
 for (int i=0; i<26; i++)
 {
    SendMessage(hWndDropMenu, CB_ADDSTRING, 0, (LPARAM)drives);
 }
}
void FillListBox(HWND hwndropmenu)
{
DWORD驱动器=GetLogicalDrive();

对于(int i=0;i函数
GetLogicalDrives
返回可用逻辑驱动器的位掩码。下面是如何执行此操作:

 DWORD drives = GetLogicalDrives();
 for (int i=0; i<26; i++)
 {
    if( !( drives & ( 1 << i ) ) )
    {
       TCHAR driveName[] = { TEXT('A') + i, TEXT(':'), TEXT('\\'), TEXT('\0') };
       SendMessage(hWndDropMenu, CB_ADDSTRING, 0, (LPARAM)driveName);
    }
 }
DWORD drives=GetLogicalDrives();

对于(int i=0;i函数
GetLogicalDrives
返回可用逻辑驱动器的位掩码。下面是如何执行此操作:

 DWORD drives = GetLogicalDrives();
 for (int i=0; i<26; i++)
 {
    if( !( drives & ( 1 << i ) ) )
    {
       TCHAR driveName[] = { TEXT('A') + i, TEXT(':'), TEXT('\\'), TEXT('\0') };
       SendMessage(hWndDropMenu, CB_ADDSTRING, 0, (LPARAM)driveName);
    }
 }
DWORD drives=GetLogicalDrives();

对于(int i=0;i
GetLogicalDrives
返回位掩码,要检查它,需要使用位运算符。要查看驱动器a是否正在使用:

GetLogicalDrives() & 1 == 1
如果驱动器A不可用,
GetLogicalDrives()&1
将产生
0
,条件将失败

要检查下一个驱动器,您需要使用2、
GetLogicalDrives()&2、
GetLogicalDrives()&4等的下一个倍数

您可以使用
GetLogicalDriveStrings
,但这会返回您想要的相反的结果,即所有使用的逻辑驱动器

我将构建一个表,并索引到其中:

const char *drive_names[] = 
{
    "A:",
    "B:",
    ...
    "Z:"
};
那么您的循环可以是:

DWORD drives_bitmask = GetLogicalDrives();

for (DWORD i < 0; i < 32; i++)
{
    // Shift 1 to a multiple of 2. 1 << 0 = 1 (0000 0001), 1 << 1 = 2 etc.
    DWORD mask_index = 1 << i;
    if (drives_bitmask & i == 0)
    {
        // Drive unavailable, add it to list.
        const char *name = drive_names[i];
        // ... do GUI work.
    }
}
DWORD驱动器\u位掩码=GetLogicalDrives();
for(DWORD i<0;i<32;i++)
{

//将1移到2的倍数。1返回位掩码,要检查它,需要使用位运算符。要查看驱动器a是否正在使用,请执行以下操作:

GetLogicalDrives() & 1 == 1
如果驱动器A不可用,
GetLogicalDrives()&1
将产生
0
,条件将失败

要检查下一个驱动器,您需要使用2、
GetLogicalDrives()&2、
GetLogicalDrives()&4等的下一个倍数

您可以使用
GetLogicalDriveStrings
,但这会返回您想要的相反的结果,即所有使用的逻辑驱动器

我将构建一个表,并索引到其中:

const char *drive_names[] = 
{
    "A:",
    "B:",
    ...
    "Z:"
};
那么您的循环可以是:

DWORD drives_bitmask = GetLogicalDrives();

for (DWORD i < 0; i < 32; i++)
{
    // Shift 1 to a multiple of 2. 1 << 0 = 1 (0000 0001), 1 << 1 = 2 etc.
    DWORD mask_index = 1 << i;
    if (drives_bitmask & i == 0)
    {
        // Drive unavailable, add it to list.
        const char *name = drive_names[i];
        // ... do GUI work.
    }
}
DWORD驱动器\u位掩码=GetLogicalDrives();
for(DWORD i<0;i<32;i++)
{

//根据我的理解,将1移到2.1的倍数,
GetLogicalDrives()
返回一个位掩码,如果驱动器可用,则该位掩码包含零。我只想用未使用的字母填充dropdownlist。是否
GetLogicalDriveStrings()
即使在使用中也要返回所有驱动器?@arynhard:抱歉,我没有注意到您想要的是与逻辑驱动器相反的驱动器。更新了我的答案以反映这一点。谢谢!您帮了我很大的忙。有点小问题。我的列表中有一大堆汉字。@arynhard:我相信您使用的是Unicode而不是多字节字符呃,为
WCHAR
更改
CHAR
,为
L'?'
更改
CHAR
。该死的是那些无法捕捉最简单错误的Windows宏…据我所知,
GetLogicalDrives()
返回一个位掩码,如果驱动器可用,则该位掩码包含零。我想用未使用的字母填充dropdownlist。是否
GetLogicalDriveStrings()
即使在使用中也要返回所有驱动器?@arynhard:抱歉,我没有注意到您想要的是与逻辑驱动器相反的驱动器。更新了我的答案以反映这一点。谢谢!您帮了我很大的忙。有点小问题。我的列表中有一大堆汉字。@arynhard:我相信您使用的是Unicode而不是多字节字符呃,为
WCHAR
更改
CHAR
,为
L'?'
更改
CHAR
。该死的是那些无法捕捉最简单错误的Windows宏。。。