Оказывается, Карабинер захватывал контроль над вводом и сбрасывал ключ home, который по иронии судьбы я установил, пытаясь переназначить ключ home, чтобы сбежать. Удаление его решило проблему.
В C#:
public bool Is64bit() {
return Marshal.SizeOf(typeof(IntPtr)) == 8;
}
В VB.NET :
Public Function Is64bit() As Boolean
If Marshal.SizeOf(GetType(IntPtr)) = 8 Then Return True
Return False
End Function
Я не знаю, какой язык Вы используете, но .NET имеет переменную среды PROCESSOR_ARCHITEW6432
, если ОС является 64-разрядной.
, Если все Вы хотите знать, работает ли Ваше приложение 32-разрядный или 64-разрядный, можно проверить IntPtr.Size
. Это будет 4 при выполнении в 32-разрядном режиме и 8 при выполнении в 64-разрядном режиме.
Если можно сделать вызовы API, попытайтесь использовать GetProcAddress / GetModuleHandle для проверки на существование IsWow64Process, который только присутствует в Windows OS, которые имеют 64-разрядные версии.
Вы могли также попробовать ProgramFiles (x86) переменная среды, используемая в Vista/2008 для назад совместимости, но я не на 100% уверен в XP-64 или 2003-64.
Удачи!
Я протестировал решение, которое я предложил в своем вопросе:
Протестированный на Windows Environment Variable: ProgramW6432
, Если это не пусто тогда, это - Windows на 64 бита. W
Вот некоторый код Delphi, чтобы проверить, работает ли ваша программа в 64-битной операционной системе:
function Is64BitOS: Boolean;
{$IFNDEF WIN64}
type
TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall;
var
hKernel32 : Integer;
IsWow64Process : TIsWow64Process;
IsWow64 : BOOL;
{$ENDIF}
begin
{$IFDEF WIN64}
//We're a 64-bit application; obviously we're running on 64-bit Windows.
Result := True;
{$ELSE}
// We can check if the operating system is 64-bit by checking whether
// we are running under Wow64 (we are 32-bit code). We must check if this
// function is implemented before we call it, because some older 32-bit
// versions of kernel32.dll (eg. Windows 2000) don't know about it.
// See "IsWow64Process", http://msdn.microsoft.com/en-us/library/ms684139.aspx
Result := False;
hKernel32 := LoadLibrary('kernel32.dll');
if hKernel32 = 0 then RaiseLastOSError;
try
@IsWow64Process := GetProcAddress(hkernel32, 'IsWow64Process');
if Assigned(IsWow64Process) then begin
if (IsWow64Process(GetCurrentProcess, IsWow64)) then begin
Result := IsWow64;
end
else RaiseLastOSError;
end;
finally
FreeLibrary(hKernel32);
end;
{$ENDIf}
end;
Чтобы проверить наличие 64-разрядной версии Windows в окне команд, я использую следующий шаблон:
test.bat:
@echo off
if defined ProgramFiles(x86) (
@echo yes
@echo Some 64-bit work
) else (
@echo no
@echo Some 32-bit work
)
ProgramFiles (x86)
- это переменная среды, автоматически определяемая cmd.exe (как 32-разрядная, так и 64-разрядная версии) только на 64-разрядных машинах Windows.
Я использовал это в сценарии входа в систему для обнаружения 64-битной Windows
if "%ProgramW6432%" == "%ProgramFiles%" goto is64flag