[英]Why does this azure function produce a JSON output?
[英]SendInput() does not produce any visible output
我在獲取SendInput函數以生成任何形式的輸出時遇到問題。 所有結構的定義如下(我已經舍棄了鼠標和硬件):
[StructLayout(LayoutKind.Explicit)]
public struct INPUT
{
[FieldOffset(0)]
public int type;
[FieldOffset(8)]
public MOUSEINPUT mi;
[FieldOffset(8)]
public KEYBDINPUT ki;
[FieldOffset(8)]
public HARDWAREINPUT hi;
}
[StructLayout(LayoutKind.Sequential)]
public struct KEYBDINPUT
{
public ushort wVk;
public ushort wScan;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
我通過以下方式發送密鑰:
SetForegroundWindow(hProc); // using user32.dll switch to desired process
// send keydown
INPUT iKeyDown = new INPUT();
KEYBDINPUT sKeysDown = new KEYBDINPUT();
iKeyDown.type = KEYBD_INPUT_TYPE;
iKeyDown.ki = sKeysDown;
sKeysDown.wVk = 0;
sKeysDown.wScan = (ushort)0x1E;
sKeysDown.dwFlags = 0x0008 ;
sKeysDown.time = 0;
sKeysDown.dwExtraInfo = GetMessageExtraInfo();
除了dwFlags屬性,我以完全相同的方式發送Key Up事件:
sKeysUp.dwFlags = 0x0008 | 0x0002;
最后,
INPUT[] aInputs = new INPUT[] { iKeyDown, iKeyUp };
uint result = SendInput(2, aInputs, Marshal.SizeOf(iKeyDown)); // when dll importing, SetLastError = true
int error = Marshal.GetLastWin32Error();
Debug.WriteLine(result.ToString() + " " + error.ToString());
結果是,沒有可見的輸出,結果變量始終等於2(成功輸入的數量),並且GetLastWin32Error()返回0(根據錯誤代碼,這是成功的)。 我在這里想念什么嗎? 干杯!
我已經回答了自己的問題-我輸入的結構不正確。 代替
INPUT iKeyDown = new INPUT();
KEYBDINPUT sKeysDown = new KEYBDINPUT();
iKeyDown.type = KEYBD_INPUT_TYPE;
iKeyDown.ki = sKeysDown;
sKeysDown.wVk = 0; // etc
我應該一直在做
INPUT iKeyDown = new INPUT();
iKeyDown.type = KEYBD_INPUT_TYPE;
iKeyDown.ki.wvK = 0; // etc
代替。 新的KEYBDINPUT()搞砸了。 我確實也按照GSerg的建議將Mouse / Keyboard / Hardware聯合放在了自己的單獨結構中。 現在它正在按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.