Так что эту маленькую «проблему» не так просто уловить. Но по сути, 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];
}
Это должно работать.
Запустите свое исследование в http://dev.chromium.org/developers
<час>РЕДАКТИРОВАНИЕ : Отправка сообщения к окну является только половиной работы. Окно должно ответить на то сообщение и действие соответственно. Если то окно не знает о сообщении или не заботится вообще, что у Вас нет шанса управлять им путем отправки сообщений окна.
Вы смотрите на деталь реализации о как Вы удаленный управляемый Winamp. Отправка сообщений является всего одним способом сделать это, и это - способ, которым выбрали разработчики Winamp. Те сообщения, которые Вы используете, являются определяемыми пользователем сообщениями, которые имеют определенное значение только к Winamp.
то, Что необходимо сделать в первом шаге, должно узнать , если Хром поддерживает некоторое удаленное управление и каковы те механизмы.
Можно получить имя окна легко с помощью Шпиона Visual Studio ++ и нажатие CTRL+F, затем найдя хром. Я попробовал его и добрался
"Chrome_VistaFrame" для окно. Фактическое окно с веб-страницей в является "Chrome_RenderWidgetHostHWND".
Насколько WM_COMMAND идет - необходимо будет экспериментировать. Вы, очевидно, захотите отправить нажатия кнопок (WM_MOUSEDOWN вершины от моей головы). Как спина, вперед кнопки не являются своими собственными окнами, необходимо будет выяснить, как сделать это с моделированием щелчка мышью в определенном x, y положение, таким образом, хром знает то, что Вы делаете. Или Вы могли отправить сочетание клавиш, эквивалентное за назад/вперед и так далее.
пример, который я записал только что, делает это с trillian и winamp: передающие сообщения к окнам через c# и winapi
Там являются также инструментами там к макросу, такого рода вещь уже, с помощью языка сценариев - autoit является той, которую я использовал: autoit.com
Хорошо, вот то, что я имею до сих пор... Я отчасти знаю то, что я должен сделать, но это - просто вопрос выполнения его теперь...
Вот окно от Шпиона ++, я заблокировал на Chrome_RenderWidgetHostHWND и нажал Кнопку "Назад" на своей клавиатуре. Вот то, что я получил:
, Таким образом, вот мои предположения, и я играл с этим навсегда теперь, я просто не могу выяснить значения .
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);
Это - большой сайт для interop констант:
Другой способ найти значения состоит в том, чтобы искать koders.com, с помощью C# в качестве языка, для WM_KEYDOWN или константы, которая Вы после:
& 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);
Объяснение о параметрах:
Параметры
Этому нужен тип 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