Я использовал sendInput() под xp 32bits, используя webservices, чтобы нажать F5 текущих сфокусированных окон. Теперь под Vista win64 я не могу получить этот результат. Некоторые статьи указывают на проблемы uint с использованием 4 бит или 8 бит, но это не устраняет проблему под Vista с дифференциальной компиляцией и FieldOffset (4) или (8). Другие говорят об отсутствии взаимодействия между экраном Vista и окном, используя этот метод SendInput(). Может ли кто-то указать на решение нажать F5 в win32 и win64. Благодарю.SendInput Keys в машинах Win32 и Win64
uint intReturn = 0;
NativeWIN32.INPUT structInput;
structInput = new NativeWIN32.INPUT();
structInput.type = (uint)1;
structInput.ki.wScan = 0;
structInput.ki.time = 0;
structInput.ki.dwFlags = 0;
structInput.ki.dwExtraInfo = IntPtr.Zero;
// Key down the actual key-code
structInput.ki.wVk = (ushort)NativeWIN32.VK.F5;
//vk;
intReturn = NativeWIN32.SendInput((uint)1, ref structInput, Marshal.SizeOf(structInput));
// Key up the actual key-code
structInput.ki.dwFlags = NativeWIN32.KEYEVENTF_KEYUP;
structInput.ki.wVk = (ushort)NativeWIN32.VK.F5;
//vk;
intReturn = NativeWIN32.SendInput((uint)1, ref structInput, Marshal.SizeOf(structInput));
public class NativeWIN32
{
public const ushort KEYEVENTF_KEYUP = 0x0002;
public enum VK : ushort
{
F5 = 0x74,
}
public struct KEYBDINPUT
{
public ushort wVk;
public ushort wScan;
public uint dwFlags;
public long time;
public uint dwExtraInfo;
};
[StructLayout(LayoutKind.Explicit,Size=28)]
public struct INPUT
{
[FieldOffset(0)]
public uint type;
#if x86
//32bit
[FieldOffset(4)]
#else
//64bit
[FieldOffset(8)]
#endif
public KEYBDINPUT ki;
};
[DllImport("user32.dll")]
public static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize);
}
Пожалуйста, покажите нам свои объявления. – SLaks
Действие: нажмите F5 из веб-приложения под Vista64 и после Win7-64. – user325558
Этот парень, похоже, получил его на работу. http://social.msdn.microsoft.com/Forums/en/windowscompatibility/thread/627b1c8c-0b75-4f73-9e29-3e17e93d539a –