ab.com コミュニティ https://www.activebasic.com/forum/ |
|
OSのbit数の取得について https://www.activebasic.com/forum/viewtopic.php?t=4620 |
ページ 1 / 1 |
作成者: | iiii [ 2017年7月25日(火) 16:45 ] |
記事の件名: | OSのbit数の取得について |
質問させてください。 インストーラーを作っていて、 起動時に、OSのbit数を取得して、 チェックボックス等の制御をかけたいのですが、 OSのbit数は、どのように取得すればよろしいでしょうか。 ※OSは、Windowsのみの想定で、7から10ぐらいまでを想定しています。 よろしくお願いいたします。 |
作成者: | たかせ [ 2017年7月26日(水) 00:23 ] |
記事の件名: | Re: OSのbit数の取得について |
環境変数の値の判定結果で取得できます。 具体的には環境変数(PROCESSOR_ARCHITECTURE)が ●"x86"のときは32BIT版Windows ●"AMD64"または"IA64"のときは64BIT版Windowsと判定できます。 しかし64BIT版Windowsで32BITのプログラム(この場合はインストーラを示す)が起動されたとき、 環境変数(PROCESSOR_ARCHITECTURE)に"x86"が設定されて「32BIT版Windows」とみなされます。 以下に示す手順で行ってみてください。 ●環境変数の取得 1 環境変数(PROCESSOR_ARCHITECTURE)の内容をWin32 API GetEnvironmentVariableで取得 2 環境変数(PROCESSOR_ARCHITEW6432)の内容をWin32 API GetEnvironmentVariableで取得 ●32BIT版/64BIT版 Winsowsの判定 1 環境変数(PROCESSOR_ARCHITECTURE)が"x86"のとき ●環境変数(PROCESSOR_ARCHITEW6432)が"AMD64"のとき「64BIT版 Winsows」 ●環境変数(PROCESSOR_ARCHITEW6432)が"AMD64"以外のとき「32BIT版 Winsows」 2 環境変数(PROCESSOR_ARCHITECTURE)が"x86"以外のとき「64BIT版 Winsows」 よろしくお願いします。 |
作成者: | たかせ [ 2017年7月26日(水) 13:05 ] |
記事の件名: | Re: OSのbit数の取得について |
ネットで検索すると主にバッチファイルの例ですが参考になると思います。 ご確認願います。 |
作成者: | iiii [ 2017年7月26日(水) 13:12 ] |
記事の件名: | Re: OSのbit数の取得について |
早速の回答、ありがとうございます。 下記のように、プログラムを組んでみたんですが、 私の力不足により、いまだ、処理を作りきることができません。 度々で申し訳ありませんが、もう少し、教えていただけないでしょうか。 コード: Dim buffer[2047] As Byte Dim buffer2[2047] As Byte GetEnvironmentVariable("PROCESSOR_ARCHITECTURE",buffer,2048) If buffer = "x86" Then GetEnvironmentVariable("PROCESSOR_ARCHITEW6432",buffer2,2048) If buffer2 = "AMD64" Then ' 64bit (64bitの時の処理) Else ' 32bit (32bitの時の処理) End If Else ' 64bit (64bitの時の処理) End If上記のプログラムを実行すると、bufferの内容が「x86」だったとしても、 最初の分岐で、Elseの方に流れてしまいます。 ためしに、 MessageBox(0,buffer, "確認", MB_OK) と表示させると、「x86」と表示されるので、bufferの取得はできているようです。 if分の書き方か、変数の扱いが間違っているとは思うのですが、 どのように直せばよいか、教えていただけないでしょうか。 よろしくお願いいたします。 |
作成者: | たかせ [ 2017年7月26日(水) 15:33 ] |
記事の件名: | Re: OSのbit数の取得について |
バイト型配列で「If buffer = "x86" Then」でコーディングすると C/C++と同様にbufferの値が"x86"かどうかではなくbufferのポインタの値と"x86"のポインタの値が一致するかどうかという判定となります。 なので期待通りに動作しません。 そこで「If buffer = "x86" Then」を「If memcmp(buffer,"x86",3) = 0 Then」に変更すると期待通りに動作します。 なおmemcmpはabのヘルプにのってません。 詳細はネットで検索して確認してください。 |
作成者: | iiii [ 2017年7月26日(水) 17:12 ] |
記事の件名: | Re: OSのbit数の取得について |
教えていただいたようにif文の書き方を変えたところ、 想定通りの動きになりました。 ありがとうございました。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |