0

QtとC++を使用してWindowsパスを取得しようとしています。以下のコードはコンパイルされますが、QtのWindowsフォルダーパスは取得されません。同じコードがVisualStudio2010で機能します

      wchar_t path[MAX_PATH];
      SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, 0, path);

以下のコード変更は機能しているようです。

     int const bufferSize = 512;        
     QScopedPointer<WCHAR> dirPath(new WCHAR[bufferSize]);
     ZeroMemory( dirPath.operator ->(), bufferSize);
     SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, 0, dirPath.operator ->());
4

6 に答える 6

2

これを行うための Qt 関数はありませんが、環境変数を読み取ることで目的を達成できますWINDIR

QStringList env_list(QProcess::systemEnvironment());

int idx = env_list.indexOf(QRegExp("^WINDIR=.*", Qt::CaseInsensitive));
if (idx > -1)
{
    QStringList windir = env_list[idx].split('=');
    qDebug() << "Var : " << windir[0];
    qDebug() << "Path: " << windir[1];
}

出力:

Var :  "WINDIR"
Path:  "C:\WINDOWS"
于 2012-06-05T17:14:30.323 に答える
1
QString windowsInstallPath;

#ifdef Q_WS_WIN
QDir d;
if (d.cd("%windir%"))
    windowsInstallPath = d.absolutePath();
#endif

if (!windowsInstallPath.isNull())
    qDebug() << windowsInstallPath;
else
    qDebug() << "Not compiled for Windows";

動作するはずです。

于 2012-06-06T08:04:06.243 に答える
0

これを行うための特定のQt機能はないと思います。

最も近いのは、Windows のバージョンを示す QSysinfoです。ただし、SHGetFolderPath() は、他の win API 呼び出しと同様に Qt で動作する必要があります。

ps Windows Vista では、これはSHGetKnownFolderPathに置き換えられます。

于 2012-06-05T17:14:01.180 に答える