C# - Отправка сообщений к Google Chrome из приложения C#

Так что эту маленькую «проблему» не так просто уловить. Но по сути, Java обманула вас, округлив числа. Каждый раз, когда вы использовали (8/100) или любые другие вычисления для подоходного налога, java просто округлял их до 0, потому что целое / целое число интерпретируется как целочисленный результат. Самый простой способ исправить это, просто добавить .0 к каждому 100.

    if (Grosspay[i] > 0.00 || Grosspay[i] < 999.99) {
        incomeTax[i] = (8 / 100.0) * Grosspay[i];
    } else if (Grosspay[i] > 500.00 || Grosspay[i] < 999.99) {
        incomeTax[i] = (10 / 100.0) * Grosspay[i];
    } else if (Grosspay[i] > 1000.00) {
        incomeTax[i] = (15 / 100.0) * Grosspay[i];
    }

Это должно работать.

19
задан Joel 29 September 2008 в 08:49
поделиться

4 ответа

Запустите свое исследование в http://dev.chromium.org/developers

<час>

РЕДАКТИРОВАНИЕ : Отправка сообщения к окну является только половиной работы. Окно должно ответить на то сообщение и действие соответственно. Если то окно не знает о сообщении или не заботится вообще, что у Вас нет шанса управлять им путем отправки сообщений окна.

Вы смотрите на деталь реализации о как Вы удаленный управляемый Winamp. Отправка сообщений является всего одним способом сделать это, и это - способ, которым выбрали разработчики Winamp. Те сообщения, которые Вы используете, являются определяемыми пользователем сообщениями, которые имеют определенное значение только к Winamp.

то, Что необходимо сделать в первом шаге, должно узнать , если Хром поддерживает некоторое удаленное управление и каковы те механизмы.

9
ответ дан 30 November 2019 в 04:33
поделиться

Можно получить имя окна легко с помощью Шпиона Visual Studio ++ и нажатие CTRL+F, затем найдя хром. Я попробовал его и добрался

"Chrome_VistaFrame" для окно. Фактическое окно с веб-страницей в является "Chrome_RenderWidgetHostHWND".

Насколько WM_COMMAND идет - необходимо будет экспериментировать. Вы, очевидно, захотите отправить нажатия кнопок (WM_MOUSEDOWN вершины от моей головы). Как спина, вперед кнопки не являются своими собственными окнами, необходимо будет выяснить, как сделать это с моделированием щелчка мышью в определенном x, y положение, таким образом, хром знает то, что Вы делаете. Или Вы могли отправить сочетание клавиш, эквивалентное за назад/вперед и так далее.

пример, который я записал только что, делает это с trillian и winamp: передающие сообщения к окнам через c# и winapi

Там являются также инструментами там к макросу, такого рода вещь уже, с помощью языка сценариев - autoit является той, которую я использовал: autoit.com

7
ответ дан 30 November 2019 в 04:33
поделиться

Хорошо, вот то, что я имею до сих пор... Я отчасти знаю то, что я должен сделать, но это - просто вопрос выполнения его теперь...

Вот окно от Шпиона ++, я заблокировал на Chrome_RenderWidgetHostHWND и нажал Кнопку "Назад" на своей клавиатуре. Вот то, что я получил: alt text

, Таким образом, вот мои предположения, и я играл с этим навсегда теперь, я просто не могу выяснить значения .

IntPtr hWnd = FindWindow("Chrome_RenderWidgetHostHWND", null);
SendMessage(hWnd, WM_KEYDOWN, VK_BROWSER_BACK, 0);
SendMessage(hWnd, WM_KEYUP,   VK_BROWSER_BACK, 0);

Теперь, я просто не знаю то, что я должен сделать значениями WM_KEYDOWN/UP или значениями VK_BROWSER_BACK/FORWARD... Я попробовал это:

const int WM_KEYDOWN = 0x100;
const int WM_KEYUP = 0x101;
const int VK_BROWSER_BACK = 0x6A;
const int VK_BROWSER_FORWARD = 0x69;

последние два значения я добрался из изображения, которое я просто показал, ScanCodes для тех двух ключей. Я не знаю, сделал ли я его правильно все же. Бывшие два значения, которые я получил после поиска Google для значения WM_KEYDOWN, и кто-то использовал & H100 и & H101 для двух значений. Я попробовал несколько других случайных идей, я видел плавание вокруг. Я просто не могу понять это.

, О, и вот метод SendMessage

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, uint lParam);
4
ответ дан 30 November 2019 в 04:33
поделиться

Это - большой сайт для interop констант:

pinvoke

Другой способ найти значения состоит в том, чтобы искать koders.com, с помощью C# в качестве языка, для WM_KEYDOWN или константы, которая Вы после:

поиск Koders.com

& H значения похожи, это от VB (6). pinvoke и кодеры, оба результата возврата для VK_BROWSER_FORWARD,

private const UInt32 WM_KEYDOWN        = 0x0100;
private const UInt32 WM_KEYUP          = 0x0101;

public const ushort VK_BROWSER_BACK = 0xA6;
public const ushort VK_BROWSER_FORWARD = 0xA7;
public const ushort VK_BROWSER_REFRESH = 0xA8;
public const ushort VK_BROWSER_STOP = 0xA9;
public const ushort VK_BROWSER_SEARCH = 0xAA;
public const ushort VK_BROWSER_FAVORITES = 0xAB;
public const ushort VK_BROWSER_HOME = 0xAC;

(Это забавно, о скольких плавают неправильные определения констант VK, рассматривая VK_*, составляют 1 байт 0-255 значений и люди, сделали их единицами).

Взгляды, немного отличающиеся от Вашего consts. Я думаю функция, которая Вы, после SendInput (но я не попробовал его), поскольку это - виртуальная клавиша.

[DllImport("User32.dll")]
private static extern uint SendInput(uint numberOfInputs, [MarshalAs(UnmanagedType.LPArray, SizeConst = 1)] KEYBOARD_INPUT[] input, int structSize);

Объяснение о параметрах:

Параметры

  • nInputs-Количество структур в массиве pInputs.
  • pInputs - Указатель на массив ВХОДНЫХ структур. Каждая структура представляет событие, которое будет вставлено во входной поток клавиатуры или мыши.
  • cbSize - Указывает размер, в байтах, ВХОДНОЙ структуры. Если cbSize не является размером ВХОДНОЙ структуры, функциональных сбоев.

Этому нужен тип KEYBOARD_INPUT:

[StructLayout(LayoutKind.Sequential)] 
public struct KEYBOARD_INPUT
{ 
    public uint type; 
    public ushort vk; 
    public ushort scanCode; 
    public uint flags; 
    public uint time; 
    public uint extrainfo; 
    public uint padding1; 
    public uint padding2; 
}

И наконец образец, который я не протестировал, если он работает:

/*
typedef struct tagKEYBDINPUT {
    WORD wVk;
    WORD wScan;
    DWORD dwFlags;
    DWORD time;
    ULONG_PTR dwExtraInfo;
} KEYBDINPUT, *PKEYBDINPUT;
*/
public static void sendKey(int scanCode, bool press)
{
        KEYBOARD_INPUT[] input = new KEYBOARD_INPUT[1];
        input[0] = new KEYBOARD_INPUT();
        input[0].type = INPUT_KEYBOARD;
        input[0].vk = VK_BROWSER_BACK;

    uint result = SendInput(1, input, Marshal.SizeOf(input[0]));
}

Также необходимо будет сфокусировать окно Chrome с помощью SetForegroundWindow

4
ответ дан 30 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: